aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/smp/builtins.py5
-rw-r--r--src/smp/macro_processor.py22
2 files changed, 10 insertions, 17 deletions
diff --git a/src/smp/builtins.py b/src/smp/builtins.py
index 9835620..36cc380 100644
--- a/src/smp/builtins.py
+++ b/src/smp/builtins.py
@@ -311,10 +311,5 @@ def smp_builtin_dumpenv(macro_processor):
out += "━ Macros ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"
for key, val in macro_processor.macros.items():
out += f"{repr(key)}: {repr(val)}\n"
- out += "━ Globals ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"
- for key, val in macro_processor.py_global_env.items():
- if key == "__builtins__":
- continue
- out += f"{repr(key)}: {repr(val)}\n"
out += "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
return out
diff --git a/src/smp/macro_processor.py b/src/smp/macro_processor.py
index 4c8107c..a473db4 100644
--- a/src/smp/macro_processor.py
+++ b/src/smp/macro_processor.py
@@ -74,10 +74,7 @@ class MacroProcessor:
end_quote: str = '"%'
prefix: str = ""
- file = None
-
expansion_stack: list[Any]
- file_stack: list[Any]
def __init__(self, prefix=""):
self.macros = dict()
@@ -90,7 +87,6 @@ class MacroProcessor:
self.expansion_stack = (
list()
) # This probably needs some magic at some point later
- self.file_stack = list() # This probably needs some magic at some point later
self._define_builtins(self.macros)
self._define_builtins(self.py_local_env_alt)
@@ -112,6 +108,8 @@ class MacroProcessor:
def _define_builtins(self, env):
self._import_symbols(smp.builtins, env, function_prefix="smp_builtin_")
+ env[f"{self.prefix}file"] = None
+ env[f"{self.prefix}file_stack"] = []
env[f"{self.prefix}macro_processor"] = self
env[f"{self.prefix}template_stack"] = []
env[f"{self.prefix}template_stack_content"] = []
@@ -142,7 +140,7 @@ class MacroProcessor:
return self.macros.get(f"{sub_prefix}{macro_name}", default)
def _define_metadata(self, macro_name, macro_value):
- sub_prefix = (self._get_macro_builtin("metadata_prefix"),)
+ sub_prefix = (self._get_macro_builtin("metadata_prefix"))
self.define_macro(f"{sub_prefix}{macro_name}", macro_value)
def log_warning(self, message):
@@ -238,14 +236,14 @@ class MacroProcessor:
self.expansion_stack.pop()
def _enter_file_frame(self, filename, linenr, template):
- self.file_stack.append([filename, linenr, 0])
+ self._get_macro_builtin("file_stack").append([filename, linenr, 0])
def _pop_file_frame(self):
- self.file_stack.pop()
+ self._get_macro_builtin("file_stack").pop()
def _stack(self):
out = "- File stack ------\n"
- for i, frame in enumerate(self.file_stack):
+ for i, frame in enumerate(self._get_macro_builtin("file_stack")):
out += f" {' ' * i} {frame[0]}:{frame[1]}\n"
out += "\n- Macro stack -----\n"
for i, frame in enumerate(self.expansion_stack):
@@ -283,9 +281,9 @@ class MacroProcessor:
but may also be faster (stream or mutable string)
"""
if file is not None:
- self.file = file
- if (file is None) and (self.file is not None):
- file = self.file
+ self._define_macro_builtin("file", file)
+ if (file is None) and (self._get_macro_builtin("file") is not None):
+ file = self._get_macro_builtin("file")
output: list[str] = []
state = ParserState.NORMAL
@@ -336,7 +334,7 @@ class MacroProcessor:
output.extend(f"\n#line {linenr} {file}")
linenr += 1
linestart = i + 1
- self.file_stack[-1][1] = linenr
+ self._get_macro_builtin("file_stack")[-1][1] = linenr
if self._debug_on(5):
print(