From 049bbd72e33ef42852968b1ff01b2421cc14c25d Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 29 Oct 2014 15:01:49 +0000 Subject: [PATCH] parse.y: reset current_arg after block var * parse.y (block_param_def): reset current_arg after block parameter definition, not to warn references in that block body. [ruby-core:65990] [Bug #10314] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48190 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- parse.y | 2 ++ test/ruby/test_syntax.rb | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/parse.y b/parse.y index da91b53a02..6d04f4175e 100644 --- a/parse.y +++ b/parse.y @@ -3409,6 +3409,7 @@ opt_block_param : none block_param_def : '|' opt_bv_decl '|' { + current_arg = 0; /*%%%*/ $$ = 0; /*% @@ -3427,6 +3428,7 @@ block_param_def : '|' opt_bv_decl '|' } | '|' block_param opt_bv_decl '|' { + current_arg = 0; /*%%%*/ $$ = $2; /*% diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb index 55af33fe48..e70470555c 100644 --- a/test/ruby/test_syntax.rb +++ b/test/ruby/test_syntax.rb @@ -171,6 +171,11 @@ class TestSyntax < Test::Unit::TestCase assert_warn("") do o.instance_eval("def foo(var: def bar(var) var; end) var end") end + + o = Object.new + assert_warn("") do + o.instance_eval("proc {|var: 1| var}") + end end def test_optional_self_reference @@ -207,6 +212,11 @@ class TestSyntax < Test::Unit::TestCase assert_warn("") do o.instance_eval("def foo(var = def bar(var) var; end) var end") end + + o = Object.new + assert_warn("") do + o.instance_eval("proc {|var = 1| var}") + end end def test_warn_grouped_expression