diff options
author | Damien George <damien.p.george@gmail.com> | 2015-09-15 14:56:13 +0100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2015-10-12 13:46:01 +0100 |
commit | 3c9c3687d6c1001b88ef6dde200566456a1f2641 (patch) | |
tree | 23674a035d588eb89c8f8d2d0fb50ed58194bd8a | |
parent | 408b74d74ce8de806f8718a02d350b8326d89361 (diff) | |
download | micropython-3c9c3687d6c1001b88ef6dde200566456a1f2641.tar.gz micropython-3c9c3687d6c1001b88ef6dde200566456a1f2641.zip |
py: Add support to call __init__ from a builtin module on first import.
-rw-r--r-- | py/mpconfig.h | 5 | ||||
-rw-r--r-- | py/objmodule.c | 11 |
2 files changed, 16 insertions, 0 deletions
diff --git a/py/mpconfig.h b/py/mpconfig.h index 500af5e764..ad2fe3ee56 100644 --- a/py/mpconfig.h +++ b/py/mpconfig.h @@ -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) diff --git a/py/objmodule.c b/py/objmodule.c index 940a8daf25..63cccde2b2 100644 --- a/py/objmodule.c +++ b/py/objmodule.c @@ -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 |