diff options
author | Jim Mussared <jim.mussared@gmail.com> | 2023-06-05 15:52:57 +1000 |
---|---|---|
committer | Jim Mussared <jim.mussared@gmail.com> | 2023-06-08 17:54:24 +1000 |
commit | 13c817e61cf2f00fc398e01840e5d8c20e575c8c (patch) | |
tree | 6ee790425d31e5f6642537e2426100e0d1119aa4 /py/obj.h | |
parent | eb85f4d4c9c332c8e7bef9b20bb06e25f6f6c5d2 (diff) | |
download | micropython-13c817e61cf2f00fc398e01840e5d8c20e575c8c.tar.gz micropython-13c817e61cf2f00fc398e01840e5d8c20e575c8c.zip |
py/objmodule: Add a table of built-in modules with delegation.
This replaces the previous QSTR_null entry in the globals dict which could
leak out to Python (e.g. via iteration of mod.__dict__) and could lead to
crashes.
It results in smaller code size at the expense of turning a lookup into a
loop, but the list it is looping over likely only contains one or two
elements.
To allow a module to register its custom attr function it can use the new
`MP_REGISTER_MODULE_DELEGATION` macro.
This work was funded through GitHub Sponsors.
Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
Diffstat (limited to 'py/obj.h')
-rw-r--r-- | py/obj.h | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -437,6 +437,10 @@ typedef struct _mp_rom_obj_t { mp_const_obj_t o; } mp_rom_obj_t; // As above, but allow this module to be extended from the filesystem. #define MP_REGISTER_EXTENSIBLE_MODULE(module_name, obj_module) +// Add a custom handler for a builtin module that will be called to delegate +// failed attribute lookups. +#define MP_REGISTER_MODULE_DELEGATION(obj_module, fun_name) + // Declare a root pointer (to avoid garbage collection of a global static variable). // param variable_declaration: a valid C variable declaration #define MP_REGISTER_ROOT_POINTER(variable_declaration) |