diff options
Diffstat (limited to 'py')
| -rw-r--r-- | py/grammar.h | 2 | ||||
| -rw-r--r-- | py/parse.c | 5 |
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); |
