summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-08-29 23:29:20 +0100
committerMichael Williamson <mike@zwobble.org>2026-08-29 23:29:20 +0100
commit5853245ec192799892a1a713f73269bbe4b03593 (patch)
treea3d46a9ee6bfcc2ab2e3cc708586891b24384111 /src/main/java
parente5b0b62785e75d19b4d852712cb6a72ea77429d2 (diff)
Support Float64 in transient-0
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java38
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java10
2 files changed, 48 insertions, 0 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 c7c9f69..8d6b2b6 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
@@ -299,6 +299,8 @@ public class JavaTransient0Generator implements Generator {
List.of(
generateEncodeBoolMethod(),
generateDecodeBoolMethod(),
+ generateEncodeFloat64Method(context),
+ generateDecodeFloat64Method(context),
generateEncodeInt8Method(),
generateDecodeInt8Method(),
generateEncodeInt32Method(),
@@ -340,6 +342,42 @@ public class JavaTransient0Generator implements Generator {
);
}
+ private JavaMethodDeclaration generateEncodeFloat64Method(Context context) {
+ var statements = generateEncode(
+ new JavaStaticMethodCall(
+ JavaTypeRef.DOUBLE_BOXED,
+ List.of(),
+ JavaIdentifier.of("doubleToLongBits"),
+ List.of(new JavaRef(VALUE_NAME))
+ ),
+ NativeTypes.INT_64,
+ context
+ );
+
+ return generateEncodeMethod(NativeTypes.FLOAT_64, new JavaBlock(statements));
+ }
+
+ private JavaMethodDeclaration generateDecodeFloat64Method(Context context) {
+ var statements = new ArrayList<JavaBlockStatement>();
+
+ var longBitsVariableName = JavaIdentifier.of("longBits");
+
+ statements.addAll(generateDecode(
+ longBitsVariableName,
+ NativeTypes.INT_64,
+ context
+ ));
+
+ statements.add(new JavaReturn(new JavaStaticMethodCall(
+ JavaTypeRef.DOUBLE_BOXED,
+ List.of(),
+ JavaIdentifier.of("longBitsToDouble"),
+ List.of(new JavaRef(longBitsVariableName))
+ )));
+
+ return generateDecodeMethod(NativeTypes.FLOAT_64, new JavaBlock(statements));
+ }
+
private JavaMethodDeclaration generateEncodeInt8Method() {
var statements = List.<JavaBlockStatement>of(
new JavaExpressionStatement(
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 1dc246f..216b96f 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
@@ -99,6 +99,8 @@ public class RustTransient0Generator implements Generator {
generateDecodeType(),
generateEncodeBoolFunction(),
generateDecodeBoolFunction(),
+ generateEncodeFloat64Function(),
+ generateDecodeFloat64Function(),
generateEncodeInt8Function(),
generateDecodeInt8Function(),
generateEncodeInt32Function(),
@@ -232,6 +234,14 @@ public class RustTransient0Generator implements Generator {
);
}
+ private RustItem generateEncodeFloat64Function() {
+ return generateEncodeIntFunction(NativeTypes.FLOAT_64);
+ }
+
+ private RustItem generateDecodeFloat64Function() {
+ return generateDecodeIntFunction(NativeTypes.FLOAT_64, 64);
+ }
+
private RustItem generateEncodeInt8Function() {
return generateEncodeIntFunction(NativeTypes.INT_8);
}