From bafc83a26f9b2b94d8ed04b4841825f67bb48fef Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 20 Jul 2023 11:07:37 +0100 Subject: Tidy up structure of Patio AST --- .../compiler/patio/PatioCodeGenCallTests.java | 2 +- .../compiler/patio/PatioCodeGenDiscardTests.java | 2 +- .../patio/PatioCodeGenLocalStoreTests.java | 2 +- .../compiler/patio/PatioCodeGenReturnTests.java | 2 +- .../patio/PatioInstructionSerializerTests.java | 106 --------------------- .../compiler/patio/PatioSerializerTests.java | 106 +++++++++++++++++++++ .../org/shedlang/compiler/patio/PatioTesting.java | 13 +-- .../compiler/patio/instructions/Patio.java | 2 + 8 files changed, 119 insertions(+), 116 deletions(-) delete mode 100644 src/test/java/org/shedlang/compiler/patio/PatioInstructionSerializerTests.java create mode 100644 src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java (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 78c1e937..39c47867 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.instructions.PatioLocal; +import org.shedlang.compiler.patio.ast.PatioLocal; 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 2f1c85a0..6bf90f56 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.instructions.PatioLocal; +import org.shedlang.compiler.patio.ast.PatioLocal; 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 4003ee6d..af127819 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.instructions.PatioLocal; +import org.shedlang.compiler.patio.ast.PatioLocal; 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 fe06f556..44d24e5a 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.instructions.PatioLocal; +import org.shedlang.compiler.patio.ast.PatioLocal; 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/PatioInstructionSerializerTests.java b/src/test/java/org/shedlang/compiler/patio/PatioInstructionSerializerTests.java deleted file mode 100644 index 00097d35..00000000 --- a/src/test/java/org/shedlang/compiler/patio/PatioInstructionSerializerTests.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.shedlang.compiler.patio; - -import org.junit.jupiter.api.Test; -import org.shedlang.compiler.patio.instructions.Patio; -import org.shedlang.compiler.patio.instructions.PatioFunctionDefinition; - -import java.util.List; - -import static org.zwobble.precisely.AssertThat.assertThat; -import static org.zwobble.precisely.Matchers.equalTo; - -public class PatioInstructionSerializerTests { - @Test - public void canSerializeFunctionDefinition() { - var element = PatioFunctionDefinition.builder() - .withName("f") - .withIsPrivate(true) - .build(); - - var string = PatioTesting.serializeCompilationUnitElement(element); - - assertThat(string, equalTo(""" - ( - function - "f" - is-private=true - )""" - )); - } - - @Test - public void canSerializeAlloc() { - var instruction = Patio.alloc("x", 42); - - var string = PatioTesting.serializeInstruction(instruction); - - assertThat(string, equalTo("(alloc \"x\" 42)")); - } - - @Test - public void canSerializeCallPointer() { - var instruction = Patio.callPointer( - "target", - "f", - List.of("a", "b", "c") - ); - - var string = PatioTesting.serializeInstruction(instruction); - - assertThat(string, equalTo("(call-pointer \"target\" \"f\" (\"a\" \"b\" \"c\"))")); - } - - @Test - public void canSerializeFunctionPointerGet() { - var instruction = Patio.functionPointerGet("target", "f"); - - var string = PatioTesting.serializeInstruction(instruction); - - assertThat(string, equalTo("(function-pointer-get \"target\" \"f\")")); - } - - @Test - public void canSerializeIntGet() { - var instruction = Patio.intGet("target", 42); - - var string = PatioTesting.serializeInstruction(instruction); - - assertThat(string, equalTo("(int-get \"target\" 42)")); - } - - @Test - public void canSerializeLocalCopy() { - var instruction = Patio.localCopy("target", "x"); - - var string = PatioTesting.serializeInstruction(instruction); - - assertThat(string, equalTo("(local-copy \"target\" \"x\")")); - } - - @Test - public void canSerializeMemoryLoad() { - var instruction = Patio.memoryLoad("target", "pointer", 4); - - var string = PatioTesting.serializeInstruction(instruction); - - assertThat(string, equalTo("(memory-load \"target\" pointer=\"pointer\" offset=4)")); - } - - @Test - public void canSerializeMemoryStore() { - var instruction = Patio.memoryStore("pointer", 4, "value"); - - var string = PatioTesting.serializeInstruction(instruction); - - assertThat(string, equalTo("(memory-store pointer=\"pointer\" offset=4 value=\"value\")")); - } - - @Test - public void canSerializeReturn() { - var instruction = Patio.return_("value"); - - var string = PatioTesting.serializeInstruction(instruction); - - assertThat(string, equalTo("(return \"value\")")); - } -} diff --git a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java new file mode 100644 index 00000000..5a97bd48 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java @@ -0,0 +1,106 @@ +package org.shedlang.compiler.patio; + +import org.junit.jupiter.api.Test; +import org.shedlang.compiler.patio.instructions.Patio; +import org.shedlang.compiler.patio.ast.PatioFunctionDefinition; + +import java.util.List; + +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.equalTo; + +public class PatioSerializerTests { + @Test + public void canSerializeFunctionDefinition() { + var element = PatioFunctionDefinition.builder() + .withName("f") + .withIsPrivate(true) + .build(); + + var string = PatioTesting.serializeCompilationUnitElement(element); + + assertThat(string, equalTo(""" + ( + function + "f" + is-private=true + )""" + )); + } + + @Test + public void canSerializeAlloc() { + var instruction = Patio.alloc("x", 42); + + var string = PatioTesting.serializeInstruction(instruction); + + assertThat(string, equalTo("(alloc \"x\" 42)")); + } + + @Test + public void canSerializeCallPointer() { + var instruction = Patio.callPointer( + "target", + "f", + List.of("a", "b", "c") + ); + + var string = PatioTesting.serializeInstruction(instruction); + + assertThat(string, equalTo("(call-pointer \"target\" \"f\" (\"a\" \"b\" \"c\"))")); + } + + @Test + public void canSerializeFunctionPointerGet() { + var instruction = Patio.functionPointerGet("target", "f"); + + var string = PatioTesting.serializeInstruction(instruction); + + assertThat(string, equalTo("(function-pointer-get \"target\" \"f\")")); + } + + @Test + public void canSerializeIntGet() { + var instruction = Patio.intGet("target", 42); + + var string = PatioTesting.serializeInstruction(instruction); + + assertThat(string, equalTo("(int-get \"target\" 42)")); + } + + @Test + public void canSerializeLocalCopy() { + var instruction = Patio.localCopy("target", "x"); + + var string = PatioTesting.serializeInstruction(instruction); + + assertThat(string, equalTo("(local-copy \"target\" \"x\")")); + } + + @Test + public void canSerializeMemoryLoad() { + var instruction = Patio.memoryLoad("target", "pointer", 4); + + var string = PatioTesting.serializeInstruction(instruction); + + assertThat(string, equalTo("(memory-load \"target\" pointer=\"pointer\" offset=4)")); + } + + @Test + public void canSerializeMemoryStore() { + var instruction = Patio.memoryStore("pointer", 4, "value"); + + var string = PatioTesting.serializeInstruction(instruction); + + assertThat(string, equalTo("(memory-store pointer=\"pointer\" offset=4 value=\"value\")")); + } + + @Test + public void canSerializeReturn() { + var instruction = Patio.return_("value"); + + var string = PatioTesting.serializeInstruction(instruction); + + assertThat(string, equalTo("(return \"value\")")); + } +} diff --git a/src/test/java/org/shedlang/compiler/patio/PatioTesting.java b/src/test/java/org/shedlang/compiler/patio/PatioTesting.java index e571d49a..47fb37b7 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioTesting.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioTesting.java @@ -1,7 +1,8 @@ package org.shedlang.compiler.patio; -import org.shedlang.compiler.patio.instructions.PatioCompilationUnitElement; -import org.shedlang.compiler.patio.instructions.PatioInstruction; +import org.shedlang.compiler.patio.ast.PatioCompilationUnitElement; +import org.shedlang.compiler.patio.ast.PatioSerializer; +import org.shedlang.compiler.patio.ast.instructions.PatioInstruction; class PatioTesting { private PatioTesting() {} @@ -11,13 +12,13 @@ class PatioTesting { builder.append("Compilation unit elements:\n\n"); for (var element : context.compilationUnitContext().elementsByName().values()) { - PatioInstructionSerializer.serializeCompilationUnitElement(element, builder); + PatioSerializer.serializeCompilationUnitElement(element, builder); builder.append("\n"); } builder.append("\n"); builder.append("Instructions:\n\n"); - PatioInstructionSerializer.serializeInstructions( + PatioSerializer.serializeInstructions( context.functionContext().instructions(), builder ); @@ -34,13 +35,13 @@ class PatioTesting { static String serializeCompilationUnitElement(PatioCompilationUnitElement element) { var builder = new StringBuilder(); - PatioInstructionSerializer.serializeCompilationUnitElement(element, builder); + PatioSerializer.serializeCompilationUnitElement(element, builder); return builder.toString(); } static String serializeInstruction(PatioInstruction instruction) { var builder = new StringBuilder(); - PatioInstructionSerializer.serializeInstruction(instruction, builder); + PatioSerializer.serializeInstruction(instruction, builder); return builder.toString(); } } 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 c9a01ce3..5924e1a0 100644 --- a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java +++ b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java @@ -1,5 +1,7 @@ package org.shedlang.compiler.patio.instructions; +import org.shedlang.compiler.patio.ast.PatioLocal; +import org.shedlang.compiler.patio.ast.instructions.*; import org.shedlang.compiler.sources.Sources; import java.util.List; -- cgit v1.2.3