diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-04-28 23:36:24 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-04-28 23:36:24 +0100 |
| commit | 4b64acb0313807b766a60a402843218957479ed5 (patch) | |
| tree | 5760bf33fbacd32738af26b3e0e9aebd467875e1 /src/main/java | |
| parent | ceef673a9681db167b4a47053f78cc9ee05d0ffb (diff) | |
Add SumType
Diffstat (limited to 'src/main/java')
3 files changed, 28 insertions, 11 deletions
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<Type> 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 { } |
