Forum: Ruby passing proc objects to ruby extensions

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Stuart T. (Guest)
on 2007-05-26 21:04
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? :)

(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
Nobuyoshi N. (Guest)
on 2007-05-27 10:36
(Received via mailing list)
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? :)

T_DATA.

See rb_obj_is_proc() in proc.c.
This topic is locked and can not be replied to.