From b8dc70cf90a7d9cf44075ffdb63c5721e5077061 Mon Sep 17 00:00:00 2001 From: Qrius Date: Tue, 6 May 2025 11:00:11 +0200 Subject: Remove py_global_env, so we get a more file-like environment for arbitrary code --- src/smp/macro_processor.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'src/smp/macro_processor.py') diff --git a/src/smp/macro_processor.py b/src/smp/macro_processor.py index a595c36..f34f4f9 100644 --- a/src/smp/macro_processor.py +++ b/src/smp/macro_processor.py @@ -65,10 +65,7 @@ class MacroProcessor: macros: dict[str, Any] """ Macros which are @directives """ special_macros: dict[str, tuple[Any, Any]] - """ Global environment for python execution """ - py_global_env: dict """ Local environment for python execution """ - py_local_env_alt: dict py_local_env_current: dict """ All macro invocations that has happened """ macro_invocations: list[tuple[str, list[str]]] @@ -86,7 +83,6 @@ class MacroProcessor: self.macros = dict() self.macro_invocations = list() self.warnings = list() - self.py_global_env = dict() self.py_local_env_alt = dict() self.py_local_env_current = self.macros self.prefix = prefix @@ -510,7 +506,7 @@ class MacroProcessor: with redirect_stdout(f): exec( "".join(py_expr), - self.py_global_env, + self.py_local_env_current, self.py_local_env_current, ) s = f.getvalue() @@ -558,7 +554,7 @@ class MacroProcessor: target_filename = self._get_metadata("target_filename") - self.py_global_env["macro_processor_state"][self.source_file_path] = dict( + self._get_macro_builtin("macro_processor_state")[self.source_file_path] = dict( { # "content": "", "stored_data": { @@ -571,7 +567,7 @@ class MacroProcessor: **xargs, } ) - return self.py_global_env["macro_processor_state"][self.source_file_path] + return self._get_macro_builtin("macro_processor_state")[self.source_file_path] class MacroProcessorState: @@ -584,7 +580,9 @@ class MacroProcessorState: if macro_processor is None: macro_processor = MacroProcessor(prefix) - macro_processor.py_global_env["macro_processor_state"] = self.global_state + macro_processor._define_macro_builtin( + "macro_processor_state", self.global_state + ) return macro_processor def print_state(self): -- cgit v1.2.3