From f98ea69c9d401217af2a6a5d7ab42dae0ae65b6d Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 5 Nov 2023 20:29:44 +0000 Subject: Introduce FieldInfo --- .../compiler/patio/PatioCodeGenFieldLoadTests.java | 16 +++++++------ .../PatioCodeGenNamespaceFieldStoreTests.java | 16 +++++++------ .../TypeCheckerEffectDefinitionTests.java | 10 +++----- .../typechecker/TypeCheckerFieldAccessTests.java | 6 +++-- .../TypeCheckerStructDefinitionTests.java | 5 ++-- .../shedlang/compiler/types/FieldsInfoTests.java | 27 ++++++++++------------ 6 files changed, 40 insertions(+), 40 deletions(-) (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenFieldLoadTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenFieldLoadTests.java index 21349a0a..ac03f724 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenFieldLoadTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenFieldLoadTests.java @@ -9,13 +9,12 @@ import org.shedlang.compiler.testing.snapshots.Snapshotter; import org.shedlang.compiler.typechecker.TypeCheckerContext; import org.shedlang.compiler.typechecker.TypeInfos; import org.shedlang.compiler.types.NamespaceName; +import org.shedlang.compiler.types.NamespaceTypeInfo; import org.shedlang.compiler.types.StructTypeInfo; import org.shedlang.compiler.types.Types; -import org.shedlang.compiler.util.P; import java.io.IOException; import java.util.List; -import java.util.Map; import static org.shedlang.compiler.patio.PatioTesting.serialize; @@ -26,11 +25,14 @@ public class PatioCodeGenFieldLoadTests { var namespaceName = new NamespaceName(List.of("Example", "Project")); var stackIrInstruction = Instructions.fieldLoad(namespaceName, "y"); var typeInfos = TypeCheckerContext.EMPTY - .addNamespaceFields(namespaceName, P.orderedMap( - Map.entry("x", Types.INT), - Map.entry("y", Types.INT), - Map.entry("z", Types.INT) - )) + .addNamespaceTypeInfo( + namespaceName, + NamespaceTypeInfo.builder() + .addField("x", Types.INT) + .addField("y", Types.INT) + .addField("z", Types.INT) + .build() + ) .toTypeInfos(); var context = PatioCodeGenContext.forTypeInfos(typeInfos) .temporaryPush(new PatioLocalRef("a")) diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenNamespaceFieldStoreTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenNamespaceFieldStoreTests.java index 1e2a66a9..c905d0ce 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenNamespaceFieldStoreTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenNamespaceFieldStoreTests.java @@ -8,12 +8,11 @@ import org.shedlang.compiler.testing.snapshots.SnapshotResolver; import org.shedlang.compiler.testing.snapshots.Snapshotter; import org.shedlang.compiler.typechecker.TypeCheckerContext; import org.shedlang.compiler.types.NamespaceName; +import org.shedlang.compiler.types.NamespaceTypeInfo; import org.shedlang.compiler.types.Types; -import org.shedlang.compiler.util.P; import java.io.IOException; import java.util.List; -import java.util.Map; import static org.shedlang.compiler.patio.PatioTesting.serialize; @@ -24,11 +23,14 @@ public class PatioCodeGenNamespaceFieldStoreTests { var namespaceName = new NamespaceName(List.of("Example", "Project")); var stackIrInstruction = Instructions.namespaceFieldStore(namespaceName, "y"); var typeInfo = TypeCheckerContext.EMPTY - .addNamespaceFields(namespaceName, P.orderedMap( - Map.entry("x", Types.INT), - Map.entry("y", Types.INT), - Map.entry("z", Types.INT) - )) + .addNamespaceTypeInfo( + namespaceName, + NamespaceTypeInfo.builder() + .addField("x", Types.INT) + .addField("y", Types.INT) + .addField("z", Types.INT) + .build() + ) .toTypeInfos(); var context = PatioCodeGenContext.forTypeInfos(typeInfo) .temporaryPush(new PatioLocalRef("a")) diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerEffectDefinitionTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerEffectDefinitionTests.java index d5603730..3c733e5a 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerEffectDefinitionTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerEffectDefinitionTests.java @@ -6,10 +6,7 @@ import org.shedlang.compiler.ast.untyped.UntypedEffectDefinitionNode; import org.shedlang.compiler.ast.untyped.UntypedFunctionTypeNode; import org.shedlang.compiler.sources.Sources; import org.shedlang.compiler.typechecker.errors.CannotDefineEffectOutsideOfNamespaceError; -import org.shedlang.compiler.types.Effects; -import org.shedlang.compiler.types.FunctionType; -import org.shedlang.compiler.types.NamespaceName; -import org.shedlang.compiler.types.Types; +import org.shedlang.compiler.types.*; import org.shedlang.compiler.util.P; import java.util.Map; @@ -19,7 +16,6 @@ import static org.shedlang.compiler.ast.typed.TypedNodeMatchers.isTypedEffectDef import static org.shedlang.compiler.typechecker.TypeCheckerTesting.typeCheckNamespaceStatement; import static org.zwobble.precisely.AssertThat.assertThat; import static org.zwobble.precisely.Matchers.*; -import static org.zwobble.precisely.Matchers.isSequence; public class TypeCheckerEffectDefinitionTests { private static final NamespaceName NAMESPACE_NAME = NamespaceName.of("Example"); @@ -82,8 +78,8 @@ public class TypeCheckerEffectDefinitionTests { assertThat( typed.context().userDefinedEffectInfo(Effects.userDefined(NAMESPACE_NAME, "ExampleEffect"), Sources.NULL), has("fields", x -> x.fields().stream().toList(), isSequence( - equalTo(Map.entry("b", FunctionType.builder().withReturnType(Types.STRING).build())), - equalTo(Map.entry("a", FunctionType.builder().withReturnType(Types.BOOL).build())) + equalTo(new FieldInfo<>("b", FunctionType.builder().withReturnType(Types.STRING).build())), + equalTo(new FieldInfo<>("a", FunctionType.builder().withReturnType(Types.BOOL).build())) )) ); } diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFieldAccessTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFieldAccessTests.java index 8b5c6371..ec4d4bbe 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFieldAccessTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFieldAccessTests.java @@ -52,9 +52,11 @@ public class TypeCheckerFieldAccessTests { var namespaceType = Types.namespace(NamespaceName.of("Example")); var context = TypeCheckerContext.EMPTY .enterGlobal(P.map(Map.entry("Example", namespaceType))) - .addNamespaceFields( + .addNamespaceTypeInfo( namespaceType.namespaceName(), - P.orderedMap(Map.entry("name", Types.STRING)) + NamespaceTypeInfo.builder() + .addField("name", Types.STRING) + .build() ); var typed = typeCheckExpression(untyped, context); diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStructDefinitionTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStructDefinitionTests.java index 292d9ab9..f23a2cf4 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStructDefinitionTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStructDefinitionTests.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import org.shedlang.compiler.ast.untyped.Untyped; import org.shedlang.compiler.ast.untyped.UntypedStructDefinitionNode; import org.shedlang.compiler.typechecker.errors.CannotDefineStructOutsideOfNamespaceError; +import org.shedlang.compiler.types.FieldInfo; import org.shedlang.compiler.types.NamespaceName; import org.shedlang.compiler.types.Types; import org.shedlang.compiler.util.P; @@ -120,8 +121,8 @@ public class TypeCheckerStructDefinitionTests { structTypeInfo, // TODO: builder for OrderedPMap has("fields", x -> x.fields().stream().toList(), isSequence( - equalTo(Map.entry("b", Types.BOOL)), - equalTo(Map.entry("a", Types.INT)) + equalTo(new FieldInfo<>("b", Types.BOOL)), + equalTo(new FieldInfo<>("a", Types.INT)) )) ); } diff --git a/src/test/java/org/shedlang/compiler/types/FieldsInfoTests.java b/src/test/java/org/shedlang/compiler/types/FieldsInfoTests.java index d86338fc..48bb46ff 100644 --- a/src/test/java/org/shedlang/compiler/types/FieldsInfoTests.java +++ b/src/test/java/org/shedlang/compiler/types/FieldsInfoTests.java @@ -1,9 +1,6 @@ package org.shedlang.compiler.types; import org.junit.jupiter.api.Test; -import org.shedlang.compiler.util.P; - -import java.util.Map; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.zwobble.precisely.AssertThat.assertThat; @@ -12,10 +9,10 @@ import static org.zwobble.precisely.Matchers.equalTo; public class FieldsInfoTests { @Test public void fieldCountReturnsNumberOfFields() { - var namespaceTypeInfo = new FieldsInfo<>(P.orderedMap( - Map.entry("a", Types.INT), - Map.entry("b", Types.STRING) - )); + var namespaceTypeInfo = FieldsInfo.of( + new FieldInfo<>("a", Types.INT), + new FieldInfo<>("b", Types.STRING) + ); var result = namespaceTypeInfo.fieldCount(); @@ -24,10 +21,10 @@ public class FieldsInfoTests { @Test public void fieldIndexReturnsIndexOfFieldInMap() { - var namespaceTypeInfo = new FieldsInfo<>(P.orderedMap( - Map.entry("a", Types.INT), - Map.entry("b", Types.STRING) - )); + var namespaceTypeInfo = FieldsInfo.of( + new FieldInfo<>("a", Types.INT), + new FieldInfo<>("b", Types.STRING) + ); var result = namespaceTypeInfo.fieldIndex("b"); @@ -36,10 +33,10 @@ public class FieldsInfoTests { @Test public void whenFieldDoesNotExistThenFieldIndexThrowsError() { - var namespaceTypeInfo = new FieldsInfo<>(P.orderedMap( - Map.entry("a", Types.INT), - Map.entry("b", Types.STRING) - )); + var namespaceTypeInfo = FieldsInfo.of( + new FieldInfo<>("a", Types.INT), + new FieldInfo<>("b", Types.STRING) + ); var error = assertThrows( NoSuchFieldInternalError.class, -- cgit v1.2.3