From 5a0f2590a6b9c20b7ba47375ebff6ebc1eef5973 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 21 Jul 2023 17:09:24 +0100 Subject: Add immutable data elements to Patio --- .../shedlang/compiler/backends/wasm/WasmPatioCodeGen.java | 9 ++++++--- .../org/shedlang/compiler/patio/PatioCodeGenContext.java | 2 +- .../compiler/patio/ast/PatioCompilationUnitElement.java | 2 +- .../org/shedlang/compiler/patio/ast/PatioDataElement.java | 11 ----------- .../compiler/patio/ast/PatioDataElementImmutable.java | 11 +++++++++++ .../compiler/patio/ast/PatioDataElementMutable.java | 11 +++++++++++ .../org/shedlang/compiler/patio/ast/PatioSerializer.java | 15 +++++++++++---- 7 files changed, 41 insertions(+), 20 deletions(-) delete mode 100644 src/main/java/org/shedlang/compiler/patio/ast/PatioDataElement.java create mode 100644 src/main/java/org/shedlang/compiler/patio/ast/PatioDataElementImmutable.java create mode 100644 src/main/java/org/shedlang/compiler/patio/ast/PatioDataElementMutable.java (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java index 9e845a07..c884eee6 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java @@ -35,10 +35,13 @@ public class WasmPatioCodeGen { for (var patioCompilationUnitElement : patioCompilationUnit.elements()) { switch (patioCompilationUnitElement) { - case PatioDataElement patioDataElement -> { + case PatioDataElementImmutable patioDataElementImmutable -> { + throw new RuntimeException("TODO"); + } + case PatioDataElementMutable patioDataElementMutable -> { wasmMemoryBuilder = wasmMemoryBuilder.add( - patioDataElement.name(), - new byte[sizeOf(patioDataElement.layout())], + patioDataElementMutable.name(), + new byte[sizeOf(patioDataElementMutable.layout())], WasmAlignment.ALIGN_32_BIT ).memory(); } diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java index a1c4d846..4fe625f3 100644 --- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java +++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java @@ -232,7 +232,7 @@ public record PatioCodeGenContext( } public PatioCodeGenContext addDataElement(String name, PatioDataLayout layout, Source source) { - var dataElement = new PatioDataElement(name, layout, source); + var dataElement = new PatioDataElementMutable(name, layout, source); return addCompilationUnitElement(dataElement); } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/PatioCompilationUnitElement.java b/src/main/java/org/shedlang/compiler/patio/ast/PatioCompilationUnitElement.java index 61cccb91..6caafb3d 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/PatioCompilationUnitElement.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioCompilationUnitElement.java @@ -2,7 +2,7 @@ package org.shedlang.compiler.patio.ast; import org.shedlang.compiler.sources.Source; -public sealed interface PatioCompilationUnitElement permits PatioDataElement, PatioFunctionDeclaration, PatioFunctionDefinition { +public sealed interface PatioCompilationUnitElement permits PatioDataElementImmutable, PatioDataElementMutable, PatioFunctionDeclaration, PatioFunctionDefinition { String name(); Source source(); } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/PatioDataElement.java b/src/main/java/org/shedlang/compiler/patio/ast/PatioDataElement.java deleted file mode 100644 index 7be5dfd3..00000000 --- a/src/main/java/org/shedlang/compiler/patio/ast/PatioDataElement.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.shedlang.compiler.patio.ast; - -import org.shedlang.compiler.patio.ast.types.PatioDataLayout; -import org.shedlang.compiler.sources.Source; - -public record PatioDataElement( - String name, - PatioDataLayout layout, - Source source -) implements PatioCompilationUnitElement { -} diff --git a/src/main/java/org/shedlang/compiler/patio/ast/PatioDataElementImmutable.java b/src/main/java/org/shedlang/compiler/patio/ast/PatioDataElementImmutable.java new file mode 100644 index 00000000..14c2bee2 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioDataElementImmutable.java @@ -0,0 +1,11 @@ +package org.shedlang.compiler.patio.ast; + +import org.shedlang.compiler.patio.ast.types.PatioDataValue; +import org.shedlang.compiler.sources.Source; + +public record PatioDataElementImmutable( + String name, + PatioDataValue value, + Source source +) implements PatioCompilationUnitElement { +} diff --git a/src/main/java/org/shedlang/compiler/patio/ast/PatioDataElementMutable.java b/src/main/java/org/shedlang/compiler/patio/ast/PatioDataElementMutable.java new file mode 100644 index 00000000..ad38bbc8 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioDataElementMutable.java @@ -0,0 +1,11 @@ +package org.shedlang.compiler.patio.ast; + +import org.shedlang.compiler.patio.ast.types.PatioDataLayout; +import org.shedlang.compiler.sources.Source; + +public record PatioDataElementMutable( + String name, + PatioDataLayout layout, + Source source +) implements PatioCompilationUnitElement { +} 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 4b7c32d4..095d2d3d 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java @@ -81,11 +81,18 @@ public class PatioSerializer { private static Tree compilationUnitElementToTree(PatioCompilationUnitElement element) { return switch (element) { - case PatioDataElement dataElement -> + case PatioDataElementImmutable dataElementImmutable -> treeList( - treeIdentifier("data"), - treeString(dataElement.name()), - dataLayoutToTree(dataElement.layout()) + treeIdentifier("data-immutable"), + treeString(dataElementImmutable.name()), + dataValueToTree(dataElementImmutable.value()) + ); + + case PatioDataElementMutable dataElementMutable -> + treeList( + treeIdentifier("data-mutable"), + treeString(dataElementMutable.name()), + dataLayoutToTree(dataElementMutable.layout()) ); case PatioFunctionDeclaration functionDeclaration -> -- cgit v1.2.3