[#237] object.c ruby.h (fwd) — Robert Skarwecki <skaav@...>

Hello everybody,

42 messages 2002/07/24
[#239] Re: [PATCH] object.c ruby.h (fwd) — GOTO Kentaro <gotoken@...> 2002/07/24

At Thu, 25 Jul 2002 00:02:28 +0900,

[#240] Re: [PATCH] object.c ruby.h (fwd) — Dave Thomas <Dave@...> 2002/07/24

GOTO Kentaro <gotoken@notwork.org> writes:

[#246] Re: [PATCH] object.c ruby.h (fwd) — GOTO Kentaro <gotoken@...> 2002/07/25

At Thu, 25 Jul 2002 05:05:46 +0900,

[#247] Re: [PATCH] object.c ruby.h (fwd) — Dave Thomas <Dave@...> 2002/07/25

GOTO Kentaro <gotoken@notwork.org> writes:

[#248] Re: [PATCH] object.c ruby.h (fwd) — nobu.nokada@... 2002/07/25

Hi,

[#249] Re: [PATCH] object.c ruby.h (fwd) — Dave Thomas <Dave@...> 2002/07/25

nobu.nokada@softhome.net writes:

[#250] Re: [PATCH] object.c ruby.h (fwd) — nobu.nokada@... 2002/07/25

Hi,

[#252] Re: [PATCH] object.c ruby.h (fwd) — GOTO Kentaro <gotoken@...> 2002/07/25

At Fri, 26 Jul 2002 03:11:02 +0900,

[#253] Re: [PATCH] object.c ruby.h (fwd) — Dave Thomas <Dave@...> 2002/07/25

GOTO Kentaro <gotoken@notwork.org> writes:

A couple of questions on writing extensions

From: Matthew Bloch <mattbee@...>
Date: 2002-07-25 21:09:35 UTC
List: ruby-core #254
*) what does 'Died with exception wrong argument type Object (expected Data)' 
mean?  Isn't everything an object?  Since converting a Ruby class to C for 
performance reasons, while debugging, I've this exception raised at random 
points in my program, e.g. reported as being thrown from the fairly 
innocuous:

  key.gsub!(/\//, File::SEPARATOR)

which is nothing to do with my converted class, but the error implies 'key' is 
somehow corrupt or of the wrong type, where the same code worked before.  
This exception seems to be thrown from different points depending on timing 
(though more often than not in a simple call to a logger), which is pretty 
difficult to track down.

*) Is this kind of construct safe as the end of a bog-standard native accessor 
method? :

  static VALUE  
  rb_Overlay_pos_read(VALUE self)
  { 
    Overlay *ov; 
    Data_Get_Struct(self, Overlay, ov); 
    return rb_Rect_new(Overlay_Rect_class, 
      INT2NUM(ov->position.tl.x), INT2NUM(ov->position.tl.y), 
      INT2NUM(ov->position.br.x), INT2NUM(ov->position.br.y)); 
  }

i.e. constructing a temporary object with the same value as the one inquired 
about?  Might it be garbage collected before being read by the Ruby caller?  
Will it be garbage-collected when the result goes out of context in the 
calling Ruby method?

*) is this a correct way to call back a method implemented in class derived 
from a C extension class? :
  
  static void
  rb_paint_callback(Overlay *ov, void *arg, Rect *r)
  {
    VALUE rubyrect = rb_Rect_new(Overlay_Rect_class, 
      INT2NUM(r->tl.x), 
      INT2NUM(r->tl.y), 
      INT2NUM(r->br.x), 
      INT2NUM(r->br.y));
    rb_funcall(ov->ruby, rb_intern("paint"), 2, (VALUE) arg, rubyrect);
  }

thanks,

-- 
Matthew       > http://www.soup-kitchen.net/
              > ICQ 19482073

In This Thread

Prev Next