[Bug #20219] gettable returns NULL on error

This commit is contained in:
Nobuyoshi Nakada 2024-01-28 17:59:13 +09:00
parent 5f733a1ae7
commit 23b8337cd1
No known key found for this signature in database
GPG Key ID: 3582D74E1FEE4465
2 changed files with 6 additions and 1 deletions

View File

@ -5879,7 +5879,10 @@ p_var_ref : '^' tIDENTIFIER
{
/*%%%*/
NODE *n = gettable(p, $2, &@$);
if (!(nd_type_p(n, NODE_LVAR) || nd_type_p(n, NODE_DVAR))) {
if (!n) {
n = NEW_ERROR(&@$);
}
else if (!(nd_type_p(n, NODE_LVAR) || nd_type_p(n, NODE_DVAR))) {
compile_error(p, "%"PRIsVALUE": no such local variable", rb_id2str($2));
}
$$ = n;

View File

@ -381,6 +381,7 @@ class TestSyntax < Test::Unit::TestCase
assert_syntax_error("def foo(var: var) var end", message)
assert_syntax_error("def foo(var: bar(var)) var end", message)
assert_syntax_error("def foo(var: bar {var}) var end", message)
assert_syntax_error("def foo(var: (1 in ^var)); end", message)
o = Object.new
assert_warn("") do
@ -446,6 +447,7 @@ class TestSyntax < Test::Unit::TestCase
assert_syntax_error("def foo(var = bar {var}) var end", message)
assert_syntax_error("def foo(var = (def bar;end; var)) var end", message)
assert_syntax_error("def foo(var = (def self.bar;end; var)) var end", message)
assert_syntax_error("def foo(var = (1 in ^var)); end", message)
o = Object.new
assert_warn("") do