aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-18 12:54:34 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-18 12:54:34 +0100
commitb9955558c297cd5d76452600ce7ba98a29498118 (patch)
tree22f8130e7f2fc73575b76c09554cfe6d648d547e /src/main/java
parent7f2f3173cdc7c05c72f71a84e527bfa931b7cd73 (diff)
Extract LlvmCompilerNamespaces.define()
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java20
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerNamespaces.java30
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