From 90c51ca7150dc5acc1c26497889fa3691cc05f37 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 13 Jun 2026 21:06:18 +0100 Subject: Extract typeCheckFieldDefinitions() --- .../compiler/typechecker/TypeChecker.java | 36 +++++++++++++++------- 1 file changed, 25 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java index 5dce0f5..7ec336a 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java @@ -107,27 +107,41 @@ public class TypeChecker { ) { var structType = (StructType) lookupMetaType(untyped.name(), untyped.source(), context); + var typeCheckedFieldDefinitions = typeCheckFieldDefinitions(untyped.fields(), context); + + context.defineStructType(structType, typeCheckedFieldDefinitions.fields()); + + return new TypedStructDefinitionNode( + structType, + typeCheckedFieldDefinitions.typedFieldNodes(), + untyped.docComment(), + untyped.source() + ); + } + + private record TypeCheckFieldDefinitionsResult( + List typedFieldNodes, + List fields + ) { + } + + private static TypeCheckFieldDefinitionsResult typeCheckFieldDefinitions( + List untypedFields, + TypeCheckerNamespaceContext context + ) { var typedFields = new ArrayList(); var fields = new ArrayList(); - for (var untypedField : untyped.fields()) { + for (var untypedField : untypedFields) { var fieldType = typeCheckMetaType(untypedField.type(), context); var typedField = new TypedStructFieldDefinitionNode( untypedField.name(), fieldType, - untyped.source() + untypedField.source() ); typedFields.add(typedField); fields.add(new Field(untypedField.name(), fieldType.value())); } - - context.defineStructType(structType, fields); - - return new TypedStructDefinitionNode( - structType, - typedFields, - untyped.docComment(), - untyped.source() - ); + return new TypeCheckFieldDefinitionsResult(typedFields, fields); } private static void declareSumDefinition( -- cgit v1.2.3