Revision: 1115 http://trac.macosforge.org/projects/ruby/changeset/1115 Author: lsansonetti@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);
participants (1)
-
source_changes@macosforge.org