py/builtinimport: Allow overriding of mp_builtin___import__.
This allows ports to override mp_builtin___import__. This can be useful in MicroPython applications where MICROPY_ENABLE_EXTERNAL_IMPORT has to be disabled due to its impact on build size (2% to 2.5% of the minimal port). By overriding the otherwise very minimal mp_builtin___import__, ports can still allow limited forms of application-specific imports. Signed-off-by: Laurens Valk <laurens@pybricks.com>
This commit is contained in:
parent
3d65101a8a
commit
d8ad87843a
@ -64,7 +64,13 @@ MP_DECLARE_CONST_FUN_OBJ_KW(mp_builtin_open_obj);
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// A port can provide its own import handler by defining mp_builtin___import__.
|
||||||
|
#ifndef mp_builtin___import__
|
||||||
|
#define mp_builtin___import__ mp_builtin___import___default
|
||||||
|
#endif
|
||||||
mp_obj_t mp_builtin___import__(size_t n_args, const mp_obj_t *args);
|
mp_obj_t mp_builtin___import__(size_t n_args, const mp_obj_t *args);
|
||||||
|
mp_obj_t mp_builtin___import___default(size_t n_args, const mp_obj_t *args);
|
||||||
|
|
||||||
mp_obj_t mp_micropython_mem_info(size_t n_args, const mp_obj_t *args);
|
mp_obj_t mp_micropython_mem_info(size_t n_args, const mp_obj_t *args);
|
||||||
|
|
||||||
MP_DECLARE_CONST_FUN_OBJ_VAR(mp_builtin___build_class___obj);
|
MP_DECLARE_CONST_FUN_OBJ_VAR(mp_builtin___build_class___obj);
|
||||||
|
@ -467,7 +467,7 @@ STATIC mp_obj_t process_import_at_level(qstr full_mod_name, qstr level_mod_name,
|
|||||||
return module_obj;
|
return module_obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_obj_t mp_builtin___import__(size_t n_args, const mp_obj_t *args) {
|
mp_obj_t mp_builtin___import___default(size_t n_args, const mp_obj_t *args) {
|
||||||
#if DEBUG_PRINT
|
#if DEBUG_PRINT
|
||||||
DEBUG_printf("__import__:\n");
|
DEBUG_printf("__import__:\n");
|
||||||
for (size_t i = 0; i < n_args; i++) {
|
for (size_t i = 0; i < n_args; i++) {
|
||||||
@ -566,7 +566,7 @@ mp_obj_t mp_builtin___import__(size_t n_args, const mp_obj_t *args) {
|
|||||||
|
|
||||||
#else // MICROPY_ENABLE_EXTERNAL_IMPORT
|
#else // MICROPY_ENABLE_EXTERNAL_IMPORT
|
||||||
|
|
||||||
mp_obj_t mp_builtin___import__(size_t n_args, const mp_obj_t *args) {
|
mp_obj_t mp_builtin___import___default(size_t n_args, const mp_obj_t *args) {
|
||||||
// Check that it's not a relative import
|
// Check that it's not a relative import
|
||||||
if (n_args >= 5 && MP_OBJ_SMALL_INT_VALUE(args[4]) != 0) {
|
if (n_args >= 5 && MP_OBJ_SMALL_INT_VALUE(args[4]) != 0) {
|
||||||
mp_raise_NotImplementedError(MP_ERROR_TEXT("relative import"));
|
mp_raise_NotImplementedError(MP_ERROR_TEXT("relative import"));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user