diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-20 18:32:51 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-20 18:32:51 +0100 |
| commit | 413ad79ca75bb508ac2b6b333571f08f3d21c8a8 (patch) | |
| tree | 43509464a842c491a20fbd12b172249383ec8e27 /src | |
| parent | 74764070e84869fe8e2480350a76cb8fc58c1aeb (diff) | |
Add data-ptr-get instruction
Diffstat (limited to 'src')
5 files changed, 39 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(); } diff --git a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java index 67227c7b..fbc770f7 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java @@ -110,6 +110,15 @@ public class PatioSerializerTests { } @Test + public void canSerializeDataPtrGet() { + var instruction = Patio.dataPtrGet("target", "x"); + + var string = PatioTesting.serializeInstruction(instruction); + + assertThat(string, equalTo("(data-ptr-get \"target\" \"x\")")); + } + + @Test public void canSerializeDataPtrToInt() { var instruction = Patio.dataPtrToInt("target", "value"); 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 0f434cd5..79b2f6ed 100644 --- a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java +++ b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java @@ -40,6 +40,14 @@ public class Patio { return new PatioDataElement(name, layout, Sources.NULL); } + public static PatioDataPtrGet dataPtrGet(String target, String name) { + return new PatioDataPtrGet( + new PatioLocalRef(target), + name, + Sources.NULL + ); + } + public static PatioInstruction dataPtrToInt(String target, String value) { return new PatioDataPtrToInt( new PatioLocalRef(target), |
