aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-22 11:06:46 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-22 11:06:46 +0100
commitf525339cdcab1a44d370ffe619d46bdc2116c3b5 (patch)
tree0d817d4d33f2d444aaf5796c2dc51d03129e0494 /src/main/java
parent8f92d8d255989dbb093cc91d67b801cf7ee038ba (diff)
Add struct as Patio data value
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java10
-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/PatioDataValueStruct.java6
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValues.java4
4 files changed, 21 insertions, 1 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 3bf96507..0c00ee09 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java
@@ -340,6 +340,16 @@ public class PatioSerializer {
treeIdentifier("int"),
treeIdentifier(Integer.toString(int_.value()))
);
+
+ case PatioDataValueStruct struct ->
+ treeList(
+ treeIdentifier("struct"),
+ treeList(
+ struct.elements().stream()
+ .map(element -> dataValueToTree(element))
+ .toList()
+ )
+ );
};
}
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 4f7a7f14..2c71d9df 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 PatioDataValueArray, PatioDataValueByte, PatioDataValueInt {
+public sealed interface PatioDataValue permits PatioDataValueArray, PatioDataValueByte, PatioDataValueInt, PatioDataValueStruct {
}
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueStruct.java b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueStruct.java
new file mode 100644
index 00000000..e8f1a23e
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueStruct.java
@@ -0,0 +1,6 @@
+package org.shedlang.compiler.patio.ast.types;
+
+import java.util.List;
+
+public record PatioDataValueStruct(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 3eac715a..7c59e95b 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
@@ -16,4 +16,8 @@ public class PatioDataValues {
public static PatioDataValue int_(int value) {
return new PatioDataValueInt(value);
}
+
+ public static PatioDataValue struct(List<PatioDataValue> elements) {
+ return new PatioDataValueStruct(elements);
+ }
}