From 50b50499210bb52d1bbae6b65009f058426d2d1a Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 5 Aug 2010 10:52:08 +0000 Subject: * compile.c (iseq_compile_each): drop unused ARGSCAT results. fix [ruby-dev:41933], [Bug #3658] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28870 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ compile.c | 5 +++-- test/ruby/test_primitive.rb | 6 ++++++ 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 + + * compile.c (iseq_compile_each): drop unused ARGSCAT results. + fix [ruby-dev:41933], [Bug #3658] + Thu Aug 5 18:36:11 2010 Nobuyoshi Nakada * 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 -- cgit v1.2.3