diff options
| author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-03-29 18:42:46 +0900 |
|---|---|---|
| committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-09-07 13:41:13 +0900 |
| commit | bd046764e31267c83e7ae515d9bc7f09ffaa5b95 (patch) | |
| tree | f61fbddabeacd88d89de119629fd22c48c24dde4 | |
| parent | 05aaff2191cbe777d1efb915ab9652eeaa1c16b8 (diff) | |
[Bug #19549] Check for variables to be interpolated
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/7615
| -rw-r--r-- | parse.y | 18 | ||||
| -rw-r--r-- | test/ruby/test_parse.rb | 5 |
2 files changed, 7 insertions, 16 deletions
@@ -5432,24 +5432,10 @@ string_dend : tSTRING_DEND | END_OF_INPUT ; -string_dvar : tGVAR +string_dvar : nonlocal_var { /*%%%*/ - $$ = NEW_GVAR($1, &@$); - /*% %*/ - /*% ripper: var_ref!($1) %*/ - } - | tIVAR - { - /*%%%*/ - $$ = NEW_IVAR($1, &@$); - /*% %*/ - /*% ripper: var_ref!($1) %*/ - } - | tCVAR - { - /*%%%*/ - $$ = NEW_CVAR($1, &@$); + if (!($$ = gettable(p, $1, &@$))) $$ = NEW_BEGIN(0, &@$); /*% %*/ /*% ripper: var_ref!($1) %*/ } diff --git a/test/ruby/test_parse.rb b/test/ruby/test_parse.rb index cf989d190b..957a37eb81 100644 --- a/test/ruby/test_parse.rb +++ b/test/ruby/test_parse.rb @@ -1443,6 +1443,11 @@ x = __ENCODING__ assert_equal(expected, obj.arg) end + def test_ungettable_gvar + assert_syntax_error('$01234', /not valid to get/) + assert_syntax_error('"#$01234"', /not valid to get/) + end + =begin def test_past_scope_variable assert_warning(/past scope/) {catch {|tag| eval("BEGIN{throw tag}; tap {a = 1}; a")}} |
