aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-11-19 10:43:13 +0000
committerMichael Williamson <mike@zwobble.org>2023-11-19 10:43:13 +0000
commit5373f7c0441a03ae62dd28d0fa442c1094136bbe (patch)
treed52dd272d838bfb1ec36b2e4884dfd0eca1fd429 /src/main/java
parent5e30f2e61066ff01d4a56474b7b969b9db80ff84 (diff)
Make FieldsInfo iterable
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java2
-rw-r--r--src/main/java/org/shedlang/compiler/types/FieldsInfo.java8
-rw-r--r--src/main/java/org/shedlang/compiler/util/POrderedMap.java5
3 files changed, 13 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index d109f2ae..6288d370 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -1725,7 +1725,7 @@ public class TypeChecker {
}
// TODO: Don't create unnecessary list
- for (var effectField : effectInfo.methods().stream().toList()) {
+ for (var effectField : effectInfo.methods()) {
if (!handledFieldNames.contains(effectField.name())) {
throw new MissingEffectHandlerMethodError(effectField.name(), untyped.source());
}
diff --git a/src/main/java/org/shedlang/compiler/types/FieldsInfo.java b/src/main/java/org/shedlang/compiler/types/FieldsInfo.java
index d42a3de5..022456d5 100644
--- a/src/main/java/org/shedlang/compiler/types/FieldsInfo.java
+++ b/src/main/java/org/shedlang/compiler/types/FieldsInfo.java
@@ -6,11 +6,12 @@ import org.shedlang.compiler.util.PCollectors;
import org.shedlang.compiler.util.POrderedMap;
import java.util.Arrays;
+import java.util.Iterator;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Stream;
-public record FieldsInfo<T extends Type>(POrderedMap<String, FieldInfo<T>> fields) {
+public record FieldsInfo<T extends Type>(POrderedMap<String, FieldInfo<T>> fields) implements Iterable<FieldInfo<T>> {
@SafeVarargs
public static <T extends Type> FieldsInfo<T> of(FieldInfo<T>... fields) {
return new FieldsInfo<>(
@@ -54,6 +55,11 @@ public record FieldsInfo<T extends Type>(POrderedMap<String, FieldInfo<T>> field
return fields.entryStream().map(x -> x.getValue());
}
+ @Override
+ public Iterator<FieldInfo<T>> iterator() {
+ return fields.valueStream().iterator();
+ }
+
public static <T extends Type> Builder<T> builder() {
return new Builder<T>(P.orderedMap());
}
diff --git a/src/main/java/org/shedlang/compiler/util/POrderedMap.java b/src/main/java/org/shedlang/compiler/util/POrderedMap.java
index 4a8780ad..c3ce7200 100644
--- a/src/main/java/org/shedlang/compiler/util/POrderedMap.java
+++ b/src/main/java/org/shedlang/compiler/util/POrderedMap.java
@@ -63,6 +63,11 @@ public class POrderedMap<K, V> {
.map(key -> Map.entry(key, map.get(key)));
}
+ public Stream<V> valueStream() {
+ return keys.stream()
+ .map(key -> map.get(key));
+ }
+
@Override
public boolean equals(Object other) {
if (this == other) {