diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-03 19:56:31 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-03 19:56:31 +0100 |
| commit | 777935c03a692b9f21f73b6a5fd3a49f49572374 (patch) | |
| tree | 63fa562fff587704f847e15f7e8c8d11e949bd1e /src/main/java | |
| parent | 083185a1acd954b4876ccb1af275aaf09239fa74 (diff) | |
Parse val as namespace statement
Diffstat (limited to 'src/main/java')
4 files changed, 11 insertions, 4 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 deb06dce..9e4a9395 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 UntypedFunctionDefinitionNode { +public sealed interface UntypedNamespaceStatementNode extends UntypedNode permits UntypedFunctionDefinitionNode, UntypedValNode { } diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedValNode.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedValNode.java index 96bbcb42..7f9926ea 100644 --- a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedValNode.java +++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedValNode.java @@ -6,5 +6,5 @@ public record UntypedValNode( UntypedTargetNode target, UntypedExpressionNode expression, Source source -) implements UntypedFunctionStatementNode { +) implements UntypedFunctionStatementNode, UntypedNamespaceStatementNode { } diff --git a/src/main/java/org/shedlang/compiler/parser/Parser.java b/src/main/java/org/shedlang/compiler/parser/Parser.java index 14d9fc6c..7dd47250 100644 --- a/src/main/java/org/shedlang/compiler/parser/Parser.java +++ b/src/main/java/org/shedlang/compiler/parser/Parser.java @@ -153,7 +153,11 @@ public class Parser { static UntypedNamespaceStatementNode parseNamespaceStatement(TokenIterator<TokenType> tokens) { return switch (tokens.peek().tokenType()) { - case KEYWORD_FUN -> parseFunctionDefinition(tokens); + case KEYWORD_FUN -> + parseFunctionDefinition(tokens); + + case KEYWORD_VAL -> + parseVal(tokens); default -> throw new UnexpectedTokenException("namespace statement", tokens.peek()); @@ -287,7 +291,7 @@ public class Parser { return new UntypedTargetNode.Variable(name, source); } - private static UntypedFunctionStatementNode parseVal(TokenIterator<TokenType> tokens) { + private static UntypedValNode parseVal(TokenIterator<TokenType> tokens) { var start = tokens.position(); tokens.skip(TokenType.KEYWORD_VAL); diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java index e7688898..489f2c3e 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -358,6 +358,9 @@ public class TypeChecker { return switch (untyped) { case UntypedFunctionDefinitionNode functionDefinition -> typeCheckFunctionDefinition(functionDefinition, context); + + case UntypedValNode val -> + throw new UnsupportedOperationException("TODO"); }; } |
