summaryrefslogtreecommitdiffstatshomepage
path: root/py/runtime.c
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2025-01-19 23:30:59 +1100
committerDamien George <damien@micropython.org>2025-02-11 16:42:14 +1100
commit62e821ccb82fd8362a8198ad59ccb51b8a5c441e (patch)
tree36202713393c8bc4842171bc1cca13a4300b928b /py/runtime.c
parent372ecfef02eccc4e52a5d0abef068c7d25fc4315 (diff)
downloadmicropython-62e821ccb82fd8362a8198ad59ccb51b8a5c441e.tar.gz
micropython-62e821ccb82fd8362a8198ad59ccb51b8a5c441e.zip
py/objcode: Factor code object out into its own file.
The `mp_obj_code_t` and `mp_type_code` code object was defined internally in both `py/builtinevex.c` and `py/profile.c`, with completely different implementations (the former very minimal, the latter quite complete). This commit factors these implementations into a new, separate source file, and allows the code object to have four different modes, selected at compile-time: - MICROPY_PY_BUILTINS_CODE_NONE: code object not included in the build. - MICROPY_PY_BUILTINS_CODE_MINIMUM: very simple code object that just holds a reference to the function that it represents. This level is used when MICROPY_PY_BUILTINS_COMPILE is enabled. - MICROPY_PY_BUILTINS_CODE_BASIC: simple code object that holds a reference to the proto-function and its constants. - MICROPY_PY_BUILTINS_CODE_FULL: almost complete implementation of the code object. This level is used when MICROPY_PY_SYS_SETTRACE is enabled. Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'py/runtime.c')
-rw-r--r--py/runtime.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/py/runtime.c b/py/runtime.c
index deb55bf283..bf26921f9a 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -1620,10 +1620,13 @@ mp_obj_t mp_parse_compile_execute(mp_lexer_t *lex, mp_parse_input_kind_t parse_i
mp_obj_t module_fun = mp_compile(&parse_tree, source_name, parse_input_kind == MP_PARSE_SINGLE_INPUT);
mp_obj_t ret;
- if (MICROPY_PY_BUILTINS_COMPILE && globals == NULL) {
+ #if MICROPY_PY_BUILTINS_COMPILE && MICROPY_PY_BUILTINS_CODE == MICROPY_PY_BUILTINS_CODE_MINIMUM
+ if (globals == NULL) {
// for compile only, return value is the module function
ret = module_fun;
- } else {
+ } else
+ #endif
+ {
// execute module function and get return value
ret = mp_call_function_0(module_fun);
}