diff --git a/py/runtime.c b/py/runtime.c index f12b3e612547d6654e19add33f13c9dd03db4bcf..d15a38e089eac4d422530b787c1bc15ecde4ca78 100644 --- a/py/runtime.c +++ b/py/runtime.c @@ -1016,6 +1016,17 @@ mp_obj_t rt_import_from(mp_obj_t module, qstr name) { return x; } +void rt_import_all(mp_obj_t module) { + DEBUG_printf("import all %p\n", module); + + mp_map_t *map = mp_obj_module_get_globals(module); + for (uint i = 0; i < map->alloc; i++) { + if (map->table[i].key != MP_OBJ_NULL) { + rt_store_name(MP_OBJ_QSTR_VALUE(map->table[i].key), map->table[i].value); + } + } +} + mp_map_t *rt_locals_get(void) { return map_locals; } diff --git a/py/runtime.h b/py/runtime.h index 20595c6a58ee19713d0b991a67fa08b7666dd373..f5a9f2abc7e2f7117eb9ea6ff882a24b4f9dff80 100644 --- a/py/runtime.h +++ b/py/runtime.h @@ -39,6 +39,7 @@ mp_obj_t rt_getiter(mp_obj_t o); mp_obj_t rt_iternext(mp_obj_t o); mp_obj_t rt_import_name(qstr name, mp_obj_t fromlist, mp_obj_t level); mp_obj_t rt_import_from(mp_obj_t module, qstr name); +void rt_import_all(mp_obj_t module); struct _mp_map_t; struct _mp_map_t *rt_locals_get(void); diff --git a/py/showbc.c b/py/showbc.c index 9dfbc887219d3e65f68b4b97cae82f6ddfb9174f..e3387dbe272dcdffd6b2634750bafedf68d9a7d0 100644 --- a/py/showbc.c +++ b/py/showbc.c @@ -390,6 +390,10 @@ void mp_byte_code_print(const byte *ip, int len) { printf("IMPORT_FROM %s", qstr_str(qstr)); break; + case MP_BC_IMPORT_STAR: + printf("IMPORT_STAR"); + break; + default: printf("code %p, byte code 0x%02x not implemented\n", ip, op); assert(0); diff --git a/py/vm.c b/py/vm.c index 1d47076dfb9a1b1725cbc09bd7b636dbe25644e6..10db35e25fde36fbae29d075526add74a48c4e00 100644 --- a/py/vm.c +++ b/py/vm.c @@ -595,6 +595,10 @@ unwind_return: PUSH(obj1); break; + case MP_BC_IMPORT_STAR: + rt_import_all(TOP()); + break; + default: printf("code %p, byte code 0x%02x not implemented\n", ip, op); assert(0); diff --git a/tests/basics/import2a.py b/tests/basics/import2a.py new file mode 100644 index 0000000000000000000000000000000000000000..ce32b10b1b956e5b27e73b1b34c2a2776c6f4d1a --- /dev/null +++ b/tests/basics/import2a.py @@ -0,0 +1,2 @@ +from import1b import var +print(var) diff --git a/tests/basics/import3a.py b/tests/basics/import3a.py new file mode 100644 index 0000000000000000000000000000000000000000..2e9d41f71dbdfabb08e12c1cf94ec8dc26db616b --- /dev/null +++ b/tests/basics/import3a.py @@ -0,0 +1,2 @@ +from import1b import * +print(var)