From ed1c39334aaf4635119532e9ba6098a46843321a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 22 Mar 2026 18:06:56 +0000 Subject: Serialize Patio types to flatbuffers --- .../patio/serialization/PatioToFlatbuffers.java | 79 ++++++++++++++++++++++ .../compiler/patio/types/PatioBoolType.java | 2 +- .../compiler/patio/types/PatioByteType.java | 2 +- .../compiler/patio/types/PatioInt32Type.java | 2 +- .../compiler/patio/types/PatioIntType.java | 2 +- 5 files changed, 83 insertions(+), 4 deletions(-) (limited to 'src/main/java') 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(); } -- cgit v1.2.3