From 4b64acb0313807b766a60a402843218957479ed5 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 28 Apr 2026 23:36:24 +0100 Subject: Add SumType --- .../generators/javatypes/JavaTypesGenerator.java | 29 ++++++++++++++-------- .../zwobble/hobgoblin/compiler/types/SumType.java | 8 ++++++ .../org/zwobble/hobgoblin/compiler/types/Type.java | 2 +- 3 files changed, 28 insertions(+), 11 deletions(-) create mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/types/SumType.java (limited to 'src/main') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java index c638763..71fdba9 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java @@ -11,9 +11,7 @@ import org.zwobble.hobgoblin.compiler.output.java.ast.JavaRecordComponent; import org.zwobble.hobgoblin.compiler.output.java.ast.JavaRecordDeclaration; import org.zwobble.hobgoblin.compiler.output.java.ast.JavaCompilationUnit; import org.zwobble.hobgoblin.compiler.output.java.ast.JavaTypeRef; -import org.zwobble.hobgoblin.compiler.types.NamespaceName; -import org.zwobble.hobgoblin.compiler.types.StructType; -import org.zwobble.hobgoblin.compiler.types.Type; +import org.zwobble.hobgoblin.compiler.types.*; import java.io.File; import java.io.IOException; @@ -79,12 +77,23 @@ public class JavaTypesGenerator implements Generator { private JavaTypeRef generateTypeRef(TypedTypeLevelExpressionNode typeNode) { var type = typeNode.value(); - if (type instanceof StructType structType) { - return new JavaTypeRef(namespaceToJavaPackageParts(structType.namespaceName()), structType.name()); - } else if (type.equals(BuiltinTypes.INT_32)) { - return new JavaTypeRef(List.of(), "int"); - } else { - throw new UnsupportedOperationException("TODO"); - } + return switch (type) { + case StructType structType -> + new JavaTypeRef(namespaceToJavaPackageParts(structType.namespaceName()), structType.name()); + + case SumType sumType -> + new JavaTypeRef(namespaceToJavaPackageParts(sumType.namespaceName()), sumType.name()); + + case ScalarType scalarType -> { + if (type.equals(BuiltinTypes.INT_32)) { + yield new JavaTypeRef(List.of(), "int"); + } else { + throw new UnsupportedOperationException("TODO"); + } + } + + case TypeLevelValueType typeLevelValueType -> + throw new UnsupportedOperationException("TODO"); + }; } } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/SumType.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/SumType.java new file mode 100644 index 0000000..2517b6a --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/SumType.java @@ -0,0 +1,8 @@ +package org.zwobble.hobgoblin.compiler.types; + +public record SumType(NamespaceName namespaceName, String name) implements Type { + @Override + public String describe() { + return namespaceName.toString() + "." + name; + } +} diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/Type.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/Type.java index f7b6833..bb3f375 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/types/Type.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/Type.java @@ -1,4 +1,4 @@ package org.zwobble.hobgoblin.compiler.types; -public sealed interface Type extends TypeLevelValue permits ScalarType, StructType, TypeLevelValueType { +public sealed interface Type extends TypeLevelValue permits ScalarType, StructType, SumType, TypeLevelValueType { } -- cgit v1.2.3