Skip to content

Commit 24a2872

Browse files
committed
Fix => ^it
1 parent 313be8e commit 24a2872

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

src/prism.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13607,8 +13607,13 @@ parse_pattern_primitive(pm_parser_t *parser, pm_diagnostic_id_t diag_id) {
1360713607
parser_lex(parser);
1360813608
pm_node_t *variable = (pm_node_t *) parse_variable(parser);
1360913609
if (variable == NULL) {
13610-
PM_PARSER_ERR_TOKEN_FORMAT(parser, parser->previous, PM_ERR_NO_LOCAL_VARIABLE, (int) (parser->previous.end - parser->previous.start), parser->previous.start);
13611-
variable = (pm_node_t *) pm_local_variable_read_node_create(parser, &parser->previous, 0);
13610+
if (pm_token_is_it(parser->previous.start, parser->previous.end)) {
13611+
pm_constant_id_t name_id = pm_parser_constant_id_constant(parser, "0it", 3);
13612+
variable = (pm_node_t *) pm_local_variable_read_node_create_constant_id(parser, &parser->previous, name_id, 0);
13613+
} else {
13614+
PM_PARSER_ERR_TOKEN_FORMAT(parser, parser->previous, PM_ERR_NO_LOCAL_VARIABLE, (int) (parser->previous.end - parser->previous.start), parser->previous.start);
13615+
variable = (pm_node_t *) pm_local_variable_read_node_create(parser, &parser->previous, 0);
13616+
}
1361213617
}
1361313618

1361413619
return (pm_node_t *) pm_pinned_variable_node_create(parser, &operator, variable);

test/prism/location_test.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,9 @@ def test_PinnedExpressionNode
680680

681681
def test_PinnedVariableNode
682682
assert_location(PinnedVariableNode, "bar = 1; foo in ^bar", 16...20, &:pattern)
683+
assert_location(PinnedVariableNode, "proc { 1 in ^it }.call(1)", 12...15) do |node|
684+
node.receiver.block.body.body.first.pattern
685+
end
683686
end
684687

685688
def test_PostExecutionNode

0 commit comments

Comments
 (0)