py/makemoduledefs.py: Avoid empty extensible module lists.

An empty array is a C extension supported by clang & GCC but not MSVC.

This also saves a bit of code size if there are no extensible modules.

Fixes issue #18141.

Signed-off-by: Jeff Epler <jepler@unpythonic.net>
This commit is contained in:
Jeff Epler
2025-09-26 10:23:06 -05:00
committed by Damien George
parent 653f7784d7
commit 41284577ca
6 changed files with 37 additions and 8 deletions

View File

@@ -85,19 +85,25 @@ def generate_module_table_header(modules):
)
)
# There should always be at least one module (__main__ in runtime.c)
assert mod_defs
print("\n#define MICROPY_REGISTERED_MODULES \\")
for mod_def in sorted(mod_defs):
print(" {mod_def} \\".format(mod_def=mod_def))
print("// MICROPY_REGISTERED_MODULES")
print("\n#define MICROPY_REGISTERED_EXTENSIBLE_MODULES \\")
# There are not necessarily any extensible modules (e.g., bare-arm or minimal x86)
print("\n#define MICROPY_HAVE_REGISTERED_EXTENSIBLE_MODULES ", len(extensible_mod_defs))
for mod_def in sorted(extensible_mod_defs):
print(" {mod_def} \\".format(mod_def=mod_def))
if extensible_mod_defs:
print("\n#define MICROPY_REGISTERED_EXTENSIBLE_MODULES \\")
print("// MICROPY_REGISTERED_EXTENSIBLE_MODULES")
for mod_def in sorted(extensible_mod_defs):
print(" {mod_def} \\".format(mod_def=mod_def))
print("// MICROPY_REGISTERED_EXTENSIBLE_MODULES")
def generate_module_delegations(delegations):