[macruby-changes] [1001] MacRuby/branches/experimental/roxor.cpp

source_changes at macosforge.org source_changes at macosforge.org
Thu Mar 19 20:55:07 PDT 2009


Revision: 1001
          http://trac.macosforge.org/projects/ruby/changeset/1001
Author:   lsansonetti at apple.com
Date:     2009-03-19 20:55:06 -0700 (Thu, 19 Mar 2009)
Log Message:
-----------
cleaned + added a comment for posterity

Modified Paths:
--------------
    MacRuby/branches/experimental/roxor.cpp

Modified: MacRuby/branches/experimental/roxor.cpp
===================================================================
--- MacRuby/branches/experimental/roxor.cpp	2009-03-20 03:49:59 UTC (rev 1000)
+++ MacRuby/branches/experimental/roxor.cpp	2009-03-20 03:55:06 UTC (rev 1001)
@@ -5070,13 +5070,14 @@
     printf("yield block %p argc %d arity %d dvars %d\n", b, argc, arity.real, b->dvars_size);
 #endif
 
+    // We need to preserve dynamic variable slots here because our block may
+    // call the parent method which may call the block again, and since dvars
+    // are currently implemented using alloca() we will painfully die if the 
+    // previous slots are not restored.
+
     VALUE **old_dvars;
     if (b->dvars_size > 0) {
-	old_dvars = (VALUE **)alloca(sizeof(VALUE *) * b->dvars_size);
-	for (int i = 0; i < b->dvars_size; i++) {
-	    old_dvars[i] = b->dvars[i];
-	}
-	//memcpy(old_dvars, b->dvars, sizeof(VALUE) * b->dvars_size);
+	memcpy(old_dvars, b->dvars, sizeof(VALUE) * b->dvars_size);
     }
     else {
 	old_dvars = NULL;
@@ -5085,10 +5086,7 @@
     VALUE v = __rb_vm_rcall(b->self, b->node, b->imp, arity, argc, argv);
 
     if (old_dvars != NULL) {
-	for (int i = 0; i < b->dvars_size; i++) {
-	    b->dvars[i] = old_dvars[i];
-	}
-	//memcpy(b->dvars, old_dvars, sizeof(VALUE) * b->dvars_size);
+	memcpy(b->dvars, old_dvars, sizeof(VALUE) * b->dvars_size);
     }
 
     return v;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090319/5dc2ec17/attachment.html>


More information about the macruby-changes mailing list