mp_load_name(): Optimize for outer scope where locals == globals.

This commit is contained in:
Paul Sokolovsky 2014-04-05 04:51:26 +03:00
parent e3f58c8380
commit a0d32991ed
1 changed files with 8 additions and 6 deletions

View File

@ -93,14 +93,16 @@ mp_obj_t mp_load_const_bytes(qstr qstr) {
mp_obj_t mp_load_name(qstr qstr) { mp_obj_t mp_load_name(qstr qstr) {
// logic: search locals, globals, builtins // logic: search locals, globals, builtins
DEBUG_OP_printf("load name %s\n", qstr_str(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); mp_map_elem_t *elem = mp_map_lookup(map_locals, MP_OBJ_NEW_QSTR(qstr), MP_MAP_LOOKUP);
if (elem != NULL) { if (elem != NULL) {
return elem->value; return elem->value;
} else {
return mp_load_global(qstr);
} }
} }
return mp_load_global(qstr);
}
mp_obj_t mp_load_global(qstr qstr) { mp_obj_t mp_load_global(qstr qstr) {
// logic: search globals, builtins // logic: search globals, builtins