From e6c9800645ba70db6289f9d81b76320454a1938f Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Tue, 14 Jan 2020 16:47:20 +0100 Subject: [PATCH] py/compile: Allow 'return' outside function in minimal builds. A 'return' statement on module/class level is not correct Python, but nothing terribly bad happens when it's allowed. So remove the check unless MICROPY_CPYTHON_COMPAT is on. This is similar to MicroPython's treatment of 'import *' in functions (except 'return' has unsurprising behavior if it's allowed). --- py/compile.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/py/compile.c b/py/compile.c index 0d36aef8b3..885e318a1e 100644 --- a/py/compile.c +++ b/py/compile.c @@ -1041,10 +1041,12 @@ STATIC void compile_break_cont_stmt(compiler_t *comp, mp_parse_node_struct_t *pn } STATIC void compile_return_stmt(compiler_t *comp, mp_parse_node_struct_t *pns) { + #if MICROPY_CPYTHON_COMPAT if (comp->scope_cur->kind != SCOPE_FUNCTION) { compile_syntax_error(comp, (mp_parse_node_t)pns, "'return' outside function"); return; } + #endif if (MP_PARSE_NODE_IS_NULL(pns->nodes[0])) { // no argument to 'return', so return None EMIT_ARG(load_const_tok, MP_TOKEN_KW_NONE);