Skip to content

Commit cdf58e8

Browse files
committed
Reset do_loop_stack around a body of a endless method definition
Fix #1772
1 parent add546d commit cdf58e8

File tree

3 files changed

+83
-42
lines changed

3 files changed

+83
-42
lines changed

src/prism.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14326,6 +14326,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power) {
1432614326
equal = parser->previous;
1432714327

1432814328
context_push(parser, PM_CONTEXT_DEF);
14329+
pm_do_loop_stack_push(parser, false);
1432914330
statements = (pm_node_t *) pm_statements_node_create(parser);
1433014331

1433114332
pm_node_t *statement = parse_expression(parser, PM_BINDING_POWER_DEFINED + 1, PM_ERR_DEF_ENDLESS);
@@ -14338,6 +14339,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power) {
1433814339
}
1433914340

1434014341
pm_statements_node_body_append((pm_statements_node_t *) statements, statement);
14342+
pm_do_loop_stack_pop(parser);
1434114343
context_pop(parser);
1434214344
end_keyword = not_provided(parser);
1434314345
} else {

test/prism/fixtures/while.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,5 @@ while class Foo a = tap do end; end; break; end
1717
while class << self; tap do end; end; break; end
1818

1919
while class << self; a = tap do end; end; break; end
20+
21+
while def foo = bar do end; end

test/prism/snapshots/while.txt

Lines changed: 79 additions & 42 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)