aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-26 11:25:10 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-26 11:25:10 +0000
commitdf6ec9c9606184b472fc3d7278e2a50fb32c1479 (patch)
treebc98746c38bd166de4b6e0d90a14a58483899f65 /src/main/java
parent5b1568636d4b6859d0c65f994cfcac32a337f31e (diff)
Parse absent type-level args
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ast/untyped/UntypedCallNode.java17
-rw-r--r--src/main/java/org/shedlang/compiler/parser/Parser.java8
2 files changed, 23 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedCallNode.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedCallNode.java
index c5b2c241..e9624263 100644
--- a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedCallNode.java
+++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedCallNode.java
@@ -3,8 +3,12 @@ package org.shedlang.compiler.ast.untyped;
import org.shedlang.compiler.sources.Source;
import org.shedlang.compiler.sources.Sources;
+import java.util.List;
+import java.util.Optional;
+
public record UntypedCallNode(
UntypedExpressionNode receiver,
+ Optional<List<UntypedTypeLevelExpressionNode>> typeLevelArgs,
UntypedArgsNode args,
boolean hasEffects,
Source source
@@ -12,6 +16,7 @@ public record UntypedCallNode(
public static Builder builder() {
return new Builder(
new UntypedReferenceNode("f", Sources.NULL),
+ Optional.empty(),
UntypedArgsNode.builder(),
false
);
@@ -19,16 +24,24 @@ public record UntypedCallNode(
public record Builder(
UntypedExpressionNode receiver,
+ Optional<List<UntypedTypeLevelExpressionNode>> typeLevelArgs,
UntypedArgsNode.Builder args,
boolean hasEffects
) {
public UntypedCallNode build() {
- return new UntypedCallNode(receiver, args.build(), hasEffects, Sources.NULL);
+ return new UntypedCallNode(
+ receiver,
+ typeLevelArgs,
+ args.build(),
+ hasEffects,
+ Sources.NULL
+ );
}
public Builder withReceiver(UntypedReferenceNode receiver) {
return new Builder(
receiver,
+ this.typeLevelArgs,
this.args,
this.hasEffects
);
@@ -37,6 +50,7 @@ public record UntypedCallNode(
public Builder addNamedArg(UntypedNamedArgNode arg) {
return new Builder(
this.receiver,
+ this.typeLevelArgs,
this.args.addNamedArg(arg),
this.hasEffects
);
@@ -45,6 +59,7 @@ public record UntypedCallNode(
public Builder withHasEffects(boolean hasEffects) {
return new Builder(
this.receiver,
+ this.typeLevelArgs,
this.args,
hasEffects
);
diff --git a/src/main/java/org/shedlang/compiler/parser/Parser.java b/src/main/java/org/shedlang/compiler/parser/Parser.java
index 3c91c561..96b06c50 100644
--- a/src/main/java/org/shedlang/compiler/parser/Parser.java
+++ b/src/main/java/org/shedlang/compiler/parser/Parser.java
@@ -218,7 +218,13 @@ public class Parser {
var end = tokens.position();
var source = start.to(end);
- return new UntypedCallNode(left, args, hasEffects, source);
+ return new UntypedCallNode(
+ left,
+ Optional.empty(),
+ args,
+ hasEffects,
+ source
+ );
}
}