[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