summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-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