From 5ce1a03a78bf87c914d53f63a35cf2b81963e6e4 Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 12 Jun 2023 13:09:48 +1000 Subject: [PATCH] py/makemoduledefs.py: Automatically declare delegation attr functions. So that the delegation functions don't need to be put somewhere global, like in mpconfigport.h. That would otherwise make it hard for extension modules to use delegation. Signed-off-by: Damien George --- py/builtin.h | 2 -- py/makemoduledefs.py | 5 ++++- py/modsys.c | 2 +- py/objmodule.c | 6 ------ py/objmodule.h | 6 ++++++ 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/py/builtin.h b/py/builtin.h index 57f275fb31206..81d0789802b9c 100644 --- a/py/builtin.h +++ b/py/builtin.h @@ -132,8 +132,6 @@ extern const mp_obj_module_t mp_module___main__; extern const mp_obj_module_t mp_module_builtins; extern const mp_obj_module_t mp_module_sys; -void mp_module_sys_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest); - // Modules needed by the parser when MICROPY_COMP_MODULE_CONST is enabled. extern const mp_obj_module_t mp_module_errno; extern const mp_obj_module_t mp_module_uctypes; diff --git a/py/makemoduledefs.py b/py/makemoduledefs.py index 66d4bff65cb28..29162ab387c8b 100644 --- a/py/makemoduledefs.py +++ b/py/makemoduledefs.py @@ -106,7 +106,10 @@ def generate_module_delegations(delegations): if not delegations: return - print("\n#define MICROPY_MODULE_DELEGATIONS \\") + print() + for obj_module, fun_name in delegations: + print("extern void {}(mp_obj_t self_in, qstr attr, mp_obj_t *dest);".format(fun_name)) + print("#define MICROPY_MODULE_DELEGATIONS \\") for obj_module, fun_name in delegations: print( " {{ MP_ROM_PTR(&{obj_module}), {fun_name} }}, \\".format( diff --git a/py/modsys.c b/py/modsys.c index 9b3a2bc163501..38105ee21894a 100644 --- a/py/modsys.c +++ b/py/modsys.c @@ -336,7 +336,7 @@ MP_REGISTER_ROOT_POINTER(mp_obj_t sys_exitfunc); #if MICROPY_PY_SYS_ATTR_DELEGATION // Contains mutable sys attributes. MP_REGISTER_ROOT_POINTER(mp_obj_t sys_mutable[MP_SYS_MUTABLE_NUM]); -MP_REGISTER_MODULE_DELEGATION(mp_module_sys, &mp_module_sys_attr); +MP_REGISTER_MODULE_DELEGATION(mp_module_sys, mp_module_sys_attr); #endif #endif // MICROPY_PY_SYS diff --git a/py/objmodule.c b/py/objmodule.c index 8ffae139bca37..5266421b79645 100644 --- a/py/objmodule.c +++ b/py/objmodule.c @@ -34,12 +34,6 @@ #include "py/runtime.h" #include "py/builtin.h" -#ifndef NO_QSTR -// Only include module definitions when not doing qstr extraction, because the -// qstr extraction stage also generates this module definition header file. -#include "genhdr/moduledefs.h" -#endif - STATIC void module_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { (void)kind; mp_obj_module_t *self = MP_OBJ_TO_PTR(self_in); diff --git a/py/objmodule.h b/py/objmodule.h index 9cc9a2f102feb..8b14cd9fc3d30 100644 --- a/py/objmodule.h +++ b/py/objmodule.h @@ -28,6 +28,12 @@ #include "py/obj.h" +#ifndef NO_QSTR +// Only include module definitions when not doing qstr extraction, because the +// qstr extraction stage also generates this module definition header file. +#include "genhdr/moduledefs.h" +#endif + extern const mp_map_t mp_builtin_module_map; extern const mp_map_t mp_builtin_extensible_module_map;