summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-04-28 23:27:17 +0100
committerMichael Williamson <mike@zwobble.org>2026-04-28 23:27:17 +0100
commit8f9f4903d52646ee3a87c4b435c008beac4f13b9 (patch)
treef8612f226453f3bded18b9ca82f35ccf49f6fb78 /src
parent2d9d692f3b89fa25a5e8b761118d517e2e47f4f1 (diff)
Add UntypedSumDefinitionNode
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedNamespaceStatementNode.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedSumDefinitionNode.java12
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java20
3 files changed, 33 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedNamespaceStatementNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedNamespaceStatementNode.java
index c7b4cac..cab5156 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedNamespaceStatementNode.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedNamespaceStatementNode.java
@@ -1,4 +1,4 @@
package org.zwobble.hobgoblin.compiler.ast.untyped;
-public sealed interface UntypedNamespaceStatementNode extends UntypedNode permits UntypedStructDefinitionNode {
+public sealed interface UntypedNamespaceStatementNode extends UntypedNode permits UntypedStructDefinitionNode, UntypedSumDefinitionNode {
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedSumDefinitionNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedSumDefinitionNode.java
new file mode 100644
index 0000000..7969806
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedSumDefinitionNode.java
@@ -0,0 +1,12 @@
+package org.zwobble.hobgoblin.compiler.ast.untyped;
+
+import org.zwobble.hobgoblin.compiler.sources.Source;
+
+import java.util.List;
+
+public record UntypedSumDefinitionNode(
+ String name,
+ List<UntypedTypeLevelExpressionNode> variants,
+ Source source
+) implements UntypedNamespaceStatementNode {
+}
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 7678f94..bb8c9d3 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
@@ -41,6 +41,9 @@ public class TypeChecker {
switch (untyped) {
case UntypedStructDefinitionNode untypedStructDefinition ->
declareStructDefinition(untypedStructDefinition, context);
+
+ case UntypedSumDefinitionNode untypedSumDefinition ->
+ declareSumDefinition(untypedSumDefinition, context);
}
}
@@ -51,6 +54,9 @@ public class TypeChecker {
return switch (untyped) {
case UntypedStructDefinitionNode untypedStructDefinition ->
defineStructDefinition(untypedStructDefinition, context);
+
+ case UntypedSumDefinitionNode untypedSumDefinition ->
+ defineSumDefinition(untypedSumDefinition, context);
};
}
@@ -64,6 +70,13 @@ public class TypeChecker {
context.define(untyped.name(), new TypeLevelValueType(structType));
}
+ private static void declareSumDefinition(
+ UntypedSumDefinitionNode untyped,
+ TypeCheckerNamespaceContext context
+ ) {
+ throw new UnsupportedOperationException("TODO");
+ }
+
private static TypedStructDefinitionNode defineStructDefinition(
UntypedStructDefinitionNode untyped,
TypeCheckerNamespaceContext context
@@ -87,6 +100,13 @@ public class TypeChecker {
);
}
+ private static TypedNamespaceStatementNode defineSumDefinition(
+ UntypedSumDefinitionNode untyped,
+ TypeCheckerNamespaceContext context
+ ) {
+ throw new UnsupportedOperationException("TODO");
+ }
+
private static TypedTypeLevelExpressionNode<Type> typeCheckMetaType(
UntypedTypeLevelExpressionNode untyped,
TypeCheckerNamespaceContext context