From fceeffe7558fc4cbab8d2d5062ad6cf2930ce850 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 20 Jul 2023 23:31:04 +0100 Subject: Introduce operands to Patio --- .../compiler/patio/PatioCodeGenCallTests.java | 2 +- .../compiler/patio/PatioCodeGenDiscardTests.java | 2 +- .../compiler/patio/PatioCodeGenIntAddTests.java | 2 +- .../patio/PatioCodeGenLocalStoreTests.java | 2 +- .../compiler/patio/PatioCodeGenReturnTests.java | 2 +- .../compiler/patio/PatioSerializerTests.java | 55 +++++++++++++++------- .../org/shedlang/compiler/patio/PatioTesting.java | 8 ++++ .../compiler/patio/instructions/Patio.java | 5 ++ 8 files changed, 55 insertions(+), 23 deletions(-) (limited to 'src/test/java') 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, -- cgit v1.2.3