summaryrefslogtreecommitdiff
path: root/yarp
diff options
context:
space:
mode:
authorKevin Newton <kddnewton@gmail.com>2023-08-18 20:41:01 -0400
committerJemma Issroff <jemmaissroff@gmail.com>2023-08-21 10:43:18 -0700
commita7f40fc2d77e8317edaf3bbaa8835c2cafd29802 (patch)
tree628d2de35347d390b92793cfcdf4bd696dc5aab1 /yarp
parent988b0108fbc0caac2758e410edb8b5fcf6a62aad (diff)
[ruby/yarp] Change AndWriteNode, OrWriteNode, OperatorWriteNode to contain write nodes
It makes it more difficult to find all locations where a variable is written to if they're just read nodes. To keep things consistent we should make them write nodes. https://github.com/ruby/yarp/commit/840e094045
Diffstat (limited to 'yarp')
-rw-r--r--yarp/yarp.c37
1 files changed, 25 insertions, 12 deletions
diff --git a/yarp/yarp.c b/yarp/yarp.c
index a4e7697876..407c71a5dc 100644
--- a/yarp/yarp.c
+++ b/yarp/yarp.c
@@ -12261,6 +12261,10 @@ parse_expression_infix(yp_parser_t *parser, yp_node_t *node, yp_binding_power_t
case YP_NODE_INSTANCE_VARIABLE_READ_NODE:
case YP_NODE_LOCAL_VARIABLE_READ_NODE: {
parser_lex(parser);
+
+ yp_token_t operator = not_provided(parser);
+ node = parse_target(parser, node, &operator, NULL);
+
yp_node_t *value = parse_expression(parser, binding_power, "Expected a value after &&=");
return (yp_node_t *) yp_and_write_node_create(parser, node, &token, value);
}
@@ -12279,11 +12283,12 @@ parse_expression_infix(yp_parser_t *parser, yp_node_t *node, yp_binding_power_t
}
parser_lex(parser);
- yp_node_t *target = (yp_node_t *) yp_local_variable_read_node_create(parser, &(yp_token_t) { .type = YP_TOKEN_IDENTIFIER, .start = message_loc.start, .end = message_loc.end }, 0);
- yp_node_t *value = parse_expression(parser, binding_power, "Expected a value after &&=");
- yp_node_destroy(parser, node);
- return (yp_node_t *) yp_and_write_node_create(parser, target, &token, value);
+ yp_token_t operator = not_provided(parser);
+ node = parse_target(parser, node, &operator, NULL);
+
+ yp_node_t *value = parse_expression(parser, binding_power, "Expected a value after &&=");
+ return (yp_node_t *) yp_and_write_node_create(parser, node, &token, value);
}
parser_lex(parser);
@@ -12323,6 +12328,9 @@ parse_expression_infix(yp_parser_t *parser, yp_node_t *node, yp_binding_power_t
case YP_NODE_LOCAL_VARIABLE_READ_NODE: {
parser_lex(parser);
+ yp_token_t operator = not_provided(parser);
+ node = parse_target(parser, node, &operator, NULL);
+
yp_node_t *value = parse_expression(parser, binding_power, "Expected a value after ||=");
return (yp_node_t *) yp_or_write_node_create(parser, node, &token, value);
}
@@ -12341,11 +12349,12 @@ parse_expression_infix(yp_parser_t *parser, yp_node_t *node, yp_binding_power_t
}
parser_lex(parser);
- yp_node_t *target = (yp_node_t *) yp_local_variable_read_node_create(parser, &(yp_token_t) { .type = YP_TOKEN_IDENTIFIER, .start = message_loc.start, .end = message_loc.end }, 0);
- yp_node_t *value = parse_expression(parser, binding_power, "Expected a value after ||=");
- yp_node_destroy(parser, node);
- return (yp_node_t *) yp_or_write_node_create(parser, target, &token, value);
+ yp_token_t operator = not_provided(parser);
+ node = parse_target(parser, node, &operator, NULL);
+
+ yp_node_t *value = parse_expression(parser, binding_power, "Expected a value after ||=");
+ return (yp_node_t *) yp_or_write_node_create(parser, node, &token, value);
}
parser_lex(parser);
@@ -12395,6 +12404,9 @@ parse_expression_infix(yp_parser_t *parser, yp_node_t *node, yp_binding_power_t
case YP_NODE_LOCAL_VARIABLE_READ_NODE: {
parser_lex(parser);
+ yp_token_t operator = not_provided(parser);
+ node = parse_target(parser, node, &operator, NULL);
+
yp_node_t *value = parse_expression(parser, binding_power, "Expected a value after the operator");
return (yp_node_t *) yp_operator_write_node_create(parser, node, &token, value);
}
@@ -12413,11 +12425,12 @@ parse_expression_infix(yp_parser_t *parser, yp_node_t *node, yp_binding_power_t
}
parser_lex(parser);
- yp_node_t *target = (yp_node_t *) yp_local_variable_read_node_create(parser, &(yp_token_t) { .type = YP_TOKEN_IDENTIFIER, .start = message_loc.start, .end = message_loc.end }, 0);
- yp_node_t *value = parse_expression(parser, binding_power, "Expected a value after &&=");
- yp_node_destroy(parser, node);
- return (yp_node_t *) yp_operator_write_node_create(parser, target, &token, value);
+ yp_token_t operator = not_provided(parser);
+ node = parse_target(parser, node, &operator, NULL);
+
+ yp_node_t *value = parse_expression(parser, binding_power, "Expected a value after &&=");
+ return (yp_node_t *) yp_operator_write_node_create(parser, node, &token, value);
}
yp_token_t operator = not_provided(parser);