summaryrefslogtreecommitdiff
path: root/ast
diff options
context:
space:
mode:
Diffstat (limited to 'ast')
-rw-r--r--ast/src/main/java/lv/enes/orang/ast/ArgSpec.java38
-rw-r--r--ast/src/main/java/lv/enes/orang/ast/ArgSpecIgnored.java13
-rw-r--r--ast/src/main/java/lv/enes/orang/ast/ArgSpecNamed.java11
-rw-r--r--ast/src/main/java/lv/enes/orang/ast/ArgSpecTuple.java12
-rw-r--r--ast/src/main/java/lv/enes/orang/ast/ArgSpecVisitor.java13
-rw-r--r--ast/src/main/java/lv/enes/orang/ast/EmptyTupleLiteral.java14
-rw-r--r--ast/src/main/java/lv/enes/orang/ast/ExpressionVisitor.java1
-rw-r--r--ast/src/main/java/lv/enes/orang/ast/TupleExpression.java5
8 files changed, 54 insertions, 53 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
index 8fa52be..fd1c8f9 100644
--- a/ast/src/main/java/lv/enes/orang/ast/ArgSpec.java
+++ b/ast/src/main/java/lv/enes/orang/ast/ArgSpec.java
@@ -1,39 +1,7 @@
1package lv.enes.orang.ast; 1package lv.enes.orang.ast;
2 2
3public sealed interface ArgSpec { 3import lv.enes.orang.core.OrangException;
4 enum Type {
5 IGNORED,
6 NOTHING,
7 NAMED,
8 }
9 4
10 Type getType(); 5public interface ArgSpec {
11 6 <R, E extends OrangException> R accept(ArgSpecVisitor<R, E> visitor) throws E;
12 static Ignored ignored() {
13 return Ignored.INSTANCE;
14 }
15
16 static Named named(String name) {
17 return new Named(name);
18 }
19
20 static Nothing nothing() {
21 return Nothing.INSTANCE;
22 }
23
24 final class Ignored implements ArgSpec {
25 public static final Ignored INSTANCE = new Ignored();
26 private Ignored() {}
27 @Override public Type getType() { return Type.IGNORED; }
28 }
29
30 record Named(String name) implements ArgSpec {
31 @Override public Type getType() { return Type.NAMED; }
32 }
33
34 final class Nothing implements ArgSpec {
35 public static final Nothing INSTANCE = new Nothing();
36 private Nothing() {}
37 @Override public Type getType() { return Type.NOTHING; }
38 }
39} 7}
diff --git a/ast/src/main/java/lv/enes/orang/ast/ArgSpecIgnored.java b/ast/src/main/java/lv/enes/orang/ast/ArgSpecIgnored.java
new file mode 100644
index 0000000..95ad114
--- /dev/null
+++ b/ast/src/main/java/lv/enes/orang/ast/ArgSpecIgnored.java
@@ -0,0 +1,13 @@
1package lv.enes.orang.ast;
2
3import lv.enes.orang.core.OrangException;
4
5public final class ArgSpecIgnored implements ArgSpec {
6 public static final ArgSpecIgnored INSTANCE = new ArgSpecIgnored();
7 private ArgSpecIgnored() {}
8
9 @Override
10 public <R, E extends OrangException> R accept(ArgSpecVisitor<R, E> visitor) throws E {
11 return visitor.visitIgnored();
12 }
13}
diff --git a/ast/src/main/java/lv/enes/orang/ast/ArgSpecNamed.java b/ast/src/main/java/lv/enes/orang/ast/ArgSpecNamed.java
new file mode 100644
index 0000000..7c83275
--- /dev/null
+++ b/ast/src/main/java/lv/enes/orang/ast/ArgSpecNamed.java
@@ -0,0 +1,11 @@
1package lv.enes.orang.ast;
2
3import lv.enes.orang.core.OrangException;
4
5public record ArgSpecNamed(String name) implements ArgSpec {
6 @Override
7 public <R, E extends OrangException> R accept(ArgSpecVisitor<R, E> visitor) throws E {
8 return visitor.visitNamed(this);
9 }
10}
11
diff --git a/ast/src/main/java/lv/enes/orang/ast/ArgSpecTuple.java b/ast/src/main/java/lv/enes/orang/ast/ArgSpecTuple.java
new file mode 100644
index 0000000..6703def
--- /dev/null
+++ b/ast/src/main/java/lv/enes/orang/ast/ArgSpecTuple.java
@@ -0,0 +1,12 @@
1package lv.enes.orang.ast;
2
3import lv.enes.orang.core.OrangException;
4
5import java.util.List;
6
7public record ArgSpecTuple(List<ArgSpec> children) implements ArgSpec {
8 @Override
9 public <R, E extends OrangException> R accept(ArgSpecVisitor<R, E> visitor) throws E {
10 return visitor.visitTuple(this);
11 }
12}
diff --git a/ast/src/main/java/lv/enes/orang/ast/ArgSpecVisitor.java b/ast/src/main/java/lv/enes/orang/ast/ArgSpecVisitor.java
new file mode 100644
index 0000000..33cb6d6
--- /dev/null
+++ b/ast/src/main/java/lv/enes/orang/ast/ArgSpecVisitor.java
@@ -0,0 +1,13 @@
1package lv.enes.orang.ast;
2
3import lv.enes.orang.core.OrangException;
4
5public interface ArgSpecVisitor<R, E extends OrangException> {
6 default R visit(ArgSpec argSpec) throws E {
7 return argSpec.accept(this);
8 }
9
10 R visitIgnored() throws E;
11 R visitNamed(ArgSpecNamed named) throws E;
12 R visitTuple(ArgSpecTuple tuple) throws E;
13}
diff --git a/ast/src/main/java/lv/enes/orang/ast/EmptyTupleLiteral.java b/ast/src/main/java/lv/enes/orang/ast/EmptyTupleLiteral.java
deleted file mode 100644
index a96580f..0000000
--- a/ast/src/main/java/lv/enes/orang/ast/EmptyTupleLiteral.java
+++ /dev/null
@@ -1,14 +0,0 @@
1package lv.enes.orang.ast;
2
3import lv.enes.orang.core.OrangException;
4
5public final class EmptyTupleLiteral implements Expression {
6 public static final EmptyTupleLiteral INSTANCE = new EmptyTupleLiteral();
7
8 private EmptyTupleLiteral() {}
9
10 @Override
11 public <R, E extends OrangException> R accept(ExpressionVisitor<R, E> visitor) throws E {
12 return visitor.visitEmptyTupleExpression();
13 }
14}
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 c32b429..226b340 100644
--- a/ast/src/main/java/lv/enes/orang/ast/ExpressionVisitor.java
+++ b/ast/src/main/java/lv/enes/orang/ast/ExpressionVisitor.java
@@ -12,7 +12,6 @@ public interface ExpressionVisitor<R, E extends OrangException> {
12 R visitBinaryExpression(BinaryExpression expr) throws E; 12 R visitBinaryExpression(BinaryExpression expr) throws E;
13 R visitCallExpression(CallExpression expr) throws E; 13 R visitCallExpression(CallExpression expr) throws E;
14 R visitDoExpression(DoExpression expr) throws E; 14 R visitDoExpression(DoExpression expr) throws E;
15 R visitEmptyTupleExpression() throws E;
16 R visitFnExpression(FnExpression expr) throws E; 15 R visitFnExpression(FnExpression expr) throws E;
17 R visitIfElseExpression(IfElseExpression expr) throws E; 16 R visitIfElseExpression(IfElseExpression expr) throws E;
18 R visitIntLiteral(IntLiteral expr) throws E; 17 R visitIntLiteral(IntLiteral expr) throws E;
diff --git a/ast/src/main/java/lv/enes/orang/ast/TupleExpression.java b/ast/src/main/java/lv/enes/orang/ast/TupleExpression.java
index 9df418d..84f2ceb 100644
--- a/ast/src/main/java/lv/enes/orang/ast/TupleExpression.java
+++ b/ast/src/main/java/lv/enes/orang/ast/TupleExpression.java
@@ -1,11 +1,10 @@
1package lv.enes.orang.ast; 1package lv.enes.orang.ast;
2 2
3import lv.enes.orang.core.OrangException; 3import lv.enes.orang.core.OrangException;
4import lv.enes.orang.utils.NonEmptyList;
5 4
6public record TupleExpression(NonEmptyList<Expression> children) implements Expression { 5import java.util.List;
7 // assert children.size() >= 2
8 6
7public record TupleExpression(List<Expression> children) implements Expression {
9 @Override 8 @Override
10 public <R, E extends OrangException> R accept(ExpressionVisitor<R, E> visitor) throws E { 9 public <R, E extends OrangException> R accept(ExpressionVisitor<R, E> visitor) throws E {
11 return visitor.visitTupleExpression(this); 10 return visitor.visitTupleExpression(this);