aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-03-22 18:06:56 +0000
committerMichael Williamson <mike@zwobble.org>2026-03-22 18:07:10 +0000
commited1c39334aaf4635119532e9ba6098a46843321a (patch)
tree94096725c218edfeb87d10e71e4c9b241a7d0920 /src/main/java
parent8430d69e1df2e9062c8fa25c5b0584966794855e (diff)
Serialize Patio types to flatbuffers
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java79
-rw-r--r--src/main/java/org/shedlang/compiler/patio/types/PatioBoolType.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/types/PatioByteType.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/types/PatioInt32Type.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/types/PatioIntType.java2
5 files changed, 83 insertions, 4 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java b/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java
index aab63bad..6e5545a5 100644
--- a/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java
+++ b/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java
@@ -129,6 +129,85 @@ public class PatioToFlatbuffers {
};
}
+ // == Types ==
+
+ public static int serializeType(
+ FlatBufferBuilder builder,
+ PatioType type
+ ) {
+ return switch (type) {
+ case PatioBoolType _ -> {
+ PatioTypeFbs.startPatioTypeFbs(builder);
+ PatioTypeFbs.addValueType(builder, PatioTypeValueFbs.PatioBoolTypeFbs);
+ yield PatioTypeFbs.endPatioTypeFbs(builder);
+ }
+
+ case PatioByteType _ -> {
+ PatioTypeFbs.startPatioTypeFbs(builder);
+ PatioTypeFbs.addValueType(builder, PatioTypeValueFbs.PatioByteTypeFbs);
+ yield PatioTypeFbs.endPatioTypeFbs(builder);
+ }
+
+ case PatioDataPtrType _ -> {
+ PatioTypeFbs.startPatioTypeFbs(builder);
+ PatioTypeFbs.addValueType(builder, PatioTypeValueFbs.PatioDataPtrTypeFbs);
+ yield PatioTypeFbs.endPatioTypeFbs(builder);
+ }
+
+ case PatioFunctionPtrType _ -> {
+ PatioTypeFbs.startPatioTypeFbs(builder);
+ PatioTypeFbs.addValueType(builder, PatioTypeValueFbs.PatioFunctionPtrTypeFbs);
+ yield PatioTypeFbs.endPatioTypeFbs(builder);
+ }
+
+ case PatioIntType _ -> {
+ PatioTypeFbs.startPatioTypeFbs(builder);
+ PatioTypeFbs.addValueType(builder, PatioTypeValueFbs.PatioIntTypeFbs);
+ yield PatioTypeFbs.endPatioTypeFbs(builder);
+ }
+
+ case PatioInt32Type _ -> {
+ PatioTypeFbs.startPatioTypeFbs(builder);
+ PatioTypeFbs.addValueType(builder, PatioTypeValueFbs.PatioInt32TypeFbs);
+ yield PatioTypeFbs.endPatioTypeFbs(builder);
+ }
+
+ case PatioVoidType _ -> {
+ PatioTypeFbs.startPatioTypeFbs(builder);
+ PatioTypeFbs.addValueType(builder, PatioTypeValueFbs.PatioVoidTypeFbs);
+ yield PatioTypeFbs.endPatioTypeFbs(builder);
+ }
+ };
+ }
+
+ public static PatioType deserializeType(PatioTypeFbs typeFbs) {
+ return switch (typeFbs.valueType()) {
+ case PatioTypeValueFbs.PatioBoolTypeFbs ->
+ PatioBoolType.INSTANCE;
+
+ case PatioTypeValueFbs.PatioByteTypeFbs ->
+ PatioByteType.INSTANCE;
+
+ case PatioTypeValueFbs.PatioDataPtrTypeFbs ->
+ PatioDataPtrType.INSTANCE;
+
+ case PatioTypeValueFbs.PatioFunctionPtrTypeFbs ->
+ PatioFunctionPtrType.INSTANCE;
+
+ case PatioTypeValueFbs.PatioIntTypeFbs ->
+ PatioIntType.INSTANCE;
+
+ case PatioTypeValueFbs.PatioInt32TypeFbs ->
+ PatioInt32Type.INSTANCE;
+
+ case PatioTypeValueFbs.PatioVoidTypeFbs ->
+ PatioVoidType.INSTANCE;
+
+ default ->
+ throw new UnsupportedOperationException("TODO");
+ };
+ }
+
// == Data layouts ==
public static int serializeDataLayout(
diff --git a/src/main/java/org/shedlang/compiler/patio/types/PatioBoolType.java b/src/main/java/org/shedlang/compiler/patio/types/PatioBoolType.java
index 17bf8d7f..2d24775e 100644
--- a/src/main/java/org/shedlang/compiler/patio/types/PatioBoolType.java
+++ b/src/main/java/org/shedlang/compiler/patio/types/PatioBoolType.java
@@ -1,5 +1,5 @@
package org.shedlang.compiler.patio.types;
public record PatioBoolType() implements PatioType {
- static final PatioBoolType INSTANCE = new PatioBoolType();
+ public static final PatioBoolType INSTANCE = new PatioBoolType();
}
diff --git a/src/main/java/org/shedlang/compiler/patio/types/PatioByteType.java b/src/main/java/org/shedlang/compiler/patio/types/PatioByteType.java
index a9cdd28a..bca56384 100644
--- a/src/main/java/org/shedlang/compiler/patio/types/PatioByteType.java
+++ b/src/main/java/org/shedlang/compiler/patio/types/PatioByteType.java
@@ -1,5 +1,5 @@
package org.shedlang.compiler.patio.types;
public record PatioByteType() implements PatioType {
- static final PatioByteType INSTANCE = new PatioByteType();
+ public static final PatioByteType INSTANCE = new PatioByteType();
}
diff --git a/src/main/java/org/shedlang/compiler/patio/types/PatioInt32Type.java b/src/main/java/org/shedlang/compiler/patio/types/PatioInt32Type.java
index f7a694f7..83b906a7 100644
--- a/src/main/java/org/shedlang/compiler/patio/types/PatioInt32Type.java
+++ b/src/main/java/org/shedlang/compiler/patio/types/PatioInt32Type.java
@@ -1,5 +1,5 @@
package org.shedlang.compiler.patio.types;
public record PatioInt32Type() implements PatioType {
- static final PatioInt32Type INSTANCE = new PatioInt32Type();
+ public static final PatioInt32Type INSTANCE = new PatioInt32Type();
}
diff --git a/src/main/java/org/shedlang/compiler/patio/types/PatioIntType.java b/src/main/java/org/shedlang/compiler/patio/types/PatioIntType.java
index 7a7171ef..2ad622d2 100644
--- a/src/main/java/org/shedlang/compiler/patio/types/PatioIntType.java
+++ b/src/main/java/org/shedlang/compiler/patio/types/PatioIntType.java
@@ -1,5 +1,5 @@
package org.shedlang.compiler.patio.types;
public record PatioIntType() implements PatioType {
- static final PatioIntType INSTANCE = new PatioIntType();
+ public static final PatioIntType INSTANCE = new PatioIntType();
}