Skip to content

Commit c78c9fe

Browse files
committed
Moved LLVMGen to be a threadlocal variable in ParserState.py
1 parent a351289 commit c78c9fe

File tree

8 files changed

+21
-20
lines changed

8 files changed

+21
-20
lines changed

.idea/workspace.xml

Lines changed: 4 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rial/ASTVisitor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class ASTVisitor(Interpreter):
1919

2020
def __init__(self):
2121
super().__init__()
22-
self.llvmgen = LLVMGen()
22+
self.llvmgen = ParserState.llvmgen()
2323

2424
def transform_helper(self, node):
2525
if isinstance(node, Tree):

rial/FunctionDeclarationTransformer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class FunctionDeclarationTransformer(TransformerInterpreter):
2121

2222
def __init__(self):
2323
super().__init__()
24-
self.llvmgen = LLVMGen()
24+
self.llvmgen = ParserState.llvmgen()
2525
self.mangling = True
2626

2727
def attributed_func_decl(self, tree: Tree):

rial/GlobalDeclarationTransformer.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,8 @@ class GlobalDeclarationTransformer(TransformerInterpreter):
1616

1717
def __init__(self):
1818
super().__init__()
19-
self.llvmgen = LLVMGen()
19+
self.llvmgen = ParserState.llvmgen()
2020
self.ast_visitor = ASTVisitor()
21-
self.ast_visitor.llvmgen = self.llvmgen
2221

2322
def global_variable_decl(self, tree: Tree):
2423
body = tree.children[1].children

rial/ParserState.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class ParserState:
2222
cached_struct_modules: Dict[str, RIALModule]
2323
implemented_functions: List[str]
2424
threadLocalModule: threading.local
25+
threadLocalLLVMGen: threading.local
2526
builtin_types: Dict[str, Dict[str, RIALFunction]]
2627

2728
def __init__(self):
@@ -31,6 +32,7 @@ def __init__(self):
3132
def init():
3233
ParserState.implemented_functions = list()
3334
ParserState.threadLocalModule = threading.local()
35+
ParserState.threadLocalLLVMGen = threading.local()
3436
ParserState.cached_functions = dict()
3537
ParserState.cached_struct_modules = dict()
3638
ParserState.builtin_types = dict()
@@ -43,6 +45,14 @@ def set_module(module: RIALModule):
4345
def module(cls) -> RIALModule:
4446
return cls.threadLocalModule.module
4547

48+
@staticmethod
49+
def set_llvmgen(llvmgen):
50+
ParserState.threadLocalLLVMGen.llvmgen = llvmgen
51+
52+
@classmethod
53+
def llvmgen(cls):
54+
return cls.threadLocalLLVMGen.llvmgen
55+
4656
@staticmethod
4757
def add_dependency_and_wait(module_name: str):
4858
if Path(CompilationManager.path_from_mod_name(module_name)).exists():

rial/PrimitiveASTTransformer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class PrimitiveASTTransformer(Transformer_InPlaceRecursive):
1515

1616
def __init__(self):
1717
super().__init__()
18-
self.llvmgen = LLVMGen()
18+
self.llvmgen = ParserState.llvmgen()
1919

2020
def using(self, nodes):
2121
mod_name = ':'.join([node.value for node in nodes])

rial/StructDeclarationTransformer.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,9 @@ class StructDeclarationTransformer(TransformerInterpreter):
1717

1818
def __init__(self):
1919
super().__init__()
20-
self.llvmgen = LLVMGen()
20+
self.llvmgen = ParserState.llvmgen()
2121
self.fdt = FunctionDeclarationTransformer()
2222

23-
# This guarantees that variables such as current_struct and the like are also visible in the FDT
24-
self.fdt.llvmgen = self.llvmgen
25-
2623
def struct_decl(self, tree: Tree):
2724
nodes: List = tree.children
2825
access_modifier = nodes[0].access_modifier

rial/compiler.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from rial.DesugarTransformer import DesugarTransformer
1717
from rial.FunctionDeclarationTransformer import FunctionDeclarationTransformer
1818
from rial.GlobalDeclarationTransformer import GlobalDeclarationTransformer
19+
from rial.LLVMGen import LLVMGen
1920
from rial.ParserState import ParserState
2021
from rial.PrimitiveASTTransformer import PrimitiveASTTransformer
2122
from rial.StructDeclarationTransformer import StructDeclarationTransformer
@@ -232,6 +233,7 @@ def compile_file(path: str):
232233
module = CompilationManager.codegen.get_module(module_name, filename,
233234
str(CompilationManager.config.source_path))
234235
ParserState.set_module(module)
236+
ParserState.set_llvmgen(LLVMGen())
235237

236238
if not ParserState.module().name.startswith("rial:builtin:always_imported"):
237239
ParserState.module().dependencies.extend(CompilationManager.always_imported)

0 commit comments

Comments
 (0)