summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-10-05 08:56:34 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-10-05 08:56:34 +0000
commit4aa8b47bb9a7ba33828b7a1b654a3c4ed1d8bdf9 (patch)
treed119d2d68c21cc5a0ca989297832ed8778c94595 /eval.c
parent12c8c18f096722f5497f054edcf6c24435c5f879 (diff)
* eval.c (rb_eval): fix evaluation order. [ruby-list:38431]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4695 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/eval.c b/eval.c
index bc10513a56..3025d71bd6 100644
--- a/eval.c
+++ b/eval.c
@@ -2477,8 +2477,11 @@ rb_eval(self, n)
/* nodes for speed-up(literal match) */
case NODE_MATCH2:
- result = rb_reg_match(rb_eval(self,node->nd_recv),
- rb_eval(self,node->nd_value));
+ {
+ VALUE l = rb_eval(self,node->nd_recv);
+ VALUE r = rb_eval(self,node->nd_value);
+ result = rb_reg_match(l, r);
+ }
break;
/* nodes for speed-up(literal match) */
@@ -2929,13 +2932,19 @@ rb_eval(self, n)
break;
case NODE_ARGSCAT:
- result = rb_ary_concat(rb_eval(self, node->nd_head),
- splat_value(rb_eval(self, node->nd_body)));
+ {
+ VALUE args = rb_eval(self, node->nd_head);
+ result = rb_ary_concat(args,
+ splat_value(rb_eval(self, node->nd_body)));
+ }
break;
case NODE_ARGSPUSH:
- result = rb_ary_push(rb_ary_dup(rb_eval(self, node->nd_head)),
- rb_eval(self, node->nd_body));
+ {
+ VALUE args = rb_ary_dup(rb_eval(self, node->nd_head));
+ result = rb_ary_push(args,
+ rb_eval(self, node->nd_body));
+ }
break;
case NODE_ATTRASGN: