From 5c64771c085d2064c79bcd212f513f5a211146eb Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 30 Sep 2023 10:11:07 +0100 Subject: Add untyped sum type node --- .../compiler/ast/untyped/UntypedNamespaceStatementNode.java | 2 +- .../compiler/ast/untyped/UntypedSumTypeDefinitionNode.java | 10 ++++++++++ .../org/shedlang/compiler/typechecker/DeclaredVariables.java | 7 +++++++ .../java/org/shedlang/compiler/typechecker/TypeChecker.java | 7 +++++++ 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/shedlang/compiler/ast/untyped/UntypedSumTypeDefinitionNode.java (limited to 'src/main/java') 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"); }; } -- cgit v1.2.3