From e49744ff95e24ad4282c29634fa58a4241c66c82 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 28 Apr 2026 23:43:29 +0100 Subject: Type check sum definitions --- .../compiler/typechecker/TypeChecker.java | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'src/main') 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(); + 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 typeCheckMetaType( -- cgit v1.2.3