summaryrefslogtreecommitdiffstatshomepage
path: root/py
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-04-05 04:51:26 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-04-05 05:10:12 +0300
commita0d32991ed57ebbbb8c9207dab3223b12ca4aa44 (patch)
tree21197e7430836f4e665546f35de19d5a5474eca7 /py
parente3f58c838022fcdbb39b9a28274b72bc0f69d1ea (diff)
downloadmicropython-a0d32991ed57ebbbb8c9207dab3223b12ca4aa44.tar.gz
micropython-a0d32991ed57ebbbb8c9207dab3223b12ca4aa44.zip
mp_load_name(): Optimize for outer scope where locals == globals.
Diffstat (limited to 'py')
-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) {