summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
Diffstat (limited to 'py')
-rw-r--r--py/grammar.h2
-rw-r--r--py/parse.c5
2 files changed, 6 insertions, 1 deletions
diff --git a/py/grammar.h b/py/grammar.h
index be12b7eb5..3f6668808 100644
--- a/py/grammar.h
+++ b/py/grammar.h
@@ -38,7 +38,7 @@
// eval_input: testlist NEWLINE* ENDMARKER
DEF_RULE(single_input, nc, or(3), tok(NEWLINE), rule(simple_stmt), rule(compound_stmt))
-DEF_RULE(file_input, nc, and(1), opt_rule(file_input_2))
+DEF_RULE(file_input, c(generic_all_nodes), and(1), opt_rule(file_input_2))
DEF_RULE(file_input_2, c(generic_all_nodes), one_or_more, rule(file_input_3))
DEF_RULE(file_input_3, nc, or(2), tok(NEWLINE), rule(stmt))
DEF_RULE(eval_input, nc, and(2), rule(testlist), opt_rule(eval_input_2))
diff --git a/py/parse.c b/py/parse.c
index ad13a9030..b20fdaacd 100644
--- a/py/parse.c
+++ b/py/parse.c
@@ -720,6 +720,11 @@ memory_error:
goto syntax_error;
}
+ // check that parsing resulted in a parse node (can fail on empty input)
+ if (parser.result_stack_top == 0) {
+ goto syntax_error;
+ }
+
//result_stack_show(parser);
//printf("rule stack alloc: %d\n", parser.rule_stack_alloc);
//printf("result stack alloc: %d\n", parser.result_stack_alloc);