summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNobuyoshi Nakada <[email protected]>2014-04-21 14:55:06 +0900
committerNobuyoshi Nakada <[email protected]>2014-04-21 14:55:06 +0900
commitac6747a9c52e22b5ceee81646083df68a33d3442 (patch)
treeb900230b5b32f146a5850e11657318509e5b9ae3
parent28f6cfe424895689ea70036ff7b135f8973ddc56 (diff)
downloadmruby-ac6747a9c52e22b5ceee81646083df68a33d3442.tar.gz
mruby-ac6747a9c52e22b5ceee81646083df68a33d3442.zip
fix optional block arguments in rhs
define optional block arguments as argument variables in the rhs default expressions, as same as mere assignment expressions. Import ruby/ruby@01740f0c273c89f7bcff3d5014d73c8ff6fb1986
-rw-r--r--src/parse.y5
-rw-r--r--test/t/syntax.rb4
2 files changed, 6 insertions, 3 deletions
diff --git a/src/parse.y b/src/parse.y
index a8bee8237..43c0c7321 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -3065,10 +3065,9 @@ f_opt : f_opt_asgn arg_value
}
;
-f_block_opt : tIDENTIFIER '=' primary_value
+f_block_opt : f_opt_asgn primary_value
{
- local_add_f(p, $1);
- $$ = cons(nsym($1), $3);
+ $$ = cons(nsym($1), $2);
}
;
diff --git a/test/t/syntax.rb b/test/t/syntax.rb
index 245c5c099..83243a99f 100644
--- a/test/t/syntax.rb
+++ b/test/t/syntax.rb
@@ -289,3 +289,7 @@ assert('optional argument in the rhs default expressions') do
assert_nil(o.t)
assert_equal("method called", o.t2)
end
+
+assert('optional block argument in the rhs default expressions') do
+ assert_nil(proc {|foo = foo| foo}.call)
+end