aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-21 17:09:24 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-21 17:09:24 +0100
commit5a0f2590a6b9c20b7ba47375ebff6ebc1eef5973 (patch)
tree1c5331ddba980abbc9acd0cff1d7ea67046766ed /src/main/java
parent55df7731a405508545dc50e6bfdc548faaa54a30 (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.java9
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/PatioCompilationUnitElement.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/PatioDataElementImmutable.java11
-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.java15
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 ->