diff options
author | Damien George <damien@micropython.org> | 2021-07-27 00:38:21 +1000 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2022-03-10 10:35:44 +1100 |
commit | 3356b5ef8d1b232a1df493f70f0ba434f293fe11 (patch) | |
tree | eecb3016d1c1b2c87c4eada76c0f35bbe2d0fa6c /py/objmodule.h | |
parent | d470c5a5baa8660461b76585a57f2de28b30f5dc (diff) |
py/objmodule: Support delegating failed attr lookups.
This commit adds generic support for mutable module attributes on built in
modules, by adding support for an optional hook function for module
attribute lookup. If a module wants to support additional attribute load/
store/delete (beyond what is in the constant, globals dict) then it should
add at the very end of its globals dict MP_MODULE_ATTR_DELEGATION_ENTRY().
This should point to a custom function which will handle any additional
attributes.
The mp_module_generic_attr() function is provided as a helper function for
additional attributes: it requires an array of qstrs (terminated in
MP_QSTRnull) and a corresponding array of objects (with a 1-1 mapping
between qstrs and objects). If the qstr is found in the array then the
corresponding object is loaded/stored/deleted.
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'py/objmodule.h')
-rw-r--r-- | py/objmodule.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/py/objmodule.h b/py/objmodule.h index 8a82d13fe..d11d5bcd7 100644 --- a/py/objmodule.h +++ b/py/objmodule.h @@ -28,6 +28,9 @@ #include "py/obj.h" +// Place at the very end of a module's globals_table. +#define MP_MODULE_ATTR_DELEGATION_ENTRY(ptr) { MP_ROM_QSTR(MP_QSTRnull), MP_ROM_PTR(ptr) } + extern const mp_map_t mp_builtin_module_map; mp_obj_t mp_module_get_loaded_or_builtin(qstr module_name); @@ -35,4 +38,6 @@ mp_obj_t mp_module_get_loaded_or_builtin(qstr module_name); mp_obj_t mp_module_get_builtin(qstr module_name); #endif +void mp_module_generic_attr(qstr attr, mp_obj_t *dest, const uint16_t *keys, mp_obj_t *values); + #endif // MICROPY_INCLUDED_PY_OBJMODULE_H |