py: Add support to call __init__ from a builtin module on first import.
This commit is contained in:
parent
408b74d74c
commit
3c9c3687d6
|
@ -406,6 +406,11 @@ typedef double mp_float_t;
|
|||
#define MICROPY_STREAMS_NON_BLOCK (0)
|
||||
#endif
|
||||
|
||||
// Whether to call __init__ when importing builtin modules for the first time
|
||||
#ifndef MICROPY_MODULE_BUILTIN_INIT
|
||||
#define MICROPY_MODULE_BUILTIN_INIT (0)
|
||||
#endif
|
||||
|
||||
// Whether module weak links are supported
|
||||
#ifndef MICROPY_MODULE_WEAK_LINKS
|
||||
#define MICROPY_MODULE_WEAK_LINKS (0)
|
||||
|
|
|
@ -215,6 +215,17 @@ mp_obj_t mp_module_get(qstr module_name) {
|
|||
if (el == NULL) {
|
||||
return MP_OBJ_NULL;
|
||||
}
|
||||
|
||||
if (MICROPY_MODULE_BUILTIN_INIT) {
|
||||
// look for __init__ and call it if it exists
|
||||
mp_obj_t dest[2];
|
||||
mp_load_method_maybe(el->value, MP_QSTR___init__, dest);
|
||||
if (dest[0] != MP_OBJ_NULL) {
|
||||
mp_call_method_n_kw(0, 0, dest);
|
||||
// register module so __init__ is not called again
|
||||
mp_module_register(module_name, el->value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// module found, return it
|
||||
|
|
Loading…
Reference in New Issue