diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-26 23:39:11 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-26 23:39:11 +0100 |
| commit | 93822ba5ef049436caa39e68c534e77992a1a9c2 (patch) | |
| tree | 1076c33060343b41b7386514fcc327bb9ed896d9 /src/main/java | |
| parent | ff2bd62b7e6e9cd91ba0d6ae1ffd9b982be6dd17 (diff) | |
Extract toFunction()
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenContext.java | 27 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenNamespaces.java | 7 |
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( |
