aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-20 14:02:20 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-20 14:02:20 +0100
commit1d947a749a5772b25c30cad1c8e3f8ec6d7b22ca (patch)
tree15ed00f03a7cd5f279cbc8fb58721c650d367b7e /src/test/java
parent2c9f1042aaf2b1c6c666af2ecd853d076484cd4b (diff)
Include data layout when loading from and storing to memory
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java53
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioTesting.java7
-rw-r--r--src/test/java/org/shedlang/compiler/patio/instructions/Patio.java17
3 files changed, 71 insertions, 6 deletions
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
index e02c18ca..5f7f83c9 100644
--- a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
@@ -11,6 +11,8 @@ import static org.zwobble.precisely.AssertThat.assertThat;
import static org.zwobble.precisely.Matchers.equalTo;
public class PatioSerializerTests {
+ // == Compilation unit elements ==
+
@Test
public void canSerializeFunctionDefinition() {
var element = PatioFunctionDefinition.builder()
@@ -29,6 +31,8 @@ public class PatioSerializerTests {
));
}
+ // == Instructions ==
+
@Test
public void canSerializeAlloc() {
var instruction = Patio.alloc("x", 42);
@@ -80,20 +84,46 @@ public class PatioSerializerTests {
@Test
public void canSerializeMemoryLoad() {
- var instruction = Patio.memoryLoad("target", "pointer", 4);
+ var instruction = Patio.memoryLoad(
+ "target",
+ "pointer",
+ PatioTypes.struct(List.of(PatioTypes.INT, PatioTypes.INT, PatioTypes.DATA_POINTER)),
+ 1
+ );
var string = PatioTesting.serializeInstruction(instruction);
- assertThat(string, equalTo("(memory-load \"target\" pointer=\"pointer\" offset=4)"));
+ assertThat(string, equalTo("""
+ (
+ memory-load
+ "target"
+ pointer="pointer"
+ layout=(struct (int int data-ptr))
+ offset=1
+ )"""
+ ));
}
@Test
public void canSerializeMemoryStore() {
- var instruction = Patio.memoryStore("pointer", 4, "value");
+ var instruction = Patio.memoryStore(
+ "pointer",
+ PatioTypes.struct(List.of(PatioTypes.INT, PatioTypes.INT, PatioTypes.DATA_POINTER)),
+ 1,
+ "value"
+ );
var string = PatioTesting.serializeInstruction(instruction);
- assertThat(string, equalTo("(memory-store pointer=\"pointer\" offset=4 value=\"value\")"));
+ assertThat(string, equalTo("""
+ (
+ memory-store
+ pointer="pointer"
+ layout=(struct (int int data-ptr))
+ offset=1
+ value="value"
+ )"""
+ ));
}
@Test
@@ -105,6 +135,8 @@ public class PatioSerializerTests {
assertThat(string, equalTo("(return \"value\")"));
}
+ // == Types ==
+
@Test
public void canSerializeDataPointerType() {
var type = PatioTypes.DATA_POINTER;
@@ -131,4 +163,17 @@ public class PatioSerializerTests {
assertThat(string, equalTo("int"));
}
+
+ // == Data layouts ==
+
+ @Test
+ public void canSerializeStruct() {
+ var layout = PatioTypes.struct(List.of(PatioTypes.INT, PatioTypes.INT, PatioTypes.DATA_POINTER));
+
+ var string = PatioTesting.serializeDataLayout(layout);
+
+ assertThat(string, equalTo("""
+ (struct (int int data-ptr))"""
+ ));
+ }
}
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioTesting.java b/src/test/java/org/shedlang/compiler/patio/PatioTesting.java
index 5996a44e..8dd331e7 100644
--- a/src/test/java/org/shedlang/compiler/patio/PatioTesting.java
+++ b/src/test/java/org/shedlang/compiler/patio/PatioTesting.java
@@ -3,6 +3,7 @@ package org.shedlang.compiler.patio;
import org.shedlang.compiler.patio.ast.PatioCompilationUnitElement;
import org.shedlang.compiler.patio.ast.PatioSerializer;
import org.shedlang.compiler.patio.ast.instructions.PatioInstruction;
+import org.shedlang.compiler.patio.ast.types.PatioDataLayout;
import org.shedlang.compiler.patio.ast.types.PatioType;
class PatioTesting {
@@ -47,6 +48,12 @@ class PatioTesting {
return builder.toString();
}
+ public static String serializeDataLayout(PatioDataLayout layout) {
+ var builder = new StringBuilder();
+ PatioSerializer.serializeDataLayout(layout, builder);
+ return builder.toString();
+ }
+
static String serializeInstruction(PatioInstruction instruction) {
var builder = new StringBuilder();
PatioSerializer.serializeInstruction(instruction, builder);
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 cfb81d83..42808bd4 100644
--- a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java
+++ b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java
@@ -2,6 +2,7 @@ package org.shedlang.compiler.patio.instructions;
import org.shedlang.compiler.patio.ast.PatioLocalRef;
import org.shedlang.compiler.patio.ast.instructions.*;
+import org.shedlang.compiler.patio.ast.types.PatioDataLayout;
import org.shedlang.compiler.sources.Sources;
import java.util.List;
@@ -44,18 +45,30 @@ public class Patio {
);
}
- public static PatioInstruction memoryLoad(String target, String pointer, int offset) {
+ public static PatioInstruction memoryLoad(
+ String target,
+ String pointer,
+ PatioDataLayout layout,
+ int offset
+ ) {
return new PatioMemoryLoad(
new PatioLocalRef(target),
new PatioLocalRef(pointer),
+ layout,
offset,
Sources.NULL
);
}
- public static PatioInstruction memoryStore(String pointer, int offset, String value) {
+ public static PatioInstruction memoryStore(
+ String pointer,
+ PatioDataLayout layout,
+ int offset,
+ String value
+ ) {
return new PatioMemoryStore(
new PatioLocalRef(pointer),
+ layout,
offset,
new PatioLocalRef(value),
Sources.NULL