aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2019-11-06 12:41:55 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2019-11-06 12:44:50 +0900
commit82e840ad15bba42b399a21de746967a731240ec2 (patch)
treeb05d6e9dc6e04d1410b99903a4795c9735bf16f2
parentf72dc407f2f682063cf3d7683b879b430481b4ce (diff)
downloadruby-82e840ad15bba42b399a21de746967a731240ec2.tar.gz
Numbered parameter cannot appear outside block now [Bug #16293]
-rw-r--r--parse.y1
-rw-r--r--test/ruby/test_syntax.rb3
2 files changed, 3 insertions, 1 deletions
diff --git a/parse.y b/parse.y
index 665ca5f320..ac9146a718 100644
--- a/parse.y
+++ b/parse.y
@@ -8601,7 +8601,6 @@ parser_numbered_param(struct parser_params *p, int n)
if (n < 0) return false;
if (DVARS_TERMINAL_P(p->lvtbl->args) || DVARS_TERMINAL_P(p->lvtbl->args->prev)) {
- compile_error(p, "numbered parameter outside block");
return false;
}
if (p->max_numparam == ORDINAL_PARAM) {
diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb
index 5c2a9fc289..b55e579062 100644
--- a/test/ruby/test_syntax.rb
+++ b/test/ruby/test_syntax.rb
@@ -1457,6 +1457,9 @@ eom
assert_syntax_error('-> {-> {_1}; _2}', /numbered parameter is already used/)
assert_warn(/`_1' is used as numbered parameter/) {eval('proc {_1 = nil}')}
assert_warn(/`_2' is used as numbered parameter/) {eval('_2=1')}
+ assert_raise_with_message(NameError, /undefined local variable or method `_1'/) {
+ eval('_1')
+ }
['class C', 'class << C', 'module M', 'def m', 'def o.m'].each do |c|
assert_valid_syntax("->{#{c};->{_1};end;_1}\n")
assert_valid_syntax("->{_1;#{c};->{_1};end}\n")