aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-20 23:31:04 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-20 23:31:04 +0100
commitfceeffe7558fc4cbab8d2d5062ad6cf2930ce850 (patch)
tree4ecdb55f5dd33c89d15cc6b51b6bd3fcdc76bc3f /src
parent413ad79ca75bb508ac2b6b333571f08f3d21c8a8 (diff)
Introduce operands to Patio
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java1
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/PatioLocalRef.java4
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java62
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioAlloc.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioCallPointer.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioDataPtrGet.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioDataPtrToInt.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioFunctionPointerGet.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIf.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntAdd.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntGet.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntToDataPtr.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLocalCopy.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryLoad.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryStore.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioReturn.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/operands/PatioLocalRef.java6
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/operands/PatioOperand.java5
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioCodeGenCallTests.java2
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioCodeGenDiscardTests.java2
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioCodeGenIntAddTests.java2
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioCodeGenLocalStoreTests.java2
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioCodeGenReturnTests.java2
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java55
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioTesting.java8
-rw-r--r--src/test/java/org/shedlang/compiler/patio/instructions/Patio.java5
28 files changed, 118 insertions, 68 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
index c4f040dc..d7ed13d6 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
@@ -1,7 +1,7 @@
package org.shedlang.compiler.patio;
import org.shedlang.compiler.patio.ast.PatioCompilationUnit;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.patio.ast.instructions.PatioIntAdd;
import org.shedlang.compiler.patio.ast.instructions.PatioIntGet;
import org.shedlang.compiler.patio.ast.instructions.PatioReturn;
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java
index 8e108a45..2374ed2c 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java
@@ -3,7 +3,7 @@ package org.shedlang.compiler.patio;
import org.shedlang.compiler.ast.typed.FreeVariable;
import org.shedlang.compiler.ast.typed.FreeVariables;
import org.shedlang.compiler.patio.ast.instructions.*;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.patio.ast.types.PatioDataLayout;
import org.shedlang.compiler.patio.ast.types.PatioStruct;
import org.shedlang.compiler.patio.ast.types.PatioType;
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java
index 3b5b3ba1..f85d97a1 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java
@@ -8,6 +8,7 @@ import org.shedlang.compiler.backends.llvm.NameAllocator;
import org.shedlang.compiler.patio.ast.*;
import org.shedlang.compiler.patio.ast.instructions.PatioInstruction;
import org.shedlang.compiler.patio.ast.instructions.PatioLocalCopy;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.patio.ast.types.PatioDataLayout;
import org.shedlang.compiler.patio.ast.types.PatioType;
import org.shedlang.compiler.sources.Source;
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/PatioLocalRef.java b/src/main/java/org/shedlang/compiler/patio/ast/PatioLocalRef.java
deleted file mode 100644
index 1911ee04..00000000
--- a/src/main/java/org/shedlang/compiler/patio/ast/PatioLocalRef.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.shedlang.compiler.patio.ast;
-
-public record PatioLocalRef(String name) {
-}
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 0e26ef08..8edf1464 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java
@@ -1,6 +1,8 @@
package org.shedlang.compiler.patio.ast;
import org.shedlang.compiler.patio.ast.instructions.*;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioOperand;
import org.shedlang.compiler.patio.ast.types.*;
import org.shedlang.compiler.treetext.Tree;
@@ -51,6 +53,11 @@ public class PatioSerializer {
serializeTree(tree, builder, 0);
}
+ public static void serializeOperand(PatioOperand operand, StringBuilder builder) {
+ var tree = operandToTree(operand);
+ serializeTree(tree, builder, 0);
+ }
+
public static void serializeType(PatioType type, StringBuilder builder) {
var tree = typeToTree(type);
serializeTree(tree, builder, 0);
@@ -107,18 +114,18 @@ public class PatioSerializer {
case PatioAlloc alloc ->
treeList(
treeIdentifier("alloc"),
- localRefToTree(alloc.target()),
+ operandToTree(alloc.target()),
dataLayoutToTree(alloc.layout())
);
case PatioCallPointer callPointer ->
treeList(
treeIdentifier("call-pointer"),
- localRefToTree(callPointer.target()),
- localRefToTree(callPointer.functionPointer()),
+ operandToTree(callPointer.target()),
+ operandToTree(callPointer.functionPointer()),
treeList(
callPointer.args().stream()
- .map(arg -> localRefToTree(arg))
+ .map(arg -> operandToTree(arg))
.toList()
)
);
@@ -126,21 +133,21 @@ public class PatioSerializer {
case PatioDataPtrGet dataPtrGet ->
treeList(
treeIdentifier("data-ptr-get"),
- localRefToTree(dataPtrGet.target()),
+ operandToTree(dataPtrGet.target()),
treeString(dataPtrGet.name())
);
case PatioDataPtrToInt dataPtrToInt ->
treeList(
treeIdentifier("data-ptr-to-int"),
- localRefToTree(dataPtrToInt.target()),
- localRefToTree(dataPtrToInt.value())
+ operandToTree(dataPtrToInt.target()),
+ operandToTree(dataPtrToInt.value())
);
case PatioIf if_ ->
treeListIndented(
treeIdentifier("if"),
- localRefToTree(if_.condition()),
+ operandToTree(if_.condition()),
instructionsToTree(if_.trueBody()),
instructionsToTree(if_.falseBody())
);
@@ -148,37 +155,37 @@ public class PatioSerializer {
case PatioIntAdd intAdd ->
treeList(
treeIdentifier("int-add"),
- localRefToTree(intAdd.target()),
- localRefToTree(intAdd.left()),
- localRefToTree(intAdd.right())
+ operandToTree(intAdd.target()),
+ operandToTree(intAdd.left()),
+ operandToTree(intAdd.right())
);
case PatioIntGet intGet ->
treeList(
treeIdentifier("int-get"),
- localRefToTree(intGet.target()),
+ operandToTree(intGet.target()),
treeInt(intGet.value())
);
case PatioIntToDataPtr intToDataPtr ->
treeList(
treeIdentifier("int-to-data-ptr"),
- localRefToTree(intToDataPtr.target()),
- localRefToTree(intToDataPtr.value())
+ operandToTree(intToDataPtr.target()),
+ operandToTree(intToDataPtr.value())
);
case PatioLocalCopy localCopy ->
treeList(
treeIdentifier("local-copy"),
- localRefToTree(localCopy.target()),
- localRefToTree(localCopy.value())
+ operandToTree(localCopy.target()),
+ operandToTree(localCopy.value())
);
case PatioMemoryLoad memoryLoad ->
treeListIndented(
treeIdentifier("memory-load"),
- localRefToTree(memoryLoad.target()),
- treeNamed("pointer", localRefToTree(memoryLoad.pointer())),
+ operandToTree(memoryLoad.target()),
+ treeNamed("pointer", operandToTree(memoryLoad.pointer())),
treeNamed("layout", dataLayoutToTree(memoryLoad.layout())),
treeNamed("offset", treeList(
memoryLoad.offset().stream()
@@ -190,27 +197,27 @@ public class PatioSerializer {
case PatioMemoryStore memoryStore ->
treeListIndented(
treeIdentifier("memory-store"),
- treeNamed("pointer", localRefToTree(memoryStore.pointer())),
+ treeNamed("pointer", operandToTree(memoryStore.pointer())),
treeNamed("layout", dataLayoutToTree(memoryStore.layout())),
treeNamed("offset", treeList(
memoryStore.offset().stream()
.map(offset -> treeInt(offset))
.toList()
)),
- treeNamed("value", localRefToTree(memoryStore.value()))
+ treeNamed("value", operandToTree(memoryStore.value()))
);
case PatioFunctionPointerGet functionPointerGet ->
treeList(
treeIdentifier("function-pointer-get"),
- localRefToTree(functionPointerGet.target()),
+ operandToTree(functionPointerGet.target()),
treeString(functionPointerGet.name())
);
case PatioReturn return_ ->
treeList(
treeIdentifier("return"),
- localRefToTree(return_.value())
+ operandToTree(return_.value())
);
};
}
@@ -219,6 +226,13 @@ public class PatioSerializer {
return treeList(treeString(local.name()), typeToTree(local.type()));
}
+ private static Tree operandToTree(PatioOperand operand) {
+ return switch (operand) {
+ case PatioLocalRef localRef ->
+ treeList(treeIdentifier("local"), treeString(localRef.name()));
+ };
+ }
+
private static Tree typeToTree(PatioType type) {
return switch (type) {
case PatioBoolType boolType ->
@@ -254,8 +268,4 @@ public class PatioSerializer {
);
};
}
-
- private static Tree localRefToTree(PatioLocalRef local) {
- return treeString(local.name());
- }
}
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioAlloc.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioAlloc.java
index 279ae0db..dd5bde56 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioAlloc.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioAlloc.java
@@ -1,6 +1,6 @@
package org.shedlang.compiler.patio.ast.instructions;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.patio.ast.types.PatioDataLayout;
import org.shedlang.compiler.sources.Source;
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioCallPointer.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioCallPointer.java
index a3e30c02..5373a95d 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioCallPointer.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioCallPointer.java
@@ -1,6 +1,6 @@
package org.shedlang.compiler.patio.ast.instructions;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.sources.Source;
import java.util.List;
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
index ec9451b3..ec417b4c 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioDataPtrGet.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioDataPtrGet.java
@@ -1,6 +1,6 @@
package org.shedlang.compiler.patio.ast.instructions;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.sources.Source;
/**
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioDataPtrToInt.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioDataPtrToInt.java
index d7239044..42372cbb 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioDataPtrToInt.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioDataPtrToInt.java
@@ -1,6 +1,6 @@
package org.shedlang.compiler.patio.ast.instructions;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.sources.Source;
public record PatioDataPtrToInt(
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioFunctionPointerGet.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioFunctionPointerGet.java
index 01c361cf..694b8da6 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioFunctionPointerGet.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioFunctionPointerGet.java
@@ -1,6 +1,6 @@
package org.shedlang.compiler.patio.ast.instructions;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.sources.Source;
/**
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIf.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIf.java
index 4446f3c6..87de0735 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIf.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIf.java
@@ -1,6 +1,6 @@
package org.shedlang.compiler.patio.ast.instructions;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.sources.Source;
import java.util.List;
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntAdd.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntAdd.java
index eae6a3fa..ae1f67b7 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntAdd.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntAdd.java
@@ -1,6 +1,6 @@
package org.shedlang.compiler.patio.ast.instructions;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.sources.Source;
public record PatioIntAdd(
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntGet.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntGet.java
index 89d6a82c..beba06d2 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntGet.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntGet.java
@@ -1,6 +1,6 @@
package org.shedlang.compiler.patio.ast.instructions;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.sources.Source;
/**
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntToDataPtr.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntToDataPtr.java
index 8c8000d5..7680645a 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntToDataPtr.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntToDataPtr.java
@@ -1,6 +1,6 @@
package org.shedlang.compiler.patio.ast.instructions;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.sources.Source;
public record PatioIntToDataPtr(
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLocalCopy.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLocalCopy.java
index 58dbe369..34d5bbaa 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLocalCopy.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLocalCopy.java
@@ -1,6 +1,6 @@
package org.shedlang.compiler.patio.ast.instructions;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.sources.Source;
/**
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryLoad.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryLoad.java
index 7a5f49ce..16037653 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryLoad.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryLoad.java
@@ -1,6 +1,6 @@
package org.shedlang.compiler.patio.ast.instructions;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.patio.ast.types.PatioDataLayout;
import org.shedlang.compiler.sources.Source;
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryStore.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryStore.java
index 0a9b35a6..9abc16da 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryStore.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryStore.java
@@ -1,6 +1,6 @@
package org.shedlang.compiler.patio.ast.instructions;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.patio.ast.types.PatioDataLayout;
import org.shedlang.compiler.sources.Source;
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioReturn.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioReturn.java
index d2fe33b8..285395e0 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioReturn.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioReturn.java
@@ -1,6 +1,6 @@
package org.shedlang.compiler.patio.ast.instructions;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.sources.Source;
/**
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/operands/PatioLocalRef.java b/src/main/java/org/shedlang/compiler/patio/ast/operands/PatioLocalRef.java
new file mode 100644
index 00000000..c0a37c9d
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/ast/operands/PatioLocalRef.java
@@ -0,0 +1,6 @@
+package org.shedlang.compiler.patio.ast.operands;
+
+import org.shedlang.compiler.patio.ast.operands.PatioOperand;
+
+public record PatioLocalRef(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
new file mode 100644
index 00000000..e7526d44
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/ast/operands/PatioOperand.java
@@ -0,0 +1,5 @@
+package org.shedlang.compiler.patio.ast.operands;
+
+public sealed interface PatioOperand permits PatioLocalRef {
+
+}
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenCallTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenCallTests.java
index fc191166..a802351e 100644
--- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenCallTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenCallTests.java
@@ -2,7 +2,7 @@ package org.shedlang.compiler.patio;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.stackir.instructions.Instructions;
import org.shedlang.compiler.testing.snapshots.SnapshotResolver;
import org.shedlang.compiler.testing.snapshots.Snapshotter;
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDiscardTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDiscardTests.java
index 75aec63c..da7e55de 100644
--- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDiscardTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDiscardTests.java
@@ -2,7 +2,7 @@ package org.shedlang.compiler.patio;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.stackir.instructions.Instructions;
import org.shedlang.compiler.testing.snapshots.SnapshotResolver;
import org.shedlang.compiler.testing.snapshots.Snapshotter;
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenIntAddTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenIntAddTests.java
index 11de42eb..5969a9cf 100644
--- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenIntAddTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenIntAddTests.java
@@ -2,7 +2,7 @@ package org.shedlang.compiler.patio;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.stackir.instructions.Instructions;
import org.shedlang.compiler.testing.snapshots.SnapshotResolver;
import org.shedlang.compiler.testing.snapshots.Snapshotter;
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenLocalStoreTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenLocalStoreTests.java
index 186d81cb..1fc4f386 100644
--- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenLocalStoreTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenLocalStoreTests.java
@@ -2,7 +2,7 @@ package org.shedlang.compiler.patio;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.stackir.instructions.Instructions;
import org.shedlang.compiler.testing.snapshots.SnapshotResolver;
import org.shedlang.compiler.testing.snapshots.Snapshotter;
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenReturnTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenReturnTests.java
index afe90a4c..760f23e8 100644
--- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenReturnTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenReturnTests.java
@@ -2,7 +2,7 @@ package org.shedlang.compiler.patio;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.shedlang.compiler.patio.ast.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.stackir.instructions.Instructions;
import org.shedlang.compiler.testing.snapshots.SnapshotResolver;
import org.shedlang.compiler.testing.snapshots.Snapshotter;
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
index fbc770f7..e7c21285 100644
--- a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
@@ -76,7 +76,7 @@ public class PatioSerializerTests {
locals=(("local1" function-ptr) ("local2" int))
return-type=void
body=(
- (int-get "local2" 2)
+ (int-get (local "local2") 2)
)
)"""
));
@@ -93,7 +93,7 @@ public class PatioSerializerTests {
var string = PatioTesting.serializeInstruction(instruction);
- assertThat(string, equalTo("(alloc \"x\" (struct (int int data-ptr)))"));
+ assertThat(string, equalTo("(alloc (local \"x\") (struct (int int data-ptr)))"));
}
@Test
@@ -106,7 +106,9 @@ public class PatioSerializerTests {
var string = PatioTesting.serializeInstruction(instruction);
- assertThat(string, equalTo("(call-pointer \"target\" \"f\" (\"a\" \"b\" \"c\"))"));
+ assertThat(string, equalTo("""
+ (call-pointer (local "target") (local "f") ((local "a") (local "b") (local "c")))"""
+ ));
}
@Test
@@ -115,7 +117,7 @@ public class PatioSerializerTests {
var string = PatioTesting.serializeInstruction(instruction);
- assertThat(string, equalTo("(data-ptr-get \"target\" \"x\")"));
+ assertThat(string, equalTo("(data-ptr-get (local \"target\") \"x\")"));
}
@Test
@@ -124,7 +126,9 @@ public class PatioSerializerTests {
var string = PatioTesting.serializeInstruction(instruction);
- assertThat(string, equalTo("(data-ptr-to-int \"target\" \"value\")"));
+ assertThat(string, equalTo("""
+ (data-ptr-to-int (local "target") (local "value"))"""
+ ));
}
@Test
@@ -133,7 +137,9 @@ public class PatioSerializerTests {
var string = PatioTesting.serializeInstruction(instruction);
- assertThat(string, equalTo("(function-pointer-get \"target\" \"f\")"));
+ assertThat(string, equalTo("""
+ (function-pointer-get (local "target") "f")"""
+ ));
}
@Test
@@ -153,12 +159,12 @@ public class PatioSerializerTests {
assertThat(string, equalTo("""
(
if
- "condition"
+ (local "condition")
(
- (int-get "x" 1)
+ (int-get (local "x") 1)
)
(
- (int-get "y" 2)
+ (int-get (local "y") 2)
)
)"""));
}
@@ -169,7 +175,9 @@ public class PatioSerializerTests {
var string = PatioTesting.serializeInstruction(instruction);
- assertThat(string, equalTo("(int-add \"target\" \"left\" \"right\")"));
+ assertThat(string, equalTo("""
+ (int-add (local "target") (local "left") (local "right"))"""
+ ));
}
@Test
@@ -178,7 +186,7 @@ public class PatioSerializerTests {
var string = PatioTesting.serializeInstruction(instruction);
- assertThat(string, equalTo("(int-get \"target\" 42)"));
+ assertThat(string, equalTo("(int-get (local \"target\") 42)"));
}
@Test
@@ -187,7 +195,7 @@ public class PatioSerializerTests {
var string = PatioTesting.serializeInstruction(instruction);
- assertThat(string, equalTo("(int-to-data-ptr \"target\" \"value\")"));
+ assertThat(string, equalTo("(int-to-data-ptr (local \"target\") (local \"value\"))"));
}
@Test
@@ -196,7 +204,7 @@ public class PatioSerializerTests {
var string = PatioTesting.serializeInstruction(instruction);
- assertThat(string, equalTo("(local-copy \"target\" \"x\")"));
+ assertThat(string, equalTo("(local-copy (local \"target\") (local \"x\"))"));
}
@Test
@@ -213,8 +221,8 @@ public class PatioSerializerTests {
assertThat(string, equalTo("""
(
memory-load
- "target"
- pointer="pointer"
+ (local "target")
+ pointer=(local "pointer")
layout=(struct (int int data-ptr))
offset=(1)
)"""
@@ -235,10 +243,10 @@ public class PatioSerializerTests {
assertThat(string, equalTo("""
(
memory-store
- pointer="pointer"
+ pointer=(local "pointer")
layout=(struct (int int data-ptr))
offset=(1)
- value="value"
+ value=(local "value")
)"""
));
}
@@ -249,7 +257,18 @@ public class PatioSerializerTests {
var string = PatioTesting.serializeInstruction(instruction);
- assertThat(string, equalTo("(return \"value\")"));
+ assertThat(string, equalTo("(return (local \"value\"))"));
+ }
+
+ // == Operands ==
+
+ @Test
+ public void canSerializeLocalRef() {
+ var operand = Patio.localRef("x");
+
+ var string = PatioTesting.serializeOperand(operand);
+
+ assertThat(string, equalTo("(local \"x\")"));
}
// == Types ==
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioTesting.java b/src/test/java/org/shedlang/compiler/patio/PatioTesting.java
index 53e13d13..d90f9534 100644
--- a/src/test/java/org/shedlang/compiler/patio/PatioTesting.java
+++ b/src/test/java/org/shedlang/compiler/patio/PatioTesting.java
@@ -4,6 +4,8 @@ import org.shedlang.compiler.patio.ast.PatioCompilationUnit;
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.operands.PatioLocalRef;
+import org.shedlang.compiler.patio.ast.operands.PatioOperand;
import org.shedlang.compiler.patio.ast.types.PatioDataLayout;
import org.shedlang.compiler.patio.ast.types.PatioType;
@@ -76,6 +78,12 @@ class PatioTesting {
return builder.toString();
}
+ static String serializeOperand(PatioOperand operand) {
+ var builder = new StringBuilder();
+ PatioSerializer.serializeOperand(operand, builder);
+ return builder.toString();
+ }
+
static String serializeType(PatioType type) {
var builder = new StringBuilder();
PatioSerializer.serializeType(type, 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 79b2f6ed..50aa38ab 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.*;
import org.shedlang.compiler.patio.ast.instructions.*;
+import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.patio.ast.types.PatioDataLayout;
import org.shedlang.compiler.patio.ast.types.PatioType;
import org.shedlang.compiler.sources.Sources;
@@ -106,6 +107,10 @@ public class Patio {
);
}
+ public static PatioLocalRef localRef(String name) {
+ return new PatioLocalRef(name);
+ }
+
public static PatioInstruction memoryLoad(
String target,
String pointer,