@@ -17090,12 +17090,12 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
17090
17090
switch (keyword.type) {
17091
17091
case PM_TOKEN_KEYWORD_BREAK: {
17092
17092
pm_node_t *node = (pm_node_t *) pm_break_node_create(parser, &keyword, arguments.arguments);
17093
- parse_block_exit(parser, node, "break");
17093
+ if (!parser->parsing_eval) parse_block_exit(parser, node, "break");
17094
17094
return node;
17095
17095
}
17096
17096
case PM_TOKEN_KEYWORD_NEXT: {
17097
17097
pm_node_t *node = (pm_node_t *) pm_next_node_create(parser, &keyword, arguments.arguments);
17098
- parse_block_exit(parser, node, "next");
17098
+ if (!parser->parsing_eval) parse_block_exit(parser, node, "next");
17099
17099
return node;
17100
17100
}
17101
17101
case PM_TOKEN_KEYWORD_RETURN: {
@@ -17137,7 +17137,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
17137
17137
parse_arguments_list(parser, &arguments, false, accepts_command_call);
17138
17138
17139
17139
pm_node_t *node = (pm_node_t *) pm_yield_node_create(parser, &keyword, &arguments.opening_loc, arguments.arguments, &arguments.closing_loc);
17140
- parse_yield(parser, node);
17140
+ if (!parser->parsing_eval) parse_yield(parser, node);
17141
17141
17142
17142
return node;
17143
17143
}
@@ -17787,7 +17787,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
17787
17787
parser_lex(parser);
17788
17788
17789
17789
pm_node_t *node = (pm_node_t *) pm_redo_node_create(parser, &parser->previous);
17790
- parse_block_exit(parser, node, "redo");
17790
+ if (!parser->parsing_eval) parse_block_exit(parser, node, "redo");
17791
17791
17792
17792
return node;
17793
17793
}
@@ -19895,6 +19895,7 @@ pm_parser_init(pm_parser_t *parser, const uint8_t *source, size_t size, const pm
19895
19895
.start_line = 1,
19896
19896
.explicit_encoding = NULL,
19897
19897
.command_line = 0,
19898
+ .parsing_eval = false,
19898
19899
.command_start = true,
19899
19900
.recovering = false,
19900
19901
.encoding_changed = false,
@@ -19955,6 +19956,8 @@ pm_parser_init(pm_parser_t *parser, const uint8_t *source, size_t size, const pm
19955
19956
parser->version = options->version;
19956
19957
19957
19958
// scopes option
19959
+ parser->parsing_eval = options->scopes_count > 0;
19960
+
19958
19961
for (size_t scope_index = 0; scope_index < options->scopes_count; scope_index++) {
19959
19962
const pm_options_scope_t *scope = pm_options_scope_get(options, scope_index);
19960
19963
pm_parser_scope_push(parser, scope_index == 0);
0 commit comments