aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-21 16:55:25 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-21 16:55:25 +0100
commit55df7731a405508545dc50e6bfdc548faaa54a30 (patch)
tree97914cbf8c7ae60c91ad330960bc1ccd8dbfb7d4 /src/main/java/org
parent107df69fcf9d53c320165e7f3f946c03e3f5bfc4 (diff)
Add Patio data value array
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java15
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValue.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueArray.java6
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValues.java6
4 files changed, 27 insertions, 2 deletions
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 62e7fa68..4b7c32d4 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java
@@ -312,8 +312,21 @@ public class PatioSerializer {
private static Tree dataValueToTree(PatioDataValue value) {
return switch (value) {
+ case PatioDataValueArray array ->
+ treeList(
+ treeIdentifier("array"),
+ treeList(
+ array.elements().stream()
+ .map(element -> dataValueToTree(element))
+ .toList()
+ )
+ );
+
case PatioDataValueByte byte_ ->
- treeList(treeIdentifier("byte"), treeIdentifier(String.format("0x%02x", byte_.value())));
+ treeList(
+ treeIdentifier("byte"),
+ treeIdentifier(String.format("0x%02x", byte_.value()))
+ );
};
}
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValue.java b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValue.java
index 5ccf1f21..e2b9c7a9 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValue.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValue.java
@@ -1,4 +1,4 @@
package org.shedlang.compiler.patio.ast.types;
-public sealed interface PatioDataValue permits PatioDataValueByte {
+public sealed interface PatioDataValue permits PatioDataValueArray, PatioDataValueByte {
}
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueArray.java b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueArray.java
new file mode 100644
index 00000000..136ef54b
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueArray.java
@@ -0,0 +1,6 @@
+package org.shedlang.compiler.patio.ast.types;
+
+import java.util.List;
+
+public record PatioDataValueArray(List<PatioDataValue> elements) implements PatioDataValue {
+}
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValues.java b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValues.java
index 88dd0898..ad011ef5 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValues.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValues.java
@@ -1,8 +1,14 @@
package org.shedlang.compiler.patio.ast.types;
+import java.util.List;
+
public class PatioDataValues {
private PatioDataValues() {}
+ public static PatioDataValue array(List<PatioDataValue> elements) {
+ return new PatioDataValueArray(elements);
+ }
+
public static PatioDataValue byte_(int value) {
return new PatioDataValueByte((byte) value);
}