From 5853245ec192799892a1a713f73269bbe4b03593 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 29 Aug 2026 23:29:20 +0100 Subject: Support Float64 in transient-0 --- .../javatransient0/JavaTransient0Generator.java | 38 ++++++++++++++++++++++ .../rusttransient0/RustTransient0Generator.java | 10 ++++++ 2 files changed, 48 insertions(+) (limited to 'src/main/java') 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(); + + 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.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); } -- cgit v1.2.3