aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-20 23:48:30 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-20 23:48:30 +0100
commit02b996c4eb8d271349d9f248bb6396ce650c4e17 (patch)
tree4d923968e47a0e38bca260efa18ced42c693125f /src
parent40b380d258548a83a4adca9352e97eaae41a4342 (diff)
Add data-ptr operand
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java8
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/operands/PatioDataPtr.java4
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/operands/PatioOperand.java2
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java9
-rw-r--r--src/test/java/org/shedlang/compiler/patio/instructions/Patio.java9
5 files changed, 23 insertions, 9 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java
index 9fdfbdb5..91b77cc4 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java
@@ -1,10 +1,7 @@
package org.shedlang.compiler.patio.ast;
import org.shedlang.compiler.patio.ast.instructions.*;
-import org.shedlang.compiler.patio.ast.operands.PatioBool;
-import org.shedlang.compiler.patio.ast.operands.PatioInt;
-import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
-import org.shedlang.compiler.patio.ast.operands.PatioOperand;
+import org.shedlang.compiler.patio.ast.operands.*;
import org.shedlang.compiler.patio.ast.types.*;
import org.shedlang.compiler.treetext.Tree;
@@ -226,6 +223,9 @@ public class PatioSerializer {
case PatioBool bool ->
treeList(treeIdentifier("bool"), treeBool(bool.value()));
+ case PatioDataPtr dataPtr ->
+ treeList(treeIdentifier("data-ptr"), treeString(dataPtr.name()));
+
case PatioInt int_ ->
treeList(treeIdentifier("int"), treeInt(int_.value()));
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/operands/PatioDataPtr.java b/src/main/java/org/shedlang/compiler/patio/ast/operands/PatioDataPtr.java
new file mode 100644
index 00000000..27d9333b
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/ast/operands/PatioDataPtr.java
@@ -0,0 +1,4 @@
+package org.shedlang.compiler.patio.ast.operands;
+
+public record PatioDataPtr(String name) implements PatioOperand {
+}
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/operands/PatioOperand.java b/src/main/java/org/shedlang/compiler/patio/ast/operands/PatioOperand.java
index 8316867b..47d0d0ec 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/operands/PatioOperand.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/operands/PatioOperand.java
@@ -1,5 +1,5 @@
package org.shedlang.compiler.patio.ast.operands;
-public sealed interface PatioOperand permits PatioBool, PatioInt, PatioLocalRef {
+public sealed interface PatioOperand permits PatioBool, PatioDataPtr, PatioInt, PatioLocalRef {
}
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
index 7e962443..42b494cb 100644
--- a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
@@ -263,6 +263,15 @@ public class PatioSerializerTests {
}
@Test
+ public void canSerializeDataPtr() {
+ var operand = Patio.dataPtr("x");
+
+ var string = PatioTesting.serializeOperand(operand);
+
+ assertThat(string, equalTo("(data-ptr \"x\")"));
+ }
+
+ @Test
public void canSerializeInt() {
var operand = Patio.int_(42);
diff --git a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java
index 5c0fc397..cd8a67d7 100644
--- a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java
+++ b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java
@@ -2,10 +2,7 @@ package org.shedlang.compiler.patio.instructions;
import org.shedlang.compiler.patio.ast.*;
import org.shedlang.compiler.patio.ast.instructions.*;
-import org.shedlang.compiler.patio.ast.operands.PatioBool;
-import org.shedlang.compiler.patio.ast.operands.PatioInt;
-import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
-import org.shedlang.compiler.patio.ast.operands.PatioOperand;
+import org.shedlang.compiler.patio.ast.operands.*;
import org.shedlang.compiler.patio.ast.types.PatioDataLayout;
import org.shedlang.compiler.patio.ast.types.PatioType;
import org.shedlang.compiler.sources.Sources;
@@ -47,6 +44,10 @@ public class Patio {
return new PatioDataElement(name, layout, Sources.NULL);
}
+ public static PatioOperand dataPtr(String name) {
+ return new PatioDataPtr(name);
+ }
+
public static PatioDataPtrGet dataPtrGet(String target, String name) {
return new PatioDataPtrGet(
new PatioLocalRef(target),