Skip to content

Commit 460575a

Browse files
committed
Add locals from slices
1 parent c67f65d commit 460575a

1 file changed

Lines changed: 14 additions & 7 deletions

File tree

src/prism.c

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7037,6 +7037,14 @@ pm_parser_local_add_location(pm_parser_t *parser, const uint8_t *start, const ui
70377037
return constant_id;
70387038
}
70397039

7040+
/**
7041+
* Add a local variable from a slice to the current scope.
7042+
*/
7043+
static pm_constant_id_t
7044+
pm_parser_local_add_slice(pm_parser_t *parser, pm_slice_t *slice, uint32_t reads) {
7045+
return pm_parser_local_add_location(parser, parser->start + slice->start, parser->start + slice->start + slice->length, reads);
7046+
}
7047+
70407048
/**
70417049
* Add a local variable from a token to the current scope.
70427050
*/
@@ -12671,7 +12679,7 @@ parse_target(pm_parser_t *parser, pm_node_t *target, bool multiple, bool splat_p
1267112679
.end = parser->start + call->message_loc.start + call->message_loc.length
1267212680
};
1267312681

12674-
pm_constant_id_t name = pm_parser_local_add_location(parser, message_loc.start, message_loc.end, 0);
12682+
pm_constant_id_t name = pm_parser_local_add_slice(parser, &call->message_loc, 0);
1267512683
pm_node_destroy(parser, target);
1267612684

1267712685
return (pm_node_t *) pm_local_variable_target_node_create(parser, &message_loc, name, 0);
@@ -12859,7 +12867,7 @@ parse_write(pm_parser_t *parser, pm_node_t *target, pm_token_t *operator, pm_nod
1285912867
.end = parser->start + call->message_loc.start + call->message_loc.length
1286012868
};
1286112869

12862-
pm_parser_local_add_location(parser, message.start, message.end, 0);
12870+
pm_parser_local_add_slice(parser, &call->message_loc, 0);
1286312871
pm_node_destroy(parser, target);
1286412872

1286512873
pm_constant_id_t constant_id = pm_parser_constant_id_location(parser, message.start, message.end);
@@ -20345,7 +20353,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
2034520353
// is parsed because it could be referenced in the value.
2034620354
pm_call_node_t *call_node = (pm_call_node_t *) node;
2034720355
if (PM_NODE_FLAG_P(call_node, PM_CALL_NODE_FLAGS_VARIABLE_CALL)) {
20348-
pm_parser_local_add_location(parser, parser->start + call_node->message_loc.start, parser->start + call_node->message_loc.start + call_node->message_loc.length, 0);
20356+
pm_parser_local_add_slice(parser, &call_node->message_loc, 0);
2034920357
}
2035020358
}
2035120359
PRISM_FALLTHROUGH
@@ -20485,7 +20493,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
2048520493
};
2048620494

2048720495
pm_refute_numbered_parameter(parser, message_loc.start, message_loc.end);
20488-
pm_constant_id_t constant_id = pm_parser_local_add_location(parser, message_loc.start, message_loc.end, 1);
20496+
pm_constant_id_t constant_id = pm_parser_local_add_slice(parser, &cast->message_loc, 1);
2048920497
parser_lex(parser);
2049020498

2049120499
pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ, (uint16_t) (depth + 1));
@@ -20622,7 +20630,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
2062220630
};
2062320631

2062420632
pm_refute_numbered_parameter(parser, message_loc.start, message_loc.end);
20625-
pm_constant_id_t constant_id = pm_parser_local_add_location(parser, message_loc.start, message_loc.end, 1);
20633+
pm_constant_id_t constant_id = pm_parser_local_add_slice(parser, &cast->message_loc, 1);
2062620634
parser_lex(parser);
2062720635

2062820636
pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ, (uint16_t) (depth + 1));
@@ -20770,8 +20778,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
2077020778
};
2077120779

2077220780
pm_refute_numbered_parameter(parser, message_loc.start, message_loc.end);
20773-
20774-
pm_constant_id_t constant_id = pm_parser_local_add_location(parser, message_loc.start, message_loc.end, 1);
20781+
pm_constant_id_t constant_id = pm_parser_local_add_slice(parser, &cast->message_loc, 1);
2077520782
pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1));
2077620783
pm_node_t *result = (pm_node_t *) pm_local_variable_operator_write_node_create(parser, (pm_node_t *) cast, &token, value, constant_id, 0);
2077720784

0 commit comments

Comments
 (0)