diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-21 17:09:24 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-21 17:09:24 +0100 |
| commit | 5a0f2590a6b9c20b7ba47375ebff6ebc1eef5973 (patch) | |
| tree | 1c5331ddba980abbc9acd0cff1d7ea67046766ed /src/main/java | |
| parent | 55df7731a405508545dc50e6bfdc548faaa54a30 (diff) | |
Add immutable data elements to Patio
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java | 9 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java | 2 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/patio/ast/PatioCompilationUnitElement.java | 2 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/patio/ast/PatioDataElementImmutable.java | 11 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/patio/ast/PatioDataElementMutable.java (renamed from src/main/java/org/shedlang/compiler/patio/ast/PatioDataElement.java) | 2 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java | 15 |
6 files changed, 31 insertions, 10 deletions
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/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/PatioDataElement.java b/src/main/java/org/shedlang/compiler/patio/ast/PatioDataElementMutable.java index 7be5dfd3..ad38bbc8 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/PatioDataElement.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioDataElementMutable.java @@ -3,7 +3,7 @@ package org.shedlang.compiler.patio.ast; import org.shedlang.compiler.patio.ast.types.PatioDataLayout; import org.shedlang.compiler.sources.Source; -public record PatioDataElement( +public record PatioDataElementMutable( String name, PatioDataLayout layout, Source source 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 -> |
