From 8565a173591e4748ac910b4b982dff96bb5dfd60 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Sun, 18 Aug 2024 23:01:58 +0800 Subject: Added Nothing/empty-tuple arguments --- ast/src/main/java/lv/enes/orang/ast/ArgSpec.java | 26 ++++++++++++++++++++++ ast/src/main/java/lv/enes/orang/ast/DefSpec.java | 2 +- .../java/lv/enes/orang/ast/ExpressionVisitor.java | 1 + .../main/java/lv/enes/orang/ast/FnExpression.java | 2 +- .../java/lv/enes/orang/ast/VoidExpression.java | 14 ++++++++++++ 5 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 ast/src/main/java/lv/enes/orang/ast/ArgSpec.java create mode 100644 ast/src/main/java/lv/enes/orang/ast/VoidExpression.java (limited to 'ast/src/main/java/lv') 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 @@ +package lv.enes.orang.ast; + +public class ArgSpec { + public final Type type; + public final String name; + + private static final ArgSpec NOTHING = new ArgSpec(Type.NOTHING, null); + + public static ArgSpec nothing() { + return NOTHING; + } + + public static ArgSpec named(String name) { + return new ArgSpec(Type.NAMED, name); + } + + private ArgSpec(Type type, String name) { + this.type = type; + this.name = name; + } + + public enum Type { + NOTHING, + NAMED, + } +} 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; import java.util.List; -public record DefSpec(String name, List args) { +public record DefSpec(String name, List args) { } 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 visitStringLiteral(StringLiteral expr) throws E; R visitUnaryExpression(UnaryExpression expr) throws E; R visitVariable(VariableExpression expr) throws E; + R visitVoidExpression() throws E; } 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; import lv.enes.orang.utils.NonEmptyList; import lv.enes.orang.core.OrangException; -public record FnExpression(NonEmptyList args, Expression body) implements Expression { +public record FnExpression(NonEmptyList args, Expression body) implements Expression { @Override public R accept(ExpressionVisitor visitor) throws E { 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 @@ +package lv.enes.orang.ast; + +import lv.enes.orang.core.OrangException; + +public final class VoidExpression implements Expression { + public static final VoidExpression INSTANCE = new VoidExpression(); + + private VoidExpression() {} + + @Override + public R accept(ExpressionVisitor visitor) throws E { + return visitor.visitVoidExpression(); + } +} -- cgit v1.2.3