Skip to content

Commit 6b4f0ad

Browse files
committed
Dynamic constant writes on operator writes
1 parent 2c2a463 commit 6b4f0ad

2 files changed

Lines changed: 21 additions & 0 deletions

File tree

src/prism.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21343,6 +21343,10 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
2134321343
pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, flags, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ, (uint16_t) (depth + 1));
2134421344
pm_node_t *write = UP(pm_constant_and_write_node_create(parser, (pm_constant_read_node_t *) node, &token, value));
2134521345

21346+
if (context_def_p(parser)) {
21347+
pm_parser_err_node(parser, write, PM_ERR_WRITE_TARGET_IN_METHOD);
21348+
}
21349+
2134621350
return parse_shareable_constant_write(parser, write);
2134721351
}
2134821352
case PM_INSTANCE_VARIABLE_READ_NODE: {
@@ -21468,6 +21472,10 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
2146821472
pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, flags, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ, (uint16_t) (depth + 1));
2146921473
pm_node_t *write = UP(pm_constant_or_write_node_create(parser, (pm_constant_read_node_t *) node, &token, value));
2147021474

21475+
if (context_def_p(parser)) {
21476+
pm_parser_err_node(parser, write, PM_ERR_WRITE_TARGET_IN_METHOD);
21477+
}
21478+
2147121479
return parse_shareable_constant_write(parser, write);
2147221480
}
2147321481
case PM_INSTANCE_VARIABLE_READ_NODE: {
@@ -21603,6 +21611,10 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t
2160321611
pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, flags, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1));
2160421612
pm_node_t *write = UP(pm_constant_operator_write_node_create(parser, (pm_constant_read_node_t *) node, &token, value));
2160521613

21614+
if (context_def_p(parser)) {
21615+
pm_parser_err_node(parser, write, PM_ERR_WRITE_TARGET_IN_METHOD);
21616+
}
21617+
2160621618
return parse_shareable_constant_write(parser, write);
2160721619
}
2160821620
case PM_INSTANCE_VARIABLE_READ_NODE: {
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
def foo();A+=1;end
2+
^~~~ dynamic constant assignment
3+
4+
def bar();B||=1;end
5+
^~~~~ dynamic constant assignment
6+
7+
def baz();C&&=1;end
8+
^~~~~ dynamic constant assignment
9+

0 commit comments

Comments
 (0)