Passing proc objects to ruby extensions


#1

Hi list! Its a been a while since I was around here, but I remember it
being the place to ask these sorts of questions, especially since Yarv
has now merged into real Ruby.

How does a proc object get passed when writing a ruby extension in c?
ie

Ruby
a = Proc.new{|z| z*2}
f(a)

C
void f(VALUE a){
switch(TYPE(a)){

}
}

None of the usual types match. What is ‘a’ here? There doesn’t seem to
be a struct for Procs in ruby.h. Might it be a pointer to the iseq
struct? :slight_smile:

(FTR, I’m mesing around with what is now quite an old build -
yarv-0.4.1, I’m hoping it hasn’t changed much since the merge?)

warm regards,
stu


#2

Hi,

At Sun, 27 May 2007 02:04:24 +0900,
Stuart Trail wrote in [ruby-talk:253118]:

How does a proc object get passed when writing a ruby extension in c?

None of the usual types match. What is ‘a’ here? There doesn’t seem to
be a struct for Procs in ruby.h. Might it be a pointer to the iseq
struct? :slight_smile:

T_DATA.

See rb_obj_is_proc() in proc.c.