summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-04-28 23:36:24 +0100
committerMichael Williamson <mike@zwobble.org>2026-04-28 23:36:24 +0100
commit4b64acb0313807b766a60a402843218957479ed5 (patch)
tree5760bf33fbacd32738af26b3e0e9aebd467875e1 /src/main/java
parentceef673a9681db167b4a47053f78cc9ee05d0ffb (diff)
Add SumType
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java29
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/types/SumType.java8
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/types/Type.java2
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 {
}