[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