py/parse: Fix handling of empty input so it raises an exception.

This commit is contained in:
Damien George 2015-07-24 15:05:56 +00:00
parent fa7c61dfab
commit 96f0dd3cbc
3 changed files with 30 additions and 1 deletions

View File

@ -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))

View File

@ -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);

24
tests/basics/parser.py Normal file
View File

@ -0,0 +1,24 @@
# parser tests
# completely empty string
# uPy and CPy differ for this case
#try:
# compile("", "stdin", "single")
#except SyntaxError:
# print("SyntaxError")
try:
compile("", "stdin", "eval")
except SyntaxError:
print("SyntaxError")
compile("", "stdin", "exec")
# empty continued line
try:
compile("\\\n", "stdin", "single")
except SyntaxError:
print("SyntaxError")
try:
compile("\\\n", "stdin", "eval")
except SyntaxError:
print("SyntaxError")
compile("\\\n", "stdin", "exec")