[macruby-changes] [4872] MacRuby/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Tue Nov 2 16:28:40 PDT 2010
Revision: 4872
http://trac.macosforge.org/projects/ruby/changeset/4872
Author: lsansonetti at apple.com
Date: 2010-11-02 16:28:36 -0700 (Tue, 02 Nov 2010)
Log Message:
-----------
expose rb_obj_instance_eval() MRI API
Modified Paths:
--------------
MacRuby/trunk/include/ruby/intern.h
MacRuby/trunk/vm_eval.c
Modified: MacRuby/trunk/include/ruby/intern.h
===================================================================
--- MacRuby/trunk/include/ruby/intern.h 2010-11-02 19:28:22 UTC (rev 4871)
+++ MacRuby/trunk/include/ruby/intern.h 2010-11-02 23:28:36 UTC (rev 4872)
@@ -248,6 +248,7 @@
VALUE rb_apply(VALUE, ID, VALUE);
void rb_backtrace(void);
ID rb_frame_this_func(void);
+VALUE rb_obj_instance_eval(int, VALUE*, VALUE);
void rb_load(VALUE, int);
NORETURN(void rb_jump_tag(int));
int rb_provided(const char*);
Modified: MacRuby/trunk/vm_eval.c
===================================================================
--- MacRuby/trunk/vm_eval.c 2010-11-02 19:28:22 UTC (rev 4871)
+++ MacRuby/trunk/vm_eval.c 2010-11-02 23:28:36 UTC (rev 4872)
@@ -529,7 +529,7 @@
*/
static VALUE
-rb_obj_instance_eval(VALUE self, SEL sel, VALUE top, int argc, VALUE *argv)
+rb_obj_instance_eval_imp(VALUE self, SEL sel, VALUE top, int argc, VALUE *argv)
{
VALUE klass;
@@ -538,16 +538,26 @@
}
else {
klass = rb_singleton_class(self);
- switch (TYPE(top)) {
- case T_CLASS:
- case T_MODULE:
- rb_vm_set_outer(klass, top);
- break;
+ if (top != Qundef) {
+ switch (TYPE(top)) {
+ case T_CLASS:
+ case T_MODULE:
+ rb_vm_set_outer(klass, top);
+ break;
+ }
}
}
return specific_eval(argc, argv, klass, self);
}
+VALUE
+rb_obj_instance_eval(int argc, VALUE *argv, VALUE self)
+{
+ // XXX: does not honor top context variable, so certain const lookups
+ // might fail.
+ return rb_obj_instance_eval_imp(self, 0, Qundef, argc, argv);
+}
+
/*
* call-seq:
* obj.instance_exec(arg...) {|var...| block } => obj
@@ -787,12 +797,12 @@
rb_objc_define_module_function(rb_mKernel, "loop", rb_f_loop, 0);
- rb_objc_define_method(rb_cNSObject, "instance_eval", rb_obj_instance_eval, -3);
+ rb_objc_define_method(rb_cNSObject, "instance_eval", rb_obj_instance_eval_imp, -3);
rb_objc_define_method(rb_cNSObject, "instance_exec", rb_obj_instance_exec, -1);
rb_objc_define_private_method(rb_cNSObject, "method_missing", rb_method_missing, -1);
rb_objc_define_method(rb_cNSObject, "__send__", rb_f_send, -1);
- rb_objc_define_method(rb_cBasicObject, "instance_eval", rb_obj_instance_eval, -3);
+ rb_objc_define_method(rb_cBasicObject, "instance_eval", rb_obj_instance_eval_imp, -3);
rb_objc_define_method(rb_cBasicObject, "instance_exec", rb_obj_instance_exec, -1);
rb_objc_define_private_method(rb_cBasicObject, "method_missing", rb_method_missing, -1);
rb_objc_define_method(rb_cBasicObject, "__send__", rb_f_send, -1);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20101102/64edde97/attachment.html>
More information about the macruby-changes
mailing list