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>
This commit is contained in:
@@ -151,12 +151,7 @@ STATIC void mp_help_print_obj(const mp_obj_t obj) {
|
||||
if (map != NULL) {
|
||||
for (uint i = 0; i < map->alloc; i++) {
|
||||
mp_obj_t key = map->table[i].key;
|
||||
if (key != MP_OBJ_NULL
|
||||
#if MICROPY_MODULE_ATTR_DELEGATION
|
||||
// MP_MODULE_ATTR_DELEGATION_ENTRY entries have MP_QSTRnull as qstr key.
|
||||
&& key != MP_OBJ_NEW_QSTR(MP_QSTRnull)
|
||||
#endif
|
||||
) {
|
||||
if (key != MP_OBJ_NULL) {
|
||||
mp_help_print_info_about_object(key, map->table[i].value);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user