From b9955558c297cd5d76452600ce7ba98a29498118 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 18 Jun 2023 12:54:34 +0100 Subject: Extract LlvmCompilerNamespaces.define() --- .../compiler/backends/llvm/LlvmCompiler.java | 20 ++------------- .../backends/llvm/LlvmCompilerNamespaces.java | 30 +++++++++++++++++++--- 2 files changed, 28 insertions(+), 22 deletions(-) (limited to 'src/main/java') 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 -- cgit v1.2.3