[ffigen] Fix #577 (#609)
diff --git a/pkgs/ffigen/lib/src/code_generator/imports.dart b/pkgs/ffigen/lib/src/code_generator/imports.dart index d6dcd06..93af5ad 100644 --- a/pkgs/ffigen/lib/src/code_generator/imports.dart +++ b/pkgs/ffigen/lib/src/code_generator/imports.dart
@@ -86,8 +86,8 @@ ImportedType(ffiImport, 'UnsignedLongLong', 'int', '0'); final longLongType = ImportedType(ffiImport, 'LongLong', 'int', '0'); -final floatType = ImportedType(ffiImport, 'Float', 'double', '0'); -final doubleType = ImportedType(ffiImport, 'Double', 'double', '0'); +final floatType = ImportedType(ffiImport, 'Float', 'double', '0.0'); +final doubleType = ImportedType(ffiImport, 'Double', 'double', '0.0'); final sizeType = ImportedType(ffiImport, 'Size', 'int', '0'); final wCharType = ImportedType(ffiImport, 'WChar', 'int', '0');
diff --git a/pkgs/ffigen/lib/src/code_generator/native_type.dart b/pkgs/ffigen/lib/src/code_generator/native_type.dart index d76e7e7..dfb43a5 100644 --- a/pkgs/ffigen/lib/src/code_generator/native_type.dart +++ b/pkgs/ffigen/lib/src/code_generator/native_type.dart
@@ -36,8 +36,8 @@ SupportedNativeType.Uint16: NativeType._('Uint16', 'int', '0'), SupportedNativeType.Uint32: NativeType._('Uint32', 'int', '0'), SupportedNativeType.Uint64: NativeType._('Uint64', 'int', '0'), - SupportedNativeType.Float: NativeType._('Float', 'double', '0'), - SupportedNativeType.Double: NativeType._('Double', 'double', '0'), + SupportedNativeType.Float: NativeType._('Float', 'double', '0.0'), + SupportedNativeType.Double: NativeType._('Double', 'double', '0.0'), SupportedNativeType.IntPtr: NativeType._('IntPtr', 'int', '0'), SupportedNativeType.UintPtr: NativeType._('UintPtr', 'int', '0'), };
diff --git a/pkgs/ffigen/test/native_objc_test/block_test.dart b/pkgs/ffigen/test/native_objc_test/block_test.dart index fd8c491..87a735a 100644 --- a/pkgs/ffigen/test/native_objc_test/block_test.dart +++ b/pkgs/ffigen/test/native_objc_test/block_test.dart
@@ -101,6 +101,14 @@ expect(value, 123); }); + test('Float block', () { + final block = ObjCBlock2.fromFunction(lib, (double x) { + return x + 4.56; + }); + expect(block(1.23), closeTo(5.79, 1e-6)); + expect(BlockTester.callFloatBlock_(lib, block), closeTo(5.79, 1e-6)); + }); + Pointer<Void> funcPointerBlockRefCountTest() { final block = ObjCBlock1.fromFunctionPointer( lib, Pointer.fromFunction(_add100, 999));
diff --git a/pkgs/ffigen/test/native_objc_test/block_test.m b/pkgs/ffigen/test/native_objc_test/block_test.m index 5e0174f..9e619b6 100644 --- a/pkgs/ffigen/test/native_objc_test/block_test.m +++ b/pkgs/ffigen/test/native_objc_test/block_test.m
@@ -6,6 +6,7 @@ #import <Foundation/NSThread.h> typedef int32_t (^IntBlock)(int32_t); +typedef float (^FloatBlock)(float); typedef void (^VoidBlock)(); // Wrapper around a block, so that our Dart code can test creating and invoking @@ -21,6 +22,7 @@ - (void)pokeBlock; + (void)callOnSameThread:(VoidBlock)block; + (NSThread*)callOnNewThread:(VoidBlock)block; ++ (float)callFloatBlock:(FloatBlock)block; @end @implementation BlockTester @@ -86,4 +88,8 @@ return [[NSThread alloc] initWithBlock: block]; } ++ (float)callFloatBlock:(FloatBlock)block { + return block(1.23); +} + @end