summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorcremno <[email protected]>2015-05-07 16:58:43 +0200
committercremno <[email protected]>2015-05-07 16:58:43 +0200
commit2aa59393bafa24421ff6c5b90de59af8a25f927c (patch)
tree28688fbb165a73c4f8371cd79dfccac842f48eab
parent2fe556d9c039839c20965a2c90dff703f04e40ec (diff)
downloadmruby-2aa59393bafa24421ff6c5b90de59af8a25f927c.tar.gz
mruby-2aa59393bafa24421ff6c5b90de59af8a25f927c.zip
fix splat without assignment; fix #2781
The parser generates NODE_NIL for tSTAR without argument in masgns. The codegen didn't handle that.
-rw-r--r--src/codegen.c3
-rw-r--r--test/t/syntax.rb6
2 files changed, 9 insertions, 0 deletions
diff --git a/src/codegen.c b/src/codegen.c
index c8f964f56..16e1235de 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -964,6 +964,9 @@ gen_assignment(codegen_scope *s, node *tree, int sp, int val)
genop_peep(s, MKOP_AB(OP_MOVE, cursp(), sp), val);
}
break;
+ /* splat without assignment */
+ case NODE_NIL:
+ break;
default:
#ifdef ENABLE_STDIO
diff --git a/test/t/syntax.rb b/test/t/syntax.rb
index d21748de1..5ce4e0a63 100644
--- a/test/t/syntax.rb
+++ b/test/t/syntax.rb
@@ -213,6 +213,12 @@ assert('Splat and multiple assignment in for') do
assert_equal 7, f
end
+assert('Splat without assignment') do
+ * = [0]
+ a, * = [1, 2]
+ assert_equal 1, a
+end
+
assert('Return values of case statements') do
a = [] << case 1
when 3 then 2