diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-04-28 23:43:29 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-04-28 23:43:29 +0100 |
| commit | e49744ff95e24ad4282c29634fa58a4241c66c82 (patch) | |
| tree | 4f5969e73ddd6c9871a525bb62fdee9e574852eb /src/main/java/org/zwobble | |
| parent | 0df2137ae4f03069398f6417d46d9a6d5bea1ce2 (diff) | |
Type check sum definitions
Diffstat (limited to 'src/main/java/org/zwobble')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java | 22 |
1 files changed, 20 insertions, 2 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 84cb6aa..c713c70 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java @@ -97,14 +97,32 @@ public class TypeChecker { UntypedSumDefinitionNode untyped, TypeCheckerNamespaceContext context ) { - throw new UnsupportedOperationException("TODO"); + var sumType = new SumType(context.namespaceName(), untyped.name()); + // TODO: tidy up declare vs define + context.declare(untyped.name()); + context.define(untyped.name(), new TypeLevelValueType(sumType)); } private static TypedNamespaceStatementNode defineSumDefinition( UntypedSumDefinitionNode untyped, TypeCheckerNamespaceContext context ) { - throw new UnsupportedOperationException("TODO"); + var sumType = (SumType) lookupMetaType(untyped.name(), untyped.source(), context); + + var typedVariants = new ArrayList<TypedSumVariantDefinitionNode>(); + for (var untypedVariant : untyped.variants()) { + var typedVariant = new TypedSumVariantDefinitionNode( + typeCheckMetaType(untypedVariant.type(), context), + untyped.source() + ); + typedVariants.add(typedVariant); + } + + return new TypedSumDefinitionNode( + sumType, + typedVariants, + untyped.source() + ); } private static TypedTypeLevelExpressionNode<Type> typeCheckMetaType( |
