diff --git a/tests/snippets/builtin_file.py b/tests/snippets/builtin_file.py new file mode 100644 index 000000000..50dfeb931 --- /dev/null +++ b/tests/snippets/builtin_file.py @@ -0,0 +1,3 @@ +from import_file import import_file + +import_file() diff --git a/tests/snippets/import_file.py b/tests/snippets/import_file.py new file mode 100644 index 000000000..3f9eeed70 --- /dev/null +++ b/tests/snippets/import_file.py @@ -0,0 +1,4 @@ +import os + +def import_file(): + assert os.path.basename(__file__) == "import_file.py" diff --git a/vm/src/import.rs b/vm/src/import.rs index f4c52a11e..a03f14623 100644 --- a/vm/src/import.rs +++ b/vm/src/import.rs @@ -48,12 +48,13 @@ pub fn import_file( content: String, ) -> PyResult { let sys_modules = vm.get_attribute(vm.sys_module.clone(), "modules").unwrap(); - let code_obj = compile::compile(vm, &content, &compile::Mode::Exec, file_path) + let code_obj = compile::compile(vm, &content, &compile::Mode::Exec, file_path.clone()) .map_err(|err| vm.new_syntax_error(&err))?; // trace!("Code object: {:?}", code_obj); let attrs = vm.ctx.new_dict(); attrs.set_item("__name__", vm.new_str(module_name.to_string()), vm)?; + attrs.set_item("__file__", vm.new_str(file_path), vm)?; let module = vm.ctx.new_module(module_name, attrs.clone()); // Store module in cache to prevent infinite loop with mutual importing libs: