summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-06-13 21:06:18 +0100
committerMichael Williamson <mike@zwobble.org>2026-06-13 21:06:18 +0100
commit90c51ca7150dc5acc1c26497889fa3691cc05f37 (patch)
tree7692622daa921af62ce07d04854496e8297b1b86 /src/main/java
parent1d7d239c1f21058792bb888917957bc8f0d1ce22 (diff)
Extract typeCheckFieldDefinitions()
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java36
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(