summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--shared/runtime/pyexec.c5
-rw-r--r--tests/cmdline/cmd_file_variable.py5
-rw-r--r--tests/cmdline/cmd_file_variable.py.exp1
3 files changed, 11 insertions, 0 deletions
diff --git a/shared/runtime/pyexec.c b/shared/runtime/pyexec.c
index 237a6f9df..619636783 100644
--- a/shared/runtime/pyexec.c
+++ b/shared/runtime/pyexec.c
@@ -103,6 +103,11 @@ static int parse_compile_execute(const void *source, mp_parse_input_kind_t input
}
// source is a lexer, parse and compile the script
qstr source_name = lex->source_name;
+ #if MICROPY_MODULE___FILE__
+ if (input_kind == MP_PARSE_FILE_INPUT) {
+ mp_store_global(MP_QSTR___file__, MP_OBJ_NEW_QSTR(source_name));
+ }
+ #endif
mp_parse_tree_t parse_tree = mp_parse(lex, input_kind);
#if defined(MICROPY_UNIX_COVERAGE)
// allow to print the parse tree in the coverage build
diff --git a/tests/cmdline/cmd_file_variable.py b/tests/cmdline/cmd_file_variable.py
new file mode 100644
index 000000000..6cac6744d
--- /dev/null
+++ b/tests/cmdline/cmd_file_variable.py
@@ -0,0 +1,5 @@
+# Test that __file__ is set correctly for script execution
+try:
+ print("__file__ =", __file__)
+except NameError:
+ print("__file__ not defined")
diff --git a/tests/cmdline/cmd_file_variable.py.exp b/tests/cmdline/cmd_file_variable.py.exp
new file mode 100644
index 000000000..6807569f6
--- /dev/null
+++ b/tests/cmdline/cmd_file_variable.py.exp
@@ -0,0 +1 @@
+__file__ = cmdline/cmd_file_variable.py