summaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-08-01 09:24:12 +0100
committerMichael Williamson <mike@zwobble.org>2026-08-01 09:24:12 +0100
commit6b4d2a11537282947dc71a646c168ea1343d6a52 (patch)
tree091de7d0a71dda3779a13f14f221a0751552868e /src/main/java/org/zwobble
parent4524a8a16574887bfdb0ee66984709c8158470a6 (diff)
Support Box in transient-0
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java8
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java26
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");