aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-10 12:04:59 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-10 12:04:59 +0100
commitff4dad7fc61d13aee7ed1191cc3afd9a8a75a240 (patch)
tree9897db2ffb994081a32e72213beb6d8962a13dcd /src/main/java
parentd2769fe60d264607f2e1c338657dc7e4d4bfba52 (diff)
Compile expression statements to stack instructions
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/StackCompiler.java11
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/instructions/DiscardInstruction.java6
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java2
3 files changed, 18 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
index c16674e0..4623bc5d 100644
--- a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
+++ b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
@@ -56,6 +56,17 @@ public class StackCompiler {
};
}
+ private static PVector<Instruction> compileExpressionStatement(TypedExpressionStatementNode node) {
+ return compileExpression(node.expression()).plus(new DiscardInstruction(node.source()));
+ }
+
+ public static PVector<Instruction> compileFunctionStatement(TypedFunctionStatementNode node) {
+ return switch (node) {
+ case TypedExpressionStatementNode expressionStatement ->
+ compileExpressionStatement(expressionStatement);
+ };
+ }
+
private static PVector<Instruction> compileIntLiteral(TypedIntLiteralNode node) {
return P.vector(new PushIntInstruction(node.value(), node.source()));
}
diff --git a/src/main/java/org/shedlang/compiler/stackir/instructions/DiscardInstruction.java b/src/main/java/org/shedlang/compiler/stackir/instructions/DiscardInstruction.java
new file mode 100644
index 00000000..6efd3c03
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/stackir/instructions/DiscardInstruction.java
@@ -0,0 +1,6 @@
+package org.shedlang.compiler.stackir.instructions;
+
+import org.shedlang.compiler.sources.Source;
+
+public record DiscardInstruction(Source source) implements Instruction {
+}
diff --git a/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java b/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java
index 33007bf2..0b5d9dd8 100644
--- a/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java
+++ b/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java
@@ -1,5 +1,5 @@
package org.shedlang.compiler.stackir.instructions;
public sealed interface Instruction
- permits CallInstruction, LocalLoadInstruction, LocalStoreInstruction, PushBoolInstruction, PushIntInstruction, PushStringInstruction {
+ permits CallInstruction, DiscardInstruction, LocalLoadInstruction, LocalStoreInstruction, PushBoolInstruction, PushIntInstruction, PushStringInstruction {
}