aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-11-04 21:42:25 +0000
committerMichael Williamson <mike@zwobble.org>2023-11-04 21:42:25 +0000
commit1ed30cb57b8ae48ac60576aee807d5dfc86d8646 (patch)
tree264dae96d1c0d4e4ca1753faf996e53c50f5e98c /src/main/java
parentaeb12bbb72ac6de9a68473ef5499c4e686f921c8 (diff)
Add typed try node
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ast/typed/TypedExpressionNode.java2
-rw-r--r--src/main/java/org/shedlang/compiler/ast/typed/TypedTryNode.java19
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/StackCompiler.java3
3 files changed, 23 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/ast/typed/TypedExpressionNode.java b/src/main/java/org/shedlang/compiler/ast/typed/TypedExpressionNode.java
index 60ae4721..4c8b2cfd 100644
--- a/src/main/java/org/shedlang/compiler/ast/typed/TypedExpressionNode.java
+++ b/src/main/java/org/shedlang/compiler/ast/typed/TypedExpressionNode.java
@@ -4,6 +4,6 @@ import org.shedlang.compiler.types.Type;
public sealed interface TypedExpressionNode
extends TypedNode
- permits TypedBinaryOperationNode, TypedBoolLiteralNode, TypedCallNode, TypedFieldAccessNode, TypedFunctionExpressionNode, TypedIfNode, TypedIntLiteralNode, TypedReferenceNode, TypedStringLiteralNode, TypedTupleNode, TypedUnitLiteralNode, TypedWhenNode {
+ permits TypedBinaryOperationNode, TypedBoolLiteralNode, TypedCallNode, TypedFieldAccessNode, TypedFunctionExpressionNode, TypedIfNode, TypedIntLiteralNode, TypedReferenceNode, TypedStringLiteralNode, TypedTryNode, TypedTupleNode, TypedUnitLiteralNode, TypedWhenNode {
Type type();
}
diff --git a/src/main/java/org/shedlang/compiler/ast/typed/TypedTryNode.java b/src/main/java/org/shedlang/compiler/ast/typed/TypedTryNode.java
new file mode 100644
index 00000000..2c8034be
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/ast/typed/TypedTryNode.java
@@ -0,0 +1,19 @@
+package org.shedlang.compiler.ast.typed;
+
+import org.shedlang.compiler.sources.Source;
+import org.shedlang.compiler.types.Effect;
+import org.shedlang.compiler.types.Type;
+
+import java.util.List;
+
+public record TypedTryNode(
+ TypedBlockNode body,
+ TypedTypeLevelExpressionNode<Effect> handledEffect,
+ List<TypedFunctionDefinitionNode> handlers,
+ Source source
+) implements TypedExpressionNode {
+ @Override
+ public Type type() {
+ return body.type();
+ }
+}
diff --git a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
index 7080cde2..8564a66d 100644
--- a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
+++ b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
@@ -143,6 +143,9 @@ public class StackCompiler {
case TypedStringLiteralNode typedStringLiteralNode ->
compileStringLiteral(typedStringLiteralNode, context);
+ case TypedTryNode typedTryNode ->
+ throw new UnsupportedOperationException("TODO");
+
case TypedTupleNode typedTupleNode ->
compileTuple(typedTupleNode, context);