aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-20 18:32:51 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-20 18:32:51 +0100
commit413ad79ca75bb508ac2b6b333571f08f3d21c8a8 (patch)
tree43509464a842c491a20fbd12b172249383ec8e27 /src/main/java
parent74764070e84869fe8e2480350a76cb8fc58c1aeb (diff)
Add data-ptr-get instruction
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java7
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioDataPtrGet.java14
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioInstruction.java2
3 files changed, 22 insertions, 1 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 c865cd71..0e26ef08 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java
@@ -123,6 +123,13 @@ public class PatioSerializer {
)
);
+ case PatioDataPtrGet dataPtrGet ->
+ treeList(
+ treeIdentifier("data-ptr-get"),
+ localRefToTree(dataPtrGet.target()),
+ treeString(dataPtrGet.name())
+ );
+
case PatioDataPtrToInt dataPtrToInt ->
treeList(
treeIdentifier("data-ptr-to-int"),
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioDataPtrGet.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioDataPtrGet.java
new file mode 100644
index 00000000..ec9451b3
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioDataPtrGet.java
@@ -0,0 +1,14 @@
+package org.shedlang.compiler.patio.ast.instructions;
+
+import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.sources.Source;
+
+/**
+ * Store a pointer to the data element with the given name in the target local.
+ */
+public record PatioDataPtrGet(
+ PatioLocalRef target,
+ String name,
+ Source source
+) implements PatioInstruction {
+}
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioInstruction.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioInstruction.java
index 28fadebe..88b47962 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioInstruction.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioInstruction.java
@@ -2,6 +2,6 @@ package org.shedlang.compiler.patio.ast.instructions;
import org.shedlang.compiler.sources.Source;
-public sealed interface PatioInstruction permits PatioAlloc, PatioCallPointer, PatioDataPtrToInt, PatioFunctionPointerGet, PatioIf, PatioIntAdd, PatioIntGet, PatioIntToDataPtr, PatioLocalCopy, PatioMemoryLoad, PatioMemoryStore, PatioReturn {
+public sealed interface PatioInstruction permits PatioAlloc, PatioCallPointer, PatioDataPtrGet, PatioDataPtrToInt, PatioFunctionPointerGet, PatioIf, PatioIntAdd, PatioIntGet, PatioIntToDataPtr, PatioLocalCopy, PatioMemoryLoad, PatioMemoryStore, PatioReturn {
Source source();
}