diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-06-13 21:06:18 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-06-13 21:06:18 +0100 |
| commit | 90c51ca7150dc5acc1c26497889fa3691cc05f37 (patch) | |
| tree | 7692622daa921af62ce07d04854496e8297b1b86 /src | |
| parent | 1d7d239c1f21058792bb888917957bc8f0d1ce22 (diff) | |
Extract typeCheckFieldDefinitions()
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java | 36 |
1 files changed, 25 insertions, 11 deletions
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<TypedStructFieldDefinitionNode> typedFieldNodes, + List<Field> fields + ) { + } + + private static TypeCheckFieldDefinitionsResult typeCheckFieldDefinitions( + List<UntypedStructFieldDefinitionNode> untypedFields, + TypeCheckerNamespaceContext context + ) { var typedFields = new ArrayList<TypedStructFieldDefinitionNode>(); var fields = new ArrayList<Field>(); - 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( |
