diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-08-01 09:24:12 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-08-01 09:24:12 +0100 |
| commit | 6b4d2a11537282947dc71a646c168ea1343d6a52 (patch) | |
| tree | 091de7d0a71dda3779a13f14f221a0751552868e /src/main/java | |
| parent | 4524a8a16574887bfdb0ee66984709c8158470a6 (diff) | |
Support Box in transient-0
Diffstat (limited to 'src/main/java')
2 files changed, 30 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java index dd81f99..e27c606 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java @@ -701,7 +701,9 @@ public class JavaTransient0Generator implements Generator { private List<JavaBlockStatement> generateEncode(JavaExpression value, Type type) { return switch (type) { case ConstructedNativeType constructedNativeType -> { - if (constructedNativeType.constructor().equals(NativeTypes.LIST)) { + if (constructedNativeType.constructor().equals(NativeTypes.BOX)) { + yield generateEncode(value, constructedNativeType.args().getFirst()); + } else if (constructedNativeType.constructor().equals(NativeTypes.LIST)) { yield generateEncodeList(value, constructedNativeType.args().getFirst()); } else if (constructedNativeType.constructor().equals(NativeTypes.OPTION)) { yield generateEncodeOption(value, constructedNativeType.args().getFirst()); @@ -775,7 +777,9 @@ public class JavaTransient0Generator implements Generator { private List<JavaBlockStatement> generateDecode(JavaIdentifier target, Type type) { return switch (type) { case ConstructedNativeType constructedNativeType -> { - if (constructedNativeType.constructor().equals(NativeTypes.LIST)) { + if (constructedNativeType.constructor().equals(NativeTypes.BOX)) { + yield generateDecode(target, constructedNativeType.args().getFirst()); + } else if (constructedNativeType.constructor().equals(NativeTypes.LIST)) { yield generateDecodeList(target, constructedNativeType.args().getFirst()); } else if (constructedNativeType.constructor().equals(NativeTypes.OPTION)) { yield generateDecodeOption(target, constructedNativeType.args().getFirst()); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java index ea1949d..981e02b 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java @@ -578,7 +578,9 @@ public class RustTransient0Generator implements Generator { private RustStatement generateEncode(RustExpression value, Type type) { return switch (type) { case ConstructedNativeType constructedNativeType -> { - if (constructedNativeType.constructor().equals(NativeTypes.LIST)) { + if (constructedNativeType.constructor().equals(NativeTypes.BOX)) { + yield generateEncodeBox(value, constructedNativeType.args().getFirst()); + } else if (constructedNativeType.constructor().equals(NativeTypes.LIST)) { yield generateEncodeList(value, constructedNativeType.args().getFirst()); } else if (constructedNativeType.constructor().equals(NativeTypes.OPTION)) { yield generateEncodeOption(value, constructedNativeType.args().getFirst()); @@ -618,7 +620,9 @@ public class RustTransient0Generator implements Generator { private RustExpression generateDecode(Type type) { return switch (type) { case ConstructedNativeType constructedNativeType -> { - if (constructedNativeType.constructor().equals(NativeTypes.LIST)) { + if (constructedNativeType.constructor().equals(NativeTypes.BOX)) { + yield generateDecodeBox(constructedNativeType.args().getFirst()); + } else if (constructedNativeType.constructor().equals(NativeTypes.LIST)) { yield generateDecodeList(constructedNativeType.args().getFirst()); } else if (constructedNativeType.constructor().equals(NativeTypes.OPTION)) { yield generateDecodeOption(constructedNativeType.args().getFirst()); @@ -685,6 +689,24 @@ public class RustTransient0Generator implements Generator { )); } + private RustStatement generateEncodeBox(RustExpression value, Type elementType) { + return generateEncode( + methodCall( + value, + RustIdentifier.of("as_ref"), + List.of() + ), + elementType + ); + } + + private RustExpression generateDecodeBox(Type elementType) { + return new RustCallExpression( + RustTypes.BOX.addSegment(RustPathSegment.of("new")), + List.of(generateDecode(elementType)) + ); + } + private RustStatement generateEncodeList(RustExpression value, Type elementType) { var element = RustIdentifier.of("element"); |
