summaryrefslogtreecommitdiffstatshomepage
path: root/py
diff options
context:
space:
mode:
Diffstat (limited to 'py')
-rw-r--r--py/mpconfig.h4
-rw-r--r--py/runtime.c14
-rw-r--r--py/runtime.h1
-rw-r--r--py/showbc.c4
-rw-r--r--py/vm.c4
5 files changed, 27 insertions, 0 deletions
diff --git a/py/mpconfig.h b/py/mpconfig.h
index 1eb2acf538..6ff0692915 100644
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -107,6 +107,10 @@ typedef long long mp_longint_impl_t;
#define MICROPY_PATH_MAX (512)
#endif
+// Additional builtin function definitions - see runtime.c:builtin_table for format.
+#ifndef MICROPY_EXTRA_BUILTINS
+#define MICROPY_EXTRA_BUILTINS
+#endif
/*****************************************************************************/
/* Miscellaneous settings */
diff --git a/py/runtime.c b/py/runtime.c
index f12b3e6125..b473a951f3 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -144,6 +144,9 @@ STATIC const mp_builtin_elem_t builtin_table[] = {
{ MP_QSTR_str, (mp_obj_t)&mp_builtin_str_obj },
{ MP_QSTR_bytearray, (mp_obj_t)&mp_builtin_bytearray_obj },
+ // Extra builtins as defined by a port
+ MICROPY_EXTRA_BUILTINS
+
{ MP_QSTR_, MP_OBJ_NULL }, // end of list sentinel
};
@@ -1016,6 +1019,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 20595c6a58..f5a9f2abc7 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 9dfbc88721..e3387dbe27 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 1d47076dfb..1fc5b4a57a 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(POP());
+ break;
+
default:
printf("code %p, byte code 0x%02x not implemented\n", ip, op);
assert(0);