aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-26 23:39:11 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-26 23:39:11 +0100
commit93822ba5ef049436caa39e68c534e77992a1a9c2 (patch)
tree1076c33060343b41b7386514fcc327bb9ed896d9 /src/main/java
parentff2bd62b7e6e9cd91ba0d6ae1ffd9b982be6dd17 (diff)
Extract toFunction()
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenContext.java27
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenNamespaces.java7
2 files changed, 25 insertions, 9 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenContext.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenContext.java
index dd5e5015..3b744a02 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenContext.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenContext.java
@@ -4,14 +4,12 @@ import org.pcollections.Empty;
import org.pcollections.PMap;
import org.pcollections.PStack;
import org.pcollections.PVector;
-import org.shedlang.compiler.backends.llvm.ir.ast.LlvmBasicBlock;
-import org.shedlang.compiler.backends.llvm.ir.ast.LlvmGlobalDefinition;
-import org.shedlang.compiler.backends.llvm.ir.ast.LlvmModule;
-import org.shedlang.compiler.backends.llvm.ir.ast.LlvmTopLevelEntity;
+import org.shedlang.compiler.backends.llvm.ir.ast.*;
import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmInstruction;
import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmTerminatorInstruction;
import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmOperand;
import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmVariableLocal;
+import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmType;
import org.shedlang.compiler.typechecker.TypeInfo;
import org.shedlang.compiler.util.POrderedMap;
@@ -159,6 +157,19 @@ public record LlvmCodeGenContext(
).toResult(new LlvmVariableLocal(result.name()));
}
+ public LlvmFunctionDefinition toFunction(
+ String name,
+ LlvmType returnType,
+ List<LlvmParam> params
+ ) {
+ return new LlvmFunctionDefinition(
+ name,
+ returnType,
+ params,
+ basicBlocks
+ );
+ }
+
public <T> Result<T> toResult(T value) {
return new Result<>(value, this);
}
@@ -305,6 +316,14 @@ public record LlvmCodeGenContext(
return new LlvmCodeGenContext(this.moduleContext, result.context).toResult(result.value);
}
+ public LlvmFunctionDefinition toFunction(
+ String name,
+ LlvmType returnType,
+ List<LlvmParam> params
+ ) {
+ return functionContext.toFunction(name, returnType, params);
+ }
+
public <T> LlvmCodeGenResult<T> toResult(T value) {
return new LlvmCodeGenResult<>(value, this);
}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenNamespaces.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenNamespaces.java
index c595838d..726a77f7 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenNamespaces.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenNamespaces.java
@@ -103,13 +103,10 @@ public class LlvmCodeGenNamespaces {
new LlvmVariableGlobal(globalNameNamespaceIsInited(namespaceName))
));
context = context.addTerminatorInstruction(new LlvmReturnVoid());
- // TODO: add toFunction()
- var basicBlocks = context.basicBlocks();
- var namespaceInitFunction = new LlvmFunctionDefinition(
+ var namespaceInitFunction = context.toFunction(
globalNameNamespaceInit(namespaceName),
LlvmTypes.VOID,
- List.of(),
- basicBlocks
+ List.of()
);
var namespaceImportFunction = new LlvmFunctionDefinition(