py/parse: Fix handling of empty input so it raises an exception.
This commit is contained in:
parent
fa7c61dfab
commit
96f0dd3cbc
@ -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))
|
||||
|
@ -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
24
tests/basics/parser.py
Normal 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")
|
Loading…
Reference in New Issue
Block a user