diff options
| author | Kevin Newton <kddnewton@gmail.com> | 2023-08-18 20:41:01 -0400 |
|---|---|---|
| committer | Jemma Issroff <jemmaissroff@gmail.com> | 2023-08-21 10:43:18 -0700 |
| commit | a7f40fc2d77e8317edaf3bbaa8835c2cafd29802 (patch) | |
| tree | 628d2de35347d390b92793cfcdf4bd696dc5aab1 /yarp | |
| parent | 988b0108fbc0caac2758e410edb8b5fcf6a62aad (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.c | 37 |
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); |
