summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorPetr Viktorin <encukou@gmail.com>2020-01-14 16:47:20 +0100
committerDamien George <damien.p.george@gmail.com>2020-02-06 00:41:55 +1100
commite6c9800645ba70db6289f9d81b76320454a1938f (patch)
treeb364660a6fb52fdfd26fabb593d011ff6b19f876
parentd6a1e45caaca886b3fbd6adea0e83ed080a10144 (diff)
downloadmicropython-e6c9800645ba70db6289f9d81b76320454a1938f.tar.gz
micropython-e6c9800645ba70db6289f9d81b76320454a1938f.zip
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).
-rw-r--r--py/compile.c2
1 files changed, 2 insertions, 0 deletions
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);