diff options
| author | Scott Shawcroft <scott@adafruit.com> | 2020-07-02 13:56:09 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-02 13:56:09 -0700 |
| commit | c33542f978cc61f0466ff60ea769e3067baca95f (patch) | |
| tree | 071e8f8a86971f7e947053c3b4fb2ff7da95d223 /py/objmodule.c | |
| parent | f572b723060382bbc9ca7a3edc88cb7c30fdcc30 (diff) | |
| parent | eec42d4cb53536a75e88f7f9321515bc6dcfeaa7 (diff) | |
Merge branch 'main' into patch-1
Diffstat (limited to 'py/objmodule.c')
| -rw-r--r-- | py/objmodule.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/py/objmodule.c b/py/objmodule.c index 627ba79e8..b6a8a084e 100644 --- a/py/objmodule.c +++ b/py/objmodule.c @@ -69,6 +69,13 @@ STATIC void module_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) { // delete/store attribute mp_obj_dict_t *dict = self->globals; if (dict->map.is_fixed) { + mp_map_elem_t *elem = mp_map_lookup(&dict->map, MP_OBJ_NEW_QSTR(attr), MP_MAP_LOOKUP); + // Return success if the given value is already in the dictionary. This is the case for + // native packages with native submodules. + if (elem != NULL && elem->value == dest[1]) { + dest[0] = MP_OBJ_NULL; // indicate success + return; + } else #if MICROPY_CAN_OVERRIDE_BUILTINS if (dict == &mp_module_builtins_globals) { if (MP_STATE_VM(mp_module_builtins_override_dict) == NULL) { @@ -206,6 +213,14 @@ STATIC const mp_rom_map_elem_t mp_builtin_module_table[] = { { MP_ROM_QSTR(MP_QSTR_ujson), MP_ROM_PTR(&mp_module_ujson) }, #endif #endif +#if CIRCUITPY_ULAB +#if CIRCUITPY +// CircuitPython: Defined in MICROPY_PORT_BUILTIN_MODULES, so not defined here. +// TODO: move to shared-bindings/ +#else + { MP_ROM_QSTR(MP_QSTR_ulab), MP_ROM_PTR(&ulab_user_cmodule) }, +#endif +#endif #if MICROPY_PY_URE #if CIRCUITPY // CircuitPython: Defined in MICROPY_PORT_BUILTIN_MODULES, so not defined here. |
