summaryrefslogtreecommitdiff
path: root/ast/src/main/java
diff options
context:
space:
mode:
authorGravatar Uko Kokņevičs2024-08-18 23:01:58 +0800
committerGravatar Uko Kokņevičs2024-08-18 23:01:58 +0800
commit8565a173591e4748ac910b4b982dff96bb5dfd60 (patch)
treec96409057d2917eaee945e205803d9f9a740a3d5 /ast/src/main/java
parentBig Refactoring, added support for comments (diff)
downloadorang-8565a173591e4748ac910b4b982dff96bb5dfd60.tar.gz
orang-8565a173591e4748ac910b4b982dff96bb5dfd60.tar.xz
orang-8565a173591e4748ac910b4b982dff96bb5dfd60.zip
Added Nothing/empty-tuple arguments
Diffstat (limited to 'ast/src/main/java')
-rw-r--r--ast/src/main/java/lv/enes/orang/ast/ArgSpec.java26
-rw-r--r--ast/src/main/java/lv/enes/orang/ast/DefSpec.java2
-rw-r--r--ast/src/main/java/lv/enes/orang/ast/ExpressionVisitor.java1
-rw-r--r--ast/src/main/java/lv/enes/orang/ast/FnExpression.java2
-rw-r--r--ast/src/main/java/lv/enes/orang/ast/VoidExpression.java14
5 files changed, 43 insertions, 2 deletions
diff --git a/ast/src/main/java/lv/enes/orang/ast/ArgSpec.java b/ast/src/main/java/lv/enes/orang/ast/ArgSpec.java
new file mode 100644
index 0000000..e167e8f
--- /dev/null
+++ b/ast/src/main/java/lv/enes/orang/ast/ArgSpec.java
@@ -0,0 +1,26 @@
1package lv.enes.orang.ast;
2
3public class ArgSpec {
4 public final Type type;
5 public final String name;
6
7 private static final ArgSpec NOTHING = new ArgSpec(Type.NOTHING, null);
8
9 public static ArgSpec nothing() {
10 return NOTHING;
11 }
12
13 public static ArgSpec named(String name) {
14 return new ArgSpec(Type.NAMED, name);
15 }
16
17 private ArgSpec(Type type, String name) {
18 this.type = type;
19 this.name = name;
20 }
21
22 public enum Type {
23 NOTHING,
24 NAMED,
25 }
26}
diff --git a/ast/src/main/java/lv/enes/orang/ast/DefSpec.java b/ast/src/main/java/lv/enes/orang/ast/DefSpec.java
index 2233d3f..5e6cc68 100644
--- a/ast/src/main/java/lv/enes/orang/ast/DefSpec.java
+++ b/ast/src/main/java/lv/enes/orang/ast/DefSpec.java
@@ -2,5 +2,5 @@ package lv.enes.orang.ast;
2 2
3import java.util.List; 3import java.util.List;
4 4
5public record DefSpec(String name, List<String> args) { 5public record DefSpec(String name, List<ArgSpec> args) {
6} 6}
diff --git a/ast/src/main/java/lv/enes/orang/ast/ExpressionVisitor.java b/ast/src/main/java/lv/enes/orang/ast/ExpressionVisitor.java
index ddb1157..70f8a5e 100644
--- a/ast/src/main/java/lv/enes/orang/ast/ExpressionVisitor.java
+++ b/ast/src/main/java/lv/enes/orang/ast/ExpressionVisitor.java
@@ -19,4 +19,5 @@ public interface ExpressionVisitor<R, E extends OrangException> {
19 R visitStringLiteral(StringLiteral expr) throws E; 19 R visitStringLiteral(StringLiteral expr) throws E;
20 R visitUnaryExpression(UnaryExpression expr) throws E; 20 R visitUnaryExpression(UnaryExpression expr) throws E;
21 R visitVariable(VariableExpression expr) throws E; 21 R visitVariable(VariableExpression expr) throws E;
22 R visitVoidExpression() throws E;
22} 23}
diff --git a/ast/src/main/java/lv/enes/orang/ast/FnExpression.java b/ast/src/main/java/lv/enes/orang/ast/FnExpression.java
index 68f43af..0bf322c 100644
--- a/ast/src/main/java/lv/enes/orang/ast/FnExpression.java
+++ b/ast/src/main/java/lv/enes/orang/ast/FnExpression.java
@@ -3,7 +3,7 @@ package lv.enes.orang.ast;
3import lv.enes.orang.utils.NonEmptyList; 3import lv.enes.orang.utils.NonEmptyList;
4import lv.enes.orang.core.OrangException; 4import lv.enes.orang.core.OrangException;
5 5
6public record FnExpression(NonEmptyList<String> args, Expression body) implements Expression { 6public record FnExpression(NonEmptyList<ArgSpec> args, Expression body) implements Expression {
7 @Override 7 @Override
8 public <R, E extends OrangException> R accept(ExpressionVisitor<R, E> visitor) throws E { 8 public <R, E extends OrangException> R accept(ExpressionVisitor<R, E> visitor) throws E {
9 return visitor.visitFnExpression(this); 9 return visitor.visitFnExpression(this);
diff --git a/ast/src/main/java/lv/enes/orang/ast/VoidExpression.java b/ast/src/main/java/lv/enes/orang/ast/VoidExpression.java
new file mode 100644
index 0000000..39d164d
--- /dev/null
+++ b/ast/src/main/java/lv/enes/orang/ast/VoidExpression.java
@@ -0,0 +1,14 @@
1package lv.enes.orang.ast;
2
3import lv.enes.orang.core.OrangException;
4
5public final class VoidExpression implements Expression {
6 public static final VoidExpression INSTANCE = new VoidExpression();
7
8 private VoidExpression() {}
9
10 @Override
11 public <R, E extends OrangException> R accept(ExpressionVisitor<R, E> visitor) throws E {
12 return visitor.visitVoidExpression();
13 }
14}