aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-07 19:29:46 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-07 19:30:06 +0100
commitf613e2b150cbe3a0bb7be56c2cc5406f6ef89918 (patch)
tree2685fd84aa1d12e55a218a0551544a14a3932a74 /src/main/java
parentea029c89aff87d3d4b352a495d06b1fe67ec4432 (diff)
Add AST for function definition
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ast/UntypedFunctionDefinitionNode.java14
-rw-r--r--src/main/java/org/shedlang/compiler/ast/UntypedNamespaceStatementNode.java4
-rw-r--r--src/main/java/org/shedlang/compiler/ast/UntypedParamNode.java10
-rw-r--r--src/main/java/org/shedlang/compiler/ast/UntypedParamsNode.java12
4 files changed, 40 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/ast/UntypedFunctionDefinitionNode.java b/src/main/java/org/shedlang/compiler/ast/UntypedFunctionDefinitionNode.java
new file mode 100644
index 00000000..395a5f4a
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/ast/UntypedFunctionDefinitionNode.java
@@ -0,0 +1,14 @@
+package org.shedlang.compiler.ast;
+
+import org.shedlang.compiler.sources.Source;
+
+import java.util.Optional;
+
+public record UntypedFunctionDefinitionNode(
+ String name,
+ UntypedParamsNode params,
+ Optional<UntypedTypeLevelExpressionNode> effect,
+ UntypedTypeLevelExpressionNode returnType,
+ Source source
+) implements UntypedNamespaceStatementNode {
+}
diff --git a/src/main/java/org/shedlang/compiler/ast/UntypedNamespaceStatementNode.java b/src/main/java/org/shedlang/compiler/ast/UntypedNamespaceStatementNode.java
new file mode 100644
index 00000000..06de16b6
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/ast/UntypedNamespaceStatementNode.java
@@ -0,0 +1,4 @@
+package org.shedlang.compiler.ast;
+
+public sealed interface UntypedNamespaceStatementNode extends UntypedNode permits UntypedFunctionDefinitionNode {
+}
diff --git a/src/main/java/org/shedlang/compiler/ast/UntypedParamNode.java b/src/main/java/org/shedlang/compiler/ast/UntypedParamNode.java
new file mode 100644
index 00000000..7bb6212b
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/ast/UntypedParamNode.java
@@ -0,0 +1,10 @@
+package org.shedlang.compiler.ast;
+
+import org.shedlang.compiler.sources.Source;
+
+public record UntypedParamNode(
+ String name,
+ UntypedTypeLevelExpressionNode type,
+ Source source
+) implements UntypedNode {
+}
diff --git a/src/main/java/org/shedlang/compiler/ast/UntypedParamsNode.java b/src/main/java/org/shedlang/compiler/ast/UntypedParamsNode.java
new file mode 100644
index 00000000..f5c9e4a0
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/ast/UntypedParamsNode.java
@@ -0,0 +1,12 @@
+package org.shedlang.compiler.ast;
+
+import org.shedlang.compiler.sources.Source;
+
+import java.util.List;
+
+public record UntypedParamsNode(
+ List<UntypedParamNode> positional,
+ List<UntypedParamNode> named,
+ Source source
+) implements UntypedNode {
+}