aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-09-30 10:11:07 +0100
committerMichael Williamson <mike@zwobble.org>2023-09-30 10:11:07 +0100
commit5c64771c085d2064c79bcd212f513f5a211146eb (patch)
tree8a6f1df96a368c9046ef387e41710bd45de182f8 /src/main/java
parentc788d108ea1196a83d1961a6597976324da36cf9 (diff)
Add untyped sum type node
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ast/untyped/UntypedNamespaceStatementNode.java2
-rw-r--r--src/main/java/org/shedlang/compiler/ast/untyped/UntypedSumTypeDefinitionNode.java10
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java7
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java7
4 files changed, 25 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedNamespaceStatementNode.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedNamespaceStatementNode.java
index 16eafcf9..ac229649 100644
--- a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedNamespaceStatementNode.java
+++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedNamespaceStatementNode.java
@@ -1,4 +1,4 @@
package org.shedlang.compiler.ast.untyped;
-public sealed interface UntypedNamespaceStatementNode extends UntypedNode permits UntypedAssignNode, UntypedFunctionDefinitionNode, UntypedStructDefinitionNode {
+public sealed interface UntypedNamespaceStatementNode extends UntypedNode permits UntypedAssignNode, UntypedFunctionDefinitionNode, UntypedStructDefinitionNode, UntypedSumTypeDefinitionNode {
}
diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedSumTypeDefinitionNode.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedSumTypeDefinitionNode.java
new file mode 100644
index 00000000..3a49f46e
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedSumTypeDefinitionNode.java
@@ -0,0 +1,10 @@
+package org.shedlang.compiler.ast.untyped;
+
+import org.shedlang.compiler.sources.Source;
+
+public record UntypedSumTypeDefinitionNode(
+ String name,
+ UntypedTypeLevelExpressionNode variants,
+ Source source
+) implements UntypedNamespaceStatementNode {
+}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java b/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java
index a6cfde24..27be00db 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/DeclaredVariables.java
@@ -78,6 +78,13 @@ class DeclaredVariables {
VariableType.CONSTANT,
struct.source()
));
+
+ case UntypedSumTypeDefinitionNode sumType ->
+ variables.plus(new DeclaredVariable(
+ sumType.name(),
+ VariableType.CONSTANT,
+ sumType.source()
+ ));
};
}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index 84e87182..7c3741e2 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -745,6 +745,10 @@ public class TypeChecker {
Set.of()
);
}
+
+ case UntypedSumTypeDefinitionNode untypedSumTypeDefinition -> {
+ throw new UnsupportedOperationException("TODO");
+ }
}
}
@@ -790,6 +794,9 @@ public class TypeChecker {
case UntypedStructDefinitionNode structDefinition ->
typeCheckStepsStructDefinition(structDefinition);
+
+ case UntypedSumTypeDefinitionNode sumTypeDefinition ->
+ throw new UnsupportedOperationException("TODO");
};
}