summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/codegen.c4
-rw-r--r--src/vm.c7
-rw-r--r--test/t/syntax.rb7
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;
diff --git a/src/vm.c b/src/vm.c
index 88c0f2e49..4434f79b6 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -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