@@ -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