aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-18 19:06:01 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-18 19:06:01 +0100
commitcdd6065a224cdc623eda83106d6d167504de4f67 (patch)
treee697614ba4f54d6c3f35cecd450a60694a81dd28 /src/main/java
parentb1768b7d309921ac82bd5abd8327839f8d594b10 (diff)
Use definition order for LLVM top level entities
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompiler.java4
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerContext.java7
-rw-r--r--src/main/java/org/shedlang/compiler/util/POrderedMap.java8
3 files changed, 10 insertions, 9 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 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<LlvmTopLevelEntity> topLevelEntities() {
- return topLevelEntitiesByName.values();
+ public List<LlvmTopLevelEntity> topLevelEntities() {
+ return topLevelEntitiesByName.toValues();
}
public LlvmCompilerResult<LlvmVariableLocal> 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<K, V> {
public static <K, V> POrderedMap<K, V> empty() {
@@ -42,8 +42,10 @@ public class POrderedMap<K, V> {
return keys;
}
- public Collection<V> values() {
- return map.values();
+ public List<V> toValues() {
+ return keys.stream()
+ .map(key -> map.get(key))
+ .toList();
}
public int size() {