aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/shedlang/compiler
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-03-26 21:09:32 +0000
committerMichael Williamson <mike@zwobble.org>2026-03-26 21:09:32 +0000
commitb6dc495cf53e882d1c2e332d18322db1e8def9e4 (patch)
tree4ecd953d959e09ec7fae75f0ec08cd3db89aaa07 /src/main/java/org/shedlang/compiler
parentcf04670f145879bc3877326698a4d3d0b9f2a988 (diff)
Serialize Patio compilation units to flatbuffers
Diffstat (limited to 'src/main/java/org/shedlang/compiler')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java40
1 files changed, 40 insertions, 0 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 614f368c..e7dd1522 100644
--- a/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java
+++ b/src/main/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffers.java
@@ -17,6 +17,46 @@ import java.util.Optional;
import java.util.function.Function;
public class PatioToFlatbuffers {
+ // == Compilation units ==
+
+ public static int serializeCompilationUnit(
+ FlatBufferBuilder builder,
+ PatioCompilationUnit compilationUnit
+ ) {
+ var sourceFbs = SourceToFlatbuffers.serializeSource(
+ builder,
+ compilationUnit.source(),
+ Optional.empty()
+ );
+
+ var elementsOffsetsFbs = compilationUnit.elements().stream()
+ .mapToInt(element -> serializeCompilationUnitElement(builder, element, compilationUnit.source()))
+ .toArray();
+ var elementsVectorFbs = PatioCompilationUnitFbs.createElementsVector(builder, elementsOffsetsFbs);
+
+ PatioCompilationUnitFbs.startPatioCompilationUnitFbs(builder);
+ PatioCompilationUnitFbs.addSource(builder, sourceFbs);
+ PatioCompilationUnitFbs.addElements(builder, elementsVectorFbs);
+ return PatioCompilationUnitFbs.endPatioCompilationUnitFbs(builder);
+ }
+
+ public static PatioCompilationUnit deserializeCompilationUnit(
+ PatioCompilationUnitFbs compilationUnitFbs
+ ) {
+ var source = SourceToFlatbuffers.deserializeSource(
+ compilationUnitFbs.source(),
+ Optional.empty()
+ );
+
+ var elements = deserializeVector(
+ compilationUnitFbs::elements,
+ compilationUnitFbs.elementsLength(),
+ elementFbs -> deserializeCompilationUnitElement(elementFbs, source)
+ );
+
+ return new PatioCompilationUnit(elements, source);
+ }
+
// == Compilation unit elements ==
public static int serializeCompilationUnitElement(