diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-18 13:07:44 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-18 13:07:44 +0100 |
| commit | 2f2bd1a3e89ae3652481f7964747ecd4c9c76976 (patch) | |
| tree | 2a5bdef21d009b0f7f7993d0bad52f329d303823 /src/main/java | |
| parent | 16968c511418dcc4e5e145feb3dd8cf2a952e7e3 (diff) | |
Extract LlvmCompilerNamespaces.importValue()
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java | 13 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerNamespaces.java | 29 |
2 files changed, 25 insertions, 17 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 a126fda1..2089f545 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java @@ -2,7 +2,6 @@ package org.shedlang.compiler.backends.llvm; import org.shedlang.compiler.ast.typed.FreeVariables; import org.shedlang.compiler.backends.llvm.ir.ast.*; -import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmCall; import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmReturn; import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmOperand; import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmOperandInt; @@ -30,20 +29,10 @@ public class LlvmCompiler { var mainContext = context.enterFunction(); - var namespaceResult = mainContext.generateVariableLocal( - LlvmCompilerLocalVariableSpace.NAMESPACE, - String.join("_", main.parts()) - ); + var namespaceResult = LlvmCompilerNamespaces.importValue(main, mainContext); var namespace = namespaceResult.value(); mainContext = namespaceResult.context(); - mainContext = mainContext.addInstruction(new LlvmCall( - namespace, - LlvmCompilerTypes.VALUE_TYPE, - new LlvmVariableGlobal(LlvmCompilerNamespaces.globalNameNamespaceImport(main)), - List.of() - )); - var fieldResult = LlvmCompilerNamespaces.fieldLoad( main, namespace, 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 7694c66a..96c7d3b4 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerNamespaces.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerNamespaces.java @@ -34,7 +34,7 @@ public class LlvmCompilerNamespaces { private static LlvmOperand operandNamespaceValue(NamespaceName namespaceName) { return new LlvmOperandPtrToInt( - LlvmCompilerNamespaces.operandNamespaceStruct(namespaceName), + operandNamespaceStruct(namespaceName), LlvmCompilerTypes.VALUE_TYPE ); } @@ -59,6 +59,25 @@ public class LlvmCompilerNamespaces { return String.join("_", namespaceName.parts()); } + public static LlvmCompilerResult<LlvmOperand> importValue( + NamespaceName namespaceName, + LlvmCompilerContext context + ) { + var namespaceResult = context.generateVariableLocal( + LlvmCompilerLocalVariableSpace.NAMESPACE, + namespaceNameToLlvmIdentifier(namespaceName) + ); + var namespace = namespaceResult.value(); + context = namespaceResult.context(); + + return context.addInstruction(new LlvmCall( + namespace, + LlvmCompilerTypes.VALUE_TYPE, + new LlvmVariableGlobal(globalNameNamespaceImport(namespaceName)), + List.of() + )).toResult(namespace); + } + public static LlvmCompilerContext define( NamespaceName namespaceName, LlvmCompilerContext context @@ -66,7 +85,7 @@ public class LlvmCompilerNamespaces { context = context.addTerminatorInstruction(new LlvmReturnVoid()); var basicBlocks = context.basicBlocks(); var namespaceInitFunction = new LlvmFunctionDefinition( - LlvmCompilerNamespaces.globalNameNamespaceInit(namespaceName), + globalNameNamespaceInit(namespaceName), LlvmTypes.VOID, List.of(), basicBlocks @@ -89,13 +108,13 @@ public class LlvmCompilerNamespaces { ), new LlvmReturn( LlvmCompilerTypes.VALUE_TYPE, - LlvmCompilerNamespaces.operandNamespaceValue(namespaceName) + operandNamespaceValue(namespaceName) ) )) ); return context - .addTopLevelEntity(LlvmCompilerNamespaces.defineGlobal( + .addTopLevelEntity(defineGlobal( namespaceName, context.typeInfo().namespaceTypeInfo(namespaceName) )) @@ -103,7 +122,7 @@ public class LlvmCompilerNamespaces { .addTopLevelEntity(namespaceImportFunction); } - public static LlvmGlobalDefinition defineGlobal( + private static LlvmGlobalDefinition defineGlobal( NamespaceName namespaceName, NamespaceTypeInfo namespaceTypeInfo ) { |
