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

source_changes at macosforge.org source_changes at macosforge.org
Mon Mar 23 15:23:56 PDT 2009


Revision: 1115
          http://trac.macosforge.org/projects/ruby/changeset/1115
Author:   lsansonetti at apple.com
Date:     2009-03-23 15:23:56 -0700 (Mon, 23 Mar 2009)
Log Message:
-----------
make sure the same array can be reused more than once in an array definition that uses splats

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

Modified: MacRuby/branches/experimental/roxor.cpp
===================================================================
--- MacRuby/branches/experimental/roxor.cpp	2009-03-23 21:59:46 UTC (rev 1114)
+++ MacRuby/branches/experimental/roxor.cpp	2009-03-23 22:23:56 UTC (rev 1115)
@@ -218,6 +218,7 @@
 	Function *newHashFunc;
 	Function *toArrayFunc;
 	Function *catArrayFunc;
+	Function *dupArrayFunc;
 	Function *newArrayFunc;
 	Function *newRangeFunc;
 	Function *newRegexpFunc;
@@ -538,6 +539,7 @@
     newHashFunc = NULL;
     toArrayFunc = NULL;
     catArrayFunc = NULL;
+    dupArrayFunc = NULL;
     newArrayFunc = NULL;
     newRangeFunc = NULL;
     newRegexpFunc = NULL;
@@ -3168,6 +3170,17 @@
 		assert(node->nd_head != NULL);
 		Value *ary = compile_node(node->nd_head);
 
+		if (dupArrayFunc == NULL) {
+		    dupArrayFunc = cast<Function>(
+			    module->getOrInsertFunction("rb_ary_dup",
+				RubyObjTy, RubyObjTy, NULL));
+		}
+
+		std::vector<Value *> params;
+		params.push_back(ary);
+
+		ary = compile_protected_call(dupArrayFunc, params);
+
 		assert(node->nd_body != NULL);
 		Value *other = compile_node(node->nd_body);
 
@@ -3178,7 +3191,7 @@
 				RubyObjTy, RubyObjTy, RubyObjTy, NULL));
 		}
 
-		std::vector<Value *> params;
+		params.clear();
 		params.push_back(ary);
 		params.push_back(other);
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090323/e8cd0108/attachment.html>


More information about the macruby-changes mailing list