summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--py/runtime.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/py/runtime.c b/py/runtime.c
index a5f45a2fb4..238c3a56e2 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -93,13 +93,15 @@ mp_obj_t mp_load_const_bytes(qstr qstr) {
mp_obj_t mp_load_name(qstr qstr) {
// logic: search locals, globals, builtins
- DEBUG_OP_printf("load name %s\n", qstr_str(qstr));
- mp_map_elem_t *elem = mp_map_lookup(map_locals, MP_OBJ_NEW_QSTR(qstr), MP_MAP_LOOKUP);
- if (elem != NULL) {
- return elem->value;
- } else {
- return mp_load_global(qstr);
+ DEBUG_OP_printf("load name %s\n", map_locals, qstr_str(qstr));
+ // If we're at the outer scope (locals == globals), dispatch to load_global right away
+ if (map_locals != map_globals) {
+ mp_map_elem_t *elem = mp_map_lookup(map_locals, MP_OBJ_NEW_QSTR(qstr), MP_MAP_LOOKUP);
+ if (elem != NULL) {
+ return elem->value;
+ }
}
+ return mp_load_global(qstr);
}
mp_obj_t mp_load_global(qstr qstr) {