diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-18 12:54:34 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-18 12:54:34 +0100 |
| commit | b9955558c297cd5d76452600ce7ba98a29498118 (patch) | |
| tree | 22f8130e7f2fc73575b76c09554cfe6d648d547e /src/main/java | |
| parent | 7f2f3173cdc7c05c72f71a84e527bfa931b7cd73 (diff) | |
Extract LlvmCompilerNamespaces.define()
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java | 20 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerNamespaces.java | 30 |
2 files changed, 28 insertions, 22 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java index 498dcadf..e705ce8f 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java @@ -84,25 +84,9 @@ public class LlvmCompiler { context = compileInstruction(instruction, context); } - context = context.addTerminatorInstruction(new LlvmReturn( - LlvmCompilerTypes.VALUE_TYPE, - LlvmCompilerNamespaces.operandNamespaceValue(namespaceName) - )); - var basicBlocks = context.basicBlocks(); - var namespaceInitFunction = new LlvmFunctionDefinition( - LlvmCompilerNamespaces.globalNameNamespaceInit(namespaceName), - LlvmCompilerTypes.VALUE_TYPE, - List.of(), - basicBlocks - ); + context = LlvmCompilerNamespaces.define(namespaceName, context); - var topLevelEntities = context - .addTopLevelEntity(LlvmCompilerNamespaces.defineGlobal( - namespaceName, - typeInfo.namespaceTypeInfo(namespaceName) - )) - .addTopLevelEntity(namespaceInitFunction) - .topLevelEntities().stream().toList(); + var topLevelEntities = context.topLevelEntities().stream().toList(); return new LlvmModule(topLevelEntities); } diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerNamespaces.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerNamespaces.java index db60372b..5296ec49 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerNamespaces.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerNamespaces.java @@ -1,10 +1,8 @@ package org.shedlang.compiler.backends.llvm; +import org.shedlang.compiler.backends.llvm.ir.ast.LlvmFunctionDefinition; import org.shedlang.compiler.backends.llvm.ir.ast.LlvmGlobalDefinition; -import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmGetElementPtr; -import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmIntToPtr; -import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmLoad; -import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmStore; +import org.shedlang.compiler.backends.llvm.ir.ast.instructions.*; import org.shedlang.compiler.backends.llvm.ir.ast.operands.*; import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmType; import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypePointer; @@ -55,6 +53,30 @@ public class LlvmCompilerNamespaces { return String.join("_", namespaceName.parts()); } + public static LlvmCompilerContext define( + NamespaceName namespaceName, + LlvmCompilerContext context + ) { + context = context.addTerminatorInstruction(new LlvmReturn( + LlvmCompilerTypes.VALUE_TYPE, + LlvmCompilerNamespaces.operandNamespaceValue(namespaceName) + )); + var basicBlocks = context.basicBlocks(); + var namespaceInitFunction = new LlvmFunctionDefinition( + LlvmCompilerNamespaces.globalNameNamespaceInit(namespaceName), + LlvmCompilerTypes.VALUE_TYPE, + List.of(), + basicBlocks + ); + + return context + .addTopLevelEntity(LlvmCompilerNamespaces.defineGlobal( + namespaceName, + context.typeInfo().namespaceTypeInfo(namespaceName) + )) + .addTopLevelEntity(namespaceInitFunction); + } + public static LlvmGlobalDefinition defineGlobal( NamespaceName namespaceName, NamespaceTypeInfo namespaceTypeInfo |
