diff options
| author | nagachika <nagachika@ruby-lang.org> | 2023-07-22 11:55:49 +0900 |
|---|---|---|
| committer | nagachika <nagachika@ruby-lang.org> | 2023-07-22 11:55:49 +0900 |
| commit | 465eb7418d7ed91f5f0c75da77765c7f5ef8354f (patch) | |
| tree | 78f125b4fd511e09687ffeec14b85efc1207391e | |
| parent | e65e0b99267c495186d7abb78c2725418761d756 (diff) | |
merge revision(s) 91c004885fc75a93cadf0094fa86ec3bd0ec25f5: [Backport #19025]
[Bug #19025] Numbered parameter names are always local variables
---
parse.y | 2 +-
test/ruby/test_syntax.rb | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
| -rw-r--r-- | parse.y | 6 | ||||
| -rw-r--r-- | test/ruby/test_syntax.rb | 2 | ||||
| -rw-r--r-- | version.h | 2 |
3 files changed, 6 insertions, 4 deletions
@@ -9775,9 +9775,9 @@ parse_ident(struct parser_params *p, int c, int cmd_state) ident = tokenize_ident(p, last_state); if (result == tCONSTANT && is_local_id(ident)) result = tIDENTIFIER; if (!IS_lex_state_for(last_state, EXPR_DOT|EXPR_FNAME) && - (result == tIDENTIFIER) && /* not EXPR_FNAME, not attrasgn */ - lvar_defined(p, ident)) { - SET_LEX_STATE(EXPR_END|EXPR_LABEL); + (result == tIDENTIFIER) && /* not EXPR_FNAME, not attrasgn */ + (lvar_defined(p, ident) || NUMPARAM_ID_P(ident))) { + SET_LEX_STATE(EXPR_END|EXPR_LABEL); } return result; } diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb index f9416f8fcb..dae7807ebc 100644 --- a/test/ruby/test_syntax.rb +++ b/test/ruby/test_syntax.rb @@ -1670,6 +1670,8 @@ eom assert_raise(NameError) {eval("_1")}, ] } + + assert_valid_syntax("p { [_1 **2] }") end def test_value_expr_in_condition @@ -11,7 +11,7 @@ # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR #define RUBY_VERSION_TEENY 2 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR -#define RUBY_PATCHLEVEL 95 +#define RUBY_PATCHLEVEL 96 #include "ruby/version.h" #include "ruby/internal/abi.h" |
