[macruby-changes] [2819] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Thu Oct 15 16:51:16 PDT 2009


Revision: 2819
          http://trac.macosforge.org/projects/ruby/changeset/2819
Author:   lsansonetti at apple.com
Date:     2009-10-15 16:51:16 -0700 (Thu, 15 Oct 2009)
Log Message:
-----------
a binding created from a method with a block passed by now has a reference to the block and uses it during evaluation

Modified Paths:
--------------
    MacRuby/trunk/proc.c
    MacRuby/trunk/vm.cpp
    MacRuby/trunk/vm.h

Modified: MacRuby/trunk/proc.c
===================================================================
--- MacRuby/trunk/proc.c	2009-10-15 23:50:21 UTC (rev 2818)
+++ MacRuby/trunk/proc.c	2009-10-15 23:51:16 UTC (rev 2819)
@@ -1391,6 +1391,7 @@
     rb_vm_binding_t *binding = (rb_vm_binding_t *)xmalloc(
 	    sizeof(rb_vm_binding_t));
 
+    binding->block = NULL;
     GC_WB(&binding->self, block->self);
     GC_WB(&binding->locals, block->locals);
 

Modified: MacRuby/trunk/vm.cpp
===================================================================
--- MacRuby/trunk/vm.cpp	2009-10-15 23:50:21 UTC (rev 2818)
+++ MacRuby/trunk/vm.cpp	2009-10-15 23:51:16 UTC (rev 2819)
@@ -2562,7 +2562,10 @@
 
     rb_vm_add_binding_lvar_use(binding, current_block, parent_var_uses);
 
-    GET_VM()->push_current_binding(binding);
+    RoxorVM *vm = GET_VM();
+    GC_WB(&binding->block, vm->current_block());
+
+    vm->push_current_binding(binding);
 }
 
 extern "C"
@@ -3274,6 +3277,8 @@
 	RoxorCompiler::shared->set_dynamic_class(true);
     }
 
+    vm->add_current_block(binding != NULL ? binding->block : NULL);
+
     struct Finally {
 	RoxorVM *vm;
 	bool old_dynamic_class;
@@ -3289,6 +3294,7 @@
 	    RoxorCompiler::shared->set_dynamic_class(old_dynamic_class);
 	    vm->set_current_top_object(old_top_object);
 	    vm->set_current_class(old_class);
+	    vm->pop_current_block();
 	}
     } finalizer(vm, old_dynamic_class, old_class, old_top_object);
 

Modified: MacRuby/trunk/vm.h
===================================================================
--- MacRuby/trunk/vm.h	2009-10-15 23:50:21 UTC (rev 2818)
+++ MacRuby/trunk/vm.h	2009-10-15 23:51:16 UTC (rev 2819)
@@ -53,6 +53,7 @@
 
 typedef struct {
     VALUE self;
+    rb_vm_block_t *block;
     rb_vm_local_t *locals;
 } rb_vm_binding_t;
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20091015/366a030d/attachment-0001.html>


More information about the macruby-changes mailing list