Skip to content
This repository was archived by the owner on Dec 8, 2025. It is now read-only.

Commit e0bb5b8

Browse files
committed
fix: make sure that load_prelude() keeps returning the same thing for the same file
1 parent a21a5fa commit e0bb5b8

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

bolt/codegen.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -613,7 +613,7 @@ def __call__(self, node: AstRoot) -> CodegenResult: # type: ignore
613613
output=output,
614614
refs=acc.refs,
615615
dependencies=acc.dependencies,
616-
prelude_imports=acc.prelude_imports,
616+
prelude_imports=tuple(acc.prelude_imports),
617617
macros=acc.macros,
618618
)
619619

bolt/module.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ class CompiledModule:
119119
python: Optional[str]
120120
refs: List[Any]
121121
dependencies: Set[str]
122-
prelude_imports: List[AstPrelude]
122+
prelude_imports: Tuple[AstPrelude, ...]
123123
macros: MacroLibrary
124124
lexical_scope: LexicalScope
125125
output: Optional[str]
@@ -138,7 +138,7 @@ class CodegenResult:
138138
output: Optional[str] = None
139139
refs: List[Any] = field(default_factory=list)
140140
dependencies: Set[str] = field(default_factory=set)
141-
prelude_imports: List[AstPrelude] = field(default_factory=list)
141+
prelude_imports: Tuple[AstPrelude, ...] = ()
142142
macros: MacroLibrary = field(default_factory=dict)
143143

144144

@@ -177,6 +177,9 @@ class ModuleManager(Mapping[TextFileBase[Any], CompiledModule]):
177177
prelude: Dict[str, Dict[Optional[Union[ResourcePack, DataPack]], AstPrelude]] = (
178178
extra_field(default_factory=dict)
179179
)
180+
prelude_cache: Dict[TextFileBase[Any], Tuple[AstPrelude, ...]] = extra_field(
181+
default_factory=dict
182+
)
180183

181184
execution_count: int = 0
182185

@@ -418,8 +421,12 @@ def export_prelude(self, module: CompiledModule) -> Optional[AstPrelude]:
418421

419422
return AstPrelude(arguments=AstChildren(arguments))
420423

421-
def load_prelude(self) -> List[AstPrelude]:
422-
"""Load the prelude imports."""
424+
def load_prelude(self) -> Tuple[AstPrelude, ...]:
425+
"""Load the prelude imports for the current file."""
426+
cached = self.prelude_cache.get(self.database.current)
427+
if cached is not None:
428+
return cached
429+
423430
current_pack = self.database[self.database.current].pack
424431
current_prelude = self.prelude
425432

@@ -444,7 +451,9 @@ def load_prelude(self) -> List[AstPrelude]:
444451
pack_prelude[current_pack] = prelude
445452
prelude_imports.append(prelude)
446453

447-
return prelude_imports
454+
result = tuple(prelude_imports)
455+
self.prelude_cache[self.database.current] = result
456+
return result
448457

449458

450459
@dataclass

0 commit comments

Comments
 (0)