summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
Diffstat (limited to 'py')
-rw-r--r--py/builtinimport.c11
-rw-r--r--py/modarray.c2
-rw-r--r--py/modcollections.c2
-rw-r--r--py/moderrno.c2
-rw-r--r--py/modio.c2
-rw-r--r--py/modstruct.c2
-rw-r--r--py/modsys.c3
7 files changed, 15 insertions, 9 deletions
diff --git a/py/builtinimport.c b/py/builtinimport.c
index 15521c77c..8a125fc53 100644
--- a/py/builtinimport.c
+++ b/py/builtinimport.c
@@ -380,20 +380,23 @@ STATIC mp_obj_t process_import_at_level(qstr full_mod_name, qstr level_mod_name,
mp_obj_t module_obj;
if (outer_module_obj == MP_OBJ_NULL) {
+ // First module in the dotted-name path.
DEBUG_printf("Searching for top-level module\n");
// An import of a non-extensible built-in will always bypass the
- // filesystem. e.g. `import micropython` or `import pyb`.
+ // filesystem. e.g. `import micropython` or `import pyb`. So try and
+ // match a non-extensible built-ins first.
module_obj = mp_module_get_builtin(level_mod_name, false);
if (module_obj != MP_OBJ_NULL) {
return module_obj;
}
- // First module in the dotted-name; search for a directory or file
- // relative to all the locations in sys.path.
+ // Next try the filesystem. Search for a directory or file relative to
+ // all the locations in sys.path.
stat = stat_top_level(level_mod_name, &path);
- // TODO: If stat failed, now try extensible built-in modules.
+ // If filesystem failed, now try and see if it matches an extensible
+ // built-in module.
if (stat == MP_IMPORT_STAT_NO_EXIST) {
module_obj = mp_module_get_builtin(level_mod_name, true);
if (module_obj != MP_OBJ_NULL) {
diff --git a/py/modarray.c b/py/modarray.c
index cfed0fbb5..ac2e56ed3 100644
--- a/py/modarray.c
+++ b/py/modarray.c
@@ -40,6 +40,6 @@ const mp_obj_module_t mp_module_array = {
.globals = (mp_obj_dict_t *)&mp_module_array_globals,
};
-MP_REGISTER_MODULE(MP_QSTR_array, mp_module_array);
+MP_REGISTER_EXTENSIBLE_MODULE(MP_QSTR_array, mp_module_array);
#endif
diff --git a/py/modcollections.c b/py/modcollections.c
index a56fe069e..30a5881bc 100644
--- a/py/modcollections.c
+++ b/py/modcollections.c
@@ -46,6 +46,6 @@ const mp_obj_module_t mp_module_collections = {
.globals = (mp_obj_dict_t *)&mp_module_collections_globals,
};
-MP_REGISTER_MODULE(MP_QSTR_collections, mp_module_collections);
+MP_REGISTER_EXTENSIBLE_MODULE(MP_QSTR_collections, mp_module_collections);
#endif // MICROPY_PY_COLLECTIONS
diff --git a/py/moderrno.c b/py/moderrno.c
index 99ca101bd..4f0673a23 100644
--- a/py/moderrno.c
+++ b/py/moderrno.c
@@ -99,7 +99,7 @@ const mp_obj_module_t mp_module_errno = {
.globals = (mp_obj_dict_t *)&mp_module_errno_globals,
};
-MP_REGISTER_MODULE(MP_QSTR_errno, mp_module_errno);
+MP_REGISTER_EXTENSIBLE_MODULE(MP_QSTR_errno, mp_module_errno);
qstr mp_errno_to_str(mp_obj_t errno_val) {
#if MICROPY_PY_ERRNO_ERRORCODE
diff --git a/py/modio.c b/py/modio.c
index 3462611d7..39317c52d 100644
--- a/py/modio.c
+++ b/py/modio.c
@@ -226,6 +226,6 @@ const mp_obj_module_t mp_module_io = {
.globals = (mp_obj_dict_t *)&mp_module_io_globals,
};
-MP_REGISTER_MODULE(MP_QSTR_io, mp_module_io);
+MP_REGISTER_EXTENSIBLE_MODULE(MP_QSTR_io, mp_module_io);
#endif
diff --git a/py/modstruct.c b/py/modstruct.c
index e908c73e1..42f91b282 100644
--- a/py/modstruct.c
+++ b/py/modstruct.c
@@ -266,6 +266,6 @@ const mp_obj_module_t mp_module_struct = {
.globals = (mp_obj_dict_t *)&mp_module_struct_globals,
};
-MP_REGISTER_MODULE(MP_QSTR_struct, mp_module_struct);
+MP_REGISTER_EXTENSIBLE_MODULE(MP_QSTR_struct, mp_module_struct);
#endif
diff --git a/py/modsys.c b/py/modsys.c
index 1cfc09ecf..ddc732e00 100644
--- a/py/modsys.c
+++ b/py/modsys.c
@@ -294,6 +294,9 @@ const mp_obj_module_t mp_module_sys = {
.globals = (mp_obj_dict_t *)&mp_module_sys_globals,
};
+// Unlike the other CPython-compatible modules, sys is not extensible from the
+// filesystem. We rely on it to work so that things like sys.path are always
+// available.
MP_REGISTER_MODULE(MP_QSTR_sys, mp_module_sys);
// If MICROPY_PY_SYS_PATH_ARGV_DEFAULTS is not enabled then these two lists