aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-11-02 23:07:44 +0000
committerMichael Williamson <mike@zwobble.org>2023-11-02 23:07:44 +0000
commitc9ffb931adc50091fd86ea9d09c423ab16020416 (patch)
tree88f7d0b258ff083293e0fb292765252c5676a3f8 /src/main/java
parent298700108a286fa7154e4a638017c9fbebf5c3ff (diff)
Add typed unit 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/TypedUnitLiteralNode.java12
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/StackCompiler.java10
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 25422b1e..60ae4721 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, TypedWhenNode {
+ permits TypedBinaryOperationNode, TypedBoolLiteralNode, TypedCallNode, TypedFieldAccessNode, TypedFunctionExpressionNode, TypedIfNode, TypedIntLiteralNode, TypedReferenceNode, TypedStringLiteralNode, TypedTupleNode, TypedUnitLiteralNode, TypedWhenNode {
Type type();
}
diff --git a/src/main/java/org/shedlang/compiler/ast/typed/TypedUnitLiteralNode.java b/src/main/java/org/shedlang/compiler/ast/typed/TypedUnitLiteralNode.java
new file mode 100644
index 00000000..33f363d7
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/ast/typed/TypedUnitLiteralNode.java
@@ -0,0 +1,12 @@
+package org.shedlang.compiler.ast.typed;
+
+import org.shedlang.compiler.sources.Source;
+import org.shedlang.compiler.types.Type;
+import org.shedlang.compiler.types.Types;
+
+public record TypedUnitLiteralNode(Source source) implements TypedExpressionNode {
+ @Override
+ public Type type() {
+ return Types.UNIT;
+ }
+}
diff --git a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
index 8d1468c8..ecb32acd 100644
--- a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
+++ b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
@@ -146,6 +146,9 @@ public class StackCompiler {
case TypedTupleNode typedTupleNode ->
compileTuple(typedTupleNode, context);
+ case TypedUnitLiteralNode typedUnitLiteralNode ->
+ compileUnitLiteral(typedUnitLiteralNode, context);
+
case TypedWhenNode typedWhenNode ->
compileWhen(typedWhenNode, context);
};
@@ -586,6 +589,13 @@ public class StackCompiler {
return context.addInstruction(instruction);
}
+ private static Context compileUnitLiteral(
+ TypedUnitLiteralNode node,
+ Context context
+ ) {
+ return context.addInstruction(new PushUnitInstruction(node.source()));
+ }
+
private static Context compileWhen(TypedWhenNode node, Context context) {
context = compileExpression(node.expression(), context);