summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--compile.c5
-rw-r--r--test/ruby/test_primitive.rb6
3 files changed, 14 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 28a6637f82..2ef06c2aba 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Thu Aug 5 19:51:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_compile_each): drop unused ARGSCAT results.
+ fix [ruby-dev:41933], [Bug #3658]
+
Thu Aug 5 18:36:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
* complex.c (nucomp_marshal_load): should check the argument.
diff --git a/compile.c b/compile.c
index fbd8e7cfab..f838654cf4 100644
--- a/compile.c
+++ b/compile.c
@@ -4521,8 +4521,9 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
break;
}
case NODE_ARGSCAT:{
- COMPILE(ret, "argscat head", node->nd_head);
- COMPILE(ret, "argscat body", node->nd_body);
+ COMPILE_(ret, "argscat head", node->nd_head, poped);
+ COMPILE_(ret, "argscat body", node->nd_body, poped);
+ if (poped) break;
ADD_INSN(ret, nd_line(node), concatarray);
break;
}
diff --git a/test/ruby/test_primitive.rb b/test/ruby/test_primitive.rb
index d701348f26..e87028c860 100644
--- a/test/ruby/test_primitive.rb
+++ b/test/ruby/test_primitive.rb
@@ -273,6 +273,7 @@ class TestRubyPrimitive < Test::Unit::TestCase
assert_equal 'abcd', $&
assert_equal 'xyz', $`
assert_equal 'efgabcdefg', $'
+ # '
assert_equal 'c', $+
/(?!)/ =~ 'xyzabcdefgabcdefg'
@@ -400,4 +401,9 @@ class TestRubyPrimitive < Test::Unit::TestCase
#assert_equal [0,1,2,3,4], [0, *a, 4]
end
+ def test_concatarray_ruby_dev_41933
+ bug3658 = '[ruby-dev:41933]'
+ [0, *x=1]
+ assert_equal(1, x, bug3658)
+ end
end