diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-11-19 10:43:13 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-11-19 10:43:13 +0000 |
| commit | 5373f7c0441a03ae62dd28d0fa442c1094136bbe (patch) | |
| tree | d52dd272d838bfb1ec36b2e4884dfd0eca1fd429 /src/main/java | |
| parent | 5e30f2e61066ff01d4a56474b7b969b9db80ff84 (diff) | |
Make FieldsInfo iterable
Diffstat (limited to 'src/main/java')
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) { |
