aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-10 10:12:21 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-10 10:12:21 +0100
commit345b4b4c0b03e2331ffb0b5b33a80bee795e70e2 (patch)
treeb3fcc1fb8c394760429b9d2dd23c6ef5e1e198fa /src/main/java
parente7025e11b5718393d776e42ec83bef1521bf8a20 (diff)
Compile string literal to stack instruction
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/StackCompiler.java7
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java2
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/instructions/PushStringInstruction.java6
3 files changed, 13 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
index 33d8f026..93fd5086 100644
--- a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
+++ b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
@@ -4,6 +4,7 @@ import org.shedlang.compiler.ast.typed.*;
import org.shedlang.compiler.stackir.instructions.Instruction;
import org.shedlang.compiler.stackir.instructions.PushBoolInstruction;
import org.shedlang.compiler.stackir.instructions.PushIntInstruction;
+import org.shedlang.compiler.stackir.instructions.PushStringInstruction;
import java.util.List;
@@ -27,11 +28,15 @@ public class StackCompiler {
throw new UnsupportedOperationException("TODO");
case TypedStringLiteralNode typedStringLiteralNode ->
- throw new UnsupportedOperationException("TODO");
+ compileStringLiteral(typedStringLiteralNode);
};
}
private static List<Instruction> compileIntLiteral(TypedIntLiteralNode node) {
return List.of(new PushIntInstruction(node.value(), node.source()));
}
+
+ private static List<Instruction> compileStringLiteral(TypedStringLiteralNode node) {
+ return List.of(new PushStringInstruction(node.value(), node.source()));
+ }
}
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 5c5bad79..857d7d6a 100644
--- a/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java
+++ b/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java
@@ -1,4 +1,4 @@
package org.shedlang.compiler.stackir.instructions;
-public sealed interface Instruction permits PushBoolInstruction, PushIntInstruction {
+public sealed interface Instruction permits PushBoolInstruction, PushIntInstruction, PushStringInstruction {
}
diff --git a/src/main/java/org/shedlang/compiler/stackir/instructions/PushStringInstruction.java b/src/main/java/org/shedlang/compiler/stackir/instructions/PushStringInstruction.java
new file mode 100644
index 00000000..364e5444
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/stackir/instructions/PushStringInstruction.java
@@ -0,0 +1,6 @@
+package org.shedlang.compiler.stackir.instructions;
+
+import org.shedlang.compiler.sources.Source;
+
+public record PushStringInstruction(String value, Source source) implements Instruction {
+}