diff options
| -rw-r--r-- | src/codegen.c | 4 | ||||
| -rw-r--r-- | src/vm.c | 7 | ||||
| -rw-r--r-- | test/t/syntax.rb | 7 |
3 files changed, 8 insertions, 10 deletions
diff --git a/src/codegen.c b/src/codegen.c index a880244cc..2070fb0e2 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -1017,9 +1017,6 @@ gen_vmassignment(codegen_scope *s, node *tree, int rhs, int val) } } } - if (!val) { - pop(); - } } static void @@ -1639,6 +1636,7 @@ codegen(codegen_scope *s, node *tree, int val) /* variable rhs */ codegen(s, t, VAL); gen_vmassignment(s, tree->car, rhs, val); + pop(); } } break; @@ -1080,12 +1080,7 @@ RETRY_TRY_BLOCK: ci->mid = mid; ci->proc = m; ci->stackent = mrb->c->stack; - if (c->tt == MRB_TT_ICLASS) { - ci->target_class = c->c; - } - else { - ci->target_class = c; - } + ci->target_class = c; ci->pc = pc + 1; ci->acc = a; diff --git a/test/t/syntax.rb b/test/t/syntax.rb index e105cd3d4..e7a962441 100644 --- a/test/t/syntax.rb +++ b/test/t/syntax.rb @@ -167,13 +167,18 @@ assert('Abbreviated variable assignment as returns') do assert_equal 1, Syntax4AbbrVarAsgnAsReturns::A.new.b end -assert('Splat and mass assignment') do +assert('Splat and multiple assignment') do *a = *[1,2,3] b, *c = *[7,8,9] assert_equal [1,2,3], a assert_equal 7, b assert_equal [8,9], c + + (a, b), c = [1,2],3 + assert_equal [1,2,3], [a,b,c] + (a, b), c = 1,2,3 + assert_equal [1,nil,2], [a,b,c] end assert('Return values of case statements') do |
