From cdd6065a224cdc623eda83106d6d167504de4f67 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 18 Jun 2023 19:06:01 +0100 Subject: Use definition order for LLVM top level entities --- .../java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java | 4 ++-- .../org/shedlang/compiler/backends/llvm/LlvmCompilerContext.java | 7 +++---- src/main/java/org/shedlang/compiler/util/POrderedMap.java | 8 +++++--- 3 files changed, 10 insertions(+), 9 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 4098bd7a..c9d8c8ee 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java @@ -53,7 +53,7 @@ public class LlvmCompiler { mainBasicBlocks )); - return new LlvmModule(context.topLevelEntities().stream().toList()); + return new LlvmModule(context.topLevelEntities()); } public static LlvmModule compileNamespace( @@ -68,7 +68,7 @@ public class LlvmCompiler { context = LlvmCompilerNamespaces.define(namespaceName, context); - var topLevelEntities = context.topLevelEntities().stream().toList(); + var topLevelEntities = context.topLevelEntities(); return new LlvmModule(topLevelEntities); } diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerContext.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerContext.java index 32b96e25..e884d9e8 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerContext.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerContext.java @@ -14,7 +14,6 @@ import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmVariableLocal; import org.shedlang.compiler.typechecker.TypeInfo; import org.shedlang.compiler.util.POrderedMap; -import java.util.Collection; import java.util.List; import java.util.Optional; @@ -167,8 +166,8 @@ public record LlvmCompilerContext( return topLevelEntitiesByName.containsKey(name); } - public Collection topLevelEntities() { - return topLevelEntitiesByName.values(); + public List topLevelEntities() { + return topLevelEntitiesByName.toValues(); } public LlvmCompilerResult generateVariableLocal( @@ -225,7 +224,7 @@ public record LlvmCompilerContext( locals, basicBlocks, instructions, - topLevelEntitiesByName.plusAll(functionContext.topLevelEntitiesByName), + functionContext.topLevelEntitiesByName, localVariableNames ).toResult(functionContext.basicBlocks); } diff --git a/src/main/java/org/shedlang/compiler/util/POrderedMap.java b/src/main/java/org/shedlang/compiler/util/POrderedMap.java index 71150430..9363d42e 100644 --- a/src/main/java/org/shedlang/compiler/util/POrderedMap.java +++ b/src/main/java/org/shedlang/compiler/util/POrderedMap.java @@ -4,7 +4,7 @@ import org.pcollections.Empty; import org.pcollections.PMap; import org.pcollections.PVector; -import java.util.Collection; +import java.util.List; public class POrderedMap { public static POrderedMap empty() { @@ -42,8 +42,10 @@ public class POrderedMap { return keys; } - public Collection values() { - return map.values(); + public List toValues() { + return keys.stream() + .map(key -> map.get(key)) + .toList(); } public int size() { -- cgit v1.2.3