diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-09-30 10:11:07 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-09-30 10:11:07 +0100 |
| commit | 5c64771c085d2064c79bcd212f513f5a211146eb (patch) | |
| tree | 8a6f1df96a368c9046ef387e41710bd45de182f8 /src/main/java | |
| parent | c788d108ea1196a83d1961a6597976324da36cf9 (diff) | |
Add untyped sum type node
Diffstat (limited to 'src/main/java')
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"); }; } |
