Skip to content

Commit 968ee09

Browse files
Validate AliasGlobalVariableNode
1 parent e101376 commit 968ee09

3 files changed

Lines changed: 6 additions & 4 deletions

File tree

config.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -811,8 +811,7 @@ nodes:
811811
- GlobalVariableReadNode
812812
- BackReferenceReadNode
813813
- NumberedReferenceReadNode
814-
- on error: SymbolNode # alias $a b
815-
- on error: ErrorRecoveryNode # alias $a 42
814+
- on error: ErrorRecoveryNode
816815
comment: |
817816
Represents the old name of the global variable that can be used before aliasing.
818817

src/prism.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1975,7 +1975,7 @@ pm_missing_node_create(pm_parser_t *parser, const uint8_t *start, const uint8_t
19751975
/**
19761976
* Allocate a new ErrorRecoveryNode node that wraps an unexpected child node.
19771977
*/
1978-
PRISM_ATTRIBUTE_UNUSED static pm_error_recovery_node_t *
1978+
static pm_error_recovery_node_t *
19791979
pm_unexpected_node_create(pm_parser_t *parser, pm_node_t *child) {
19801980
pm_error_recovery_node_t *node = PM_NODE_ALLOC(parser, pm_error_recovery_node_t);
19811981

@@ -18210,6 +18210,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
1821018210
pm_parser_err_node(parser, old_name, PM_ERR_ALIAS_ARGUMENT);
1821118211
}
1821218212

18213+
PM_VALIDATE_NODE_TYPE(parser, old_name, PM_BACK_REFERENCE_READ_NODE, PM_NUMBERED_REFERENCE_READ_NODE, PM_GLOBAL_VARIABLE_READ_NODE);
1821318214
return UP(pm_alias_global_variable_node_create(parser, &keyword, new_name, old_name));
1821418215
}
1821518216
case PM_SYMBOL_NODE:

test/prism/result/error_recovery_test.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ def test_alias_global_variable_node_old_name_symbol
99
refute result.success?
1010

1111
node = result.value.statements.body.first
12-
assert_kind_of SymbolNode, node.old_name
12+
assert_kind_of ErrorRecoveryNode, node.old_name
13+
assert_kind_of SymbolNode, node.old_name.child
1314
end
1415

1516
def test_alias_global_variable_node_old_name_missing
@@ -18,6 +19,7 @@ def test_alias_global_variable_node_old_name_missing
1819

1920
node = result.value.statements.body.first
2021
assert_kind_of ErrorRecoveryNode, node.old_name
22+
assert_nil node.old_name.child
2123
end
2224

2325
def test_alias_method_node_old_name_global_variable

0 commit comments

Comments
 (0)