aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-03 19:56:31 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-03 19:56:31 +0100
commit777935c03a692b9f21f73b6a5fd3a49f49572374 (patch)
tree63fa562fff587704f847e15f7e8c8d11e949bd1e /src/main/java
parent083185a1acd954b4876ccb1af275aaf09239fa74 (diff)
Parse val as namespace statement
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/UntypedValNode.java2
-rw-r--r--src/main/java/org/shedlang/compiler/parser/Parser.java8
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java3
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");
};
}