From 93822ba5ef049436caa39e68c534e77992a1a9c2 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 26 Jun 2023 23:39:11 +0100 Subject: Extract toFunction() --- .../compiler/backends/llvm/LlvmCodeGenContext.java | 27 ++++++++++++++++++---- .../backends/llvm/LlvmCodeGenNamespaces.java | 7 ++---- 2 files changed, 25 insertions(+), 9 deletions(-) (limited to 'src/main/java') 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 params + ) { + return new LlvmFunctionDefinition( + name, + returnType, + params, + basicBlocks + ); + } + public Result 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 params + ) { + return functionContext.toFunction(name, returnType, params); + } + public LlvmCodeGenResult 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( -- cgit v1.2.3