From 5dd379c50eb0a9eff9ab87c7edf9cb10c20529e0 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 28 Sep 2023 11:10:19 +0100 Subject: Add struct type info during type checking --- .../TypeCheckerStructDefinitionTests.java | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStructDefinitionTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStructDefinitionTests.java index f8cb0fc5..325f7ea7 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStructDefinitionTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStructDefinitionTests.java @@ -83,6 +83,31 @@ public class TypeCheckerStructDefinitionTests { ); } + @Test + public void typesOfFieldsAreStored() { + var untyped = UntypedStructDefinitionNode.builder() + .withName("ExampleStruct") + .addField(Untyped.structFieldDefinition("b", Untyped.typeLevelReference("Bool"))) + .addField(Untyped.structFieldDefinition("a", Untyped.typeLevelReference("Int"))) + .build(); + var context = TypeCheckerContext.EMPTY + .enterGlobal(P.map( + Map.entry("Bool", Types.metaType(Types.BOOL)), + Map.entry("Int", Types.metaType(Types.INT)) + )); + + var typed = typeCheckNamespaceStatement(untyped, context); + + assertThat( + typed.context().structTypeInfo().get(Types.struct(NAMESPACE_NAME, "ExampleStruct")), + // TODO: builder for OrderedPMap + has("fields", x -> x.fields().entrySet(), isSequence( + equalTo(Map.entry("b", Types.BOOL)), + equalTo(Map.entry("a", Types.INT)) + )) + ); + } + private static TypeCheckerResult typeCheckNamespaceStatement( UntypedNamespaceStatementNode untyped, TypeCheckerContext context -- cgit v1.2.3