From 5373f7c0441a03ae62dd28d0fa442c1094136bbe Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 19 Nov 2023 10:43:13 +0000 Subject: Make FieldsInfo iterable --- src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 2 +- src/main/java/org/shedlang/compiler/types/FieldsInfo.java | 8 +++++++- src/main/java/org/shedlang/compiler/util/POrderedMap.java | 5 +++++ 3 files changed, 13 insertions(+), 2 deletions(-) (limited to 'src/main/java') 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(POrderedMap> fields) { +public record FieldsInfo(POrderedMap> fields) implements Iterable> { @SafeVarargs public static FieldsInfo of(FieldInfo... fields) { return new FieldsInfo<>( @@ -54,6 +55,11 @@ public record FieldsInfo(POrderedMap> field return fields.entryStream().map(x -> x.getValue()); } + @Override + public Iterator> iterator() { + return fields.valueStream().iterator(); + } + public static Builder builder() { return new Builder(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 { .map(key -> Map.entry(key, map.get(key))); } + public Stream valueStream() { + return keys.stream() + .map(key -> map.get(key)); + } + @Override public boolean equals(Object other) { if (this == other) { -- cgit v1.2.3