summaryrefslogtreecommitdiff
path: root/shared/runtime/pyexec.c
diff options
context:
space:
mode:
authorAndrew Leech <andrew.leech@planetinnovation.com.au>2025-05-26 19:28:02 +1000
committerDamien George <damien@micropython.org>2025-11-22 00:06:58 +1100
commit7b3a0fc6b7fe935be008d2518eb480b75a8809d1 (patch)
treea72cb0fadb897ca5733e6e712f838b934cbdf04f /shared/runtime/pyexec.c
parent3b2b8dd53826ef3b7ef755013e1ecdccd368cb8c (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.c8
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) {