From 777935c03a692b9f21f73b6a5fd3a49f49572374 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 3 Jul 2023 19:56:31 +0100 Subject: Parse val as namespace statement --- .../compiler/ast/untyped/UntypedNamespaceStatementNode.java | 2 +- .../java/org/shedlang/compiler/ast/untyped/UntypedValNode.java | 2 +- src/main/java/org/shedlang/compiler/parser/Parser.java | 8 ++++++-- src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 3 +++ 4 files changed, 11 insertions(+), 4 deletions(-) (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 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 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 tokens) { + private static UntypedValNode parseVal(TokenIterator 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"); }; } -- cgit v1.2.3