Skip to content

Commit

Permalink
Merge pull request #1233 from ruby/more-flip-flop
Browse files Browse the repository at this point in the history
More flip flop flags
  • Loading branch information
kddnewton authored Aug 11, 2023
2 parents 309b57b + ba5977a commit 54cae4b
Show file tree
Hide file tree
Showing 6 changed files with 101 additions and 6 deletions.
13 changes: 13 additions & 0 deletions src/yarp.c
Original file line number Diff line number Diff line change
Expand Up @@ -447,6 +447,16 @@ yp_flip_flop(yp_node_t *node) {
yp_flip_flop(cast->right);
break;
}
case YP_NODE_PARENTHESES_NODE: {
yp_parentheses_node_t *cast = (yp_parentheses_node_t *) node;

if ((cast->statements != NULL) && YP_NODE_TYPE_P(cast->statements, YP_NODE_STATEMENTS_NODE)) {
yp_statements_node_t *statements = (yp_statements_node_t *) cast->statements;
if (statements->body.size == 1) yp_flip_flop(statements->body.nodes[0]);
}

break;
}
case YP_NODE_RANGE_NODE: {
yp_range_node_t *cast = (yp_range_node_t *) node;
cast->flags |= YP_RANGE_NODE_FLAGS_FLIP_FLOP;
Expand Down Expand Up @@ -11429,6 +11439,7 @@ parse_expression_prefix(yp_parser_t *parser, yp_binding_power_t binding_power) {
arguments.closing_loc = ((yp_location_t) { .start = parser->previous.start, .end = parser->previous.end });
} else {
receiver = parse_expression(parser, YP_BINDING_POWER_COMPOSITION, "Expected expression after `not`.");
yp_flip_flop(receiver);

if (!parser->recovering) {
accept(parser, YP_TOKEN_NEWLINE);
Expand All @@ -11438,6 +11449,7 @@ parse_expression_prefix(yp_parser_t *parser, yp_binding_power_t binding_power) {
}
} else {
receiver = parse_expression(parser, YP_BINDING_POWER_DEFINED, "Expected expression after `not`.");
yp_flip_flop(receiver);
}

return (yp_node_t *) yp_call_node_not_create(parser, receiver, &message, &arguments);
Expand Down Expand Up @@ -12015,6 +12027,7 @@ parse_expression_prefix(yp_parser_t *parser, yp_binding_power_t binding_power) {
yp_node_t *receiver = parse_expression(parser, yp_binding_powers[parser->previous.type].right, "Expected a receiver after unary !.");
yp_call_node_t *node = yp_call_node_unary_create(parser, &operator, receiver, "!");

yp_flip_flop(receiver);
return (yp_node_t *) node;
}
case YP_TOKEN_TILDE: {
Expand Down
4 changes: 4 additions & 0 deletions test/fixtures/not.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,7 @@ foo


)

not foo .. bar

not (foo .. bar)
82 changes: 80 additions & 2 deletions test/snapshots/not.txt

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions test/snapshots/unparser/corpus/literal/flipflop.txt

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion test/snapshots/whitequark/cond_eflipflop.txt

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion test/snapshots/whitequark/cond_iflipflop.txt

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 54cae4b

Please sign in to comment.