Skip to content
Snippets Groups Projects
Commit 25735ba6 authored by Damien George's avatar Damien George
Browse files

Merge pull request #282 from pfalcon/from-star

Implement "from mod import *"
parents 76f8cedb e7299b52
No related branches found
No related tags found
No related merge requests found
...@@ -1016,6 +1016,17 @@ mp_obj_t rt_import_from(mp_obj_t module, qstr name) { ...@@ -1016,6 +1016,17 @@ mp_obj_t rt_import_from(mp_obj_t module, qstr name) {
return x; 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) { mp_map_t *rt_locals_get(void) {
return map_locals; return map_locals;
} }
......
...@@ -39,6 +39,7 @@ mp_obj_t rt_getiter(mp_obj_t o); ...@@ -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_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_name(qstr name, mp_obj_t fromlist, mp_obj_t level);
mp_obj_t rt_import_from(mp_obj_t module, qstr name); 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;
struct _mp_map_t *rt_locals_get(void); struct _mp_map_t *rt_locals_get(void);
......
...@@ -390,6 +390,10 @@ void mp_byte_code_print(const byte *ip, int len) { ...@@ -390,6 +390,10 @@ void mp_byte_code_print(const byte *ip, int len) {
printf("IMPORT_FROM %s", qstr_str(qstr)); printf("IMPORT_FROM %s", qstr_str(qstr));
break; break;
case MP_BC_IMPORT_STAR:
printf("IMPORT_STAR");
break;
default: default:
printf("code %p, byte code 0x%02x not implemented\n", ip, op); printf("code %p, byte code 0x%02x not implemented\n", ip, op);
assert(0); assert(0);
......
...@@ -595,6 +595,10 @@ unwind_return: ...@@ -595,6 +595,10 @@ unwind_return:
PUSH(obj1); PUSH(obj1);
break; break;
case MP_BC_IMPORT_STAR:
rt_import_all(TOP());
break;
default: default:
printf("code %p, byte code 0x%02x not implemented\n", ip, op); printf("code %p, byte code 0x%02x not implemented\n", ip, op);
assert(0); assert(0);
......
from import1b import var
print(var)
from import1b import *
print(var)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment