diff options
| author | Andrew Leech <andrew.leech@planetinnovation.com.au> | 2025-05-26 19:28:02 +1000 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2025-11-22 00:06:58 +1100 |
| commit | 7b3a0fc6b7fe935be008d2518eb480b75a8809d1 (patch) | |
| tree | a72cb0fadb897ca5733e6e712f838b934cbdf04f /shared/runtime/pyexec.c | |
| parent | 3b2b8dd53826ef3b7ef755013e1ecdccd368cb8c (diff) | |
shared/runtime/pyexec: Provide support for compile-only mode.
When `MICROPY_PYEXEC_COMPILE_ONLY` is enabled and the global
`mp_compile_only` is True, code is compiled but not executed.
Also add comprehensive tests for compile-only functionality covering both
successful compilation and syntax error detection.
Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
Diffstat (limited to 'shared/runtime/pyexec.c')
| -rw-r--r-- | shared/runtime/pyexec.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/shared/runtime/pyexec.c b/shared/runtime/pyexec.c index 619636783..910b39c08 100644 --- a/shared/runtime/pyexec.c +++ b/shared/runtime/pyexec.c @@ -130,7 +130,12 @@ static int parse_compile_execute(const void *source, mp_parse_input_kind_t input #if MICROPY_REPL_INFO start = mp_hal_ticks_ms(); #endif - mp_call_function_0(module_fun); + #if MICROPY_PYEXEC_COMPILE_ONLY + if (!mp_compile_only) + #endif + { + mp_call_function_0(module_fun); + } mp_hal_set_interrupt_char(-1); // disable interrupt mp_handle_pending(true); // handle any pending exceptions (and any callbacks) nlr_pop(); @@ -706,6 +711,7 @@ int pyexec_file(const char *filename) { return parse_compile_execute(filename, MP_PARSE_FILE_INPUT, EXEC_FLAG_SOURCE_IS_FILENAME); } + int pyexec_file_if_exists(const char *filename) { #if MICROPY_MODULE_FROZEN if (mp_find_frozen_module(filename, NULL, NULL) == MP_IMPORT_STAT_FILE) { |
