[ffigen] Bump version to 1.0.0, minor fixes (#101)
diff --git a/pkgs/ffigen/CHANGELOG.md b/pkgs/ffigen/CHANGELOG.md index 6d143e5..c04cf39 100644 --- a/pkgs/ffigen/CHANGELOG.md +++ b/pkgs/ffigen/CHANGELOG.md
@@ -1,3 +1,8 @@ +# 1.0.0 +- Bump version to 1.0.0. +- Handle unimplememnted function pointers causing errors. +- Log lexical/semantic issues in headers as SEVERE. + # 0.3.0 - Added support for including/excluding/renaming _un-named enums_ using key `unnamed_enums`.
diff --git a/pkgs/ffigen/lib/src/header_parser/type_extractor/extractor.dart b/pkgs/ffigen/lib/src/header_parser/type_extractor/extractor.dart index 3e74ea6..f2ec345 100644 --- a/pkgs/ffigen/lib/src/header_parser/type_extractor/extractor.dart +++ b/pkgs/ffigen/lib/src/header_parser/type_extractor/extractor.dart
@@ -143,7 +143,7 @@ if (pt.broadType == BroadType.Struct) { return Type.unimplemented('Struct by value in function parameter.'); - } else if (pt.broadType == BroadType.Unimplemented) { + } else if (pt.getBaseType().broadType == BroadType.Unimplemented) { return Type.unimplemented('Function parameter has an unsupported type.'); }
diff --git a/pkgs/ffigen/lib/src/header_parser/utils.dart b/pkgs/ffigen/lib/src/header_parser/utils.dart index 171113d..df41d6f 100644 --- a/pkgs/ffigen/lib/src/header_parser/utils.dart +++ b/pkgs/ffigen/lib/src/header_parser/utils.dart
@@ -34,7 +34,7 @@ return; } - logger.warning('Header $header: Total errors/warnings: $total.'); + logger.severe('Header $header: Total errors/warnings: $total.'); for (var i = 0; i < total; i++) { final diag = clang.clang_getDiagnostic(tu, i); final cxstring = clang.clang_formatDiagnostic_wrap( @@ -45,7 +45,7 @@ clang_types .CXDiagnosticDisplayOptions.CXDiagnostic_DisplayCategoryName, ); - logger.warning(' ' + cxstring.toStringAndDispose()); + logger.severe(' ' + cxstring.toStringAndDispose()); clang.clang_disposeDiagnostic(diag); } }
diff --git a/pkgs/ffigen/pubspec.yaml b/pkgs/ffigen/pubspec.yaml index 7aa1133..36302e6 100644 --- a/pkgs/ffigen/pubspec.yaml +++ b/pkgs/ffigen/pubspec.yaml
@@ -3,7 +3,7 @@ # BSD-style license that can be found in the LICENSE file. name: ffigen -version: 0.3.0 +version: 1.0.0 homepage: https://github.com/dart-lang/ffigen description: Experimental generator for FFI bindings, using LibClang to parse C header files.
diff --git a/pkgs/ffigen/test/header_parser_tests/native_func_typedef.h b/pkgs/ffigen/test/header_parser_tests/native_func_typedef.h index 38551e9..f799b9d 100644 --- a/pkgs/ffigen/test/header_parser_tests/native_func_typedef.h +++ b/pkgs/ffigen/test/header_parser_tests/native_func_typedef.h
@@ -8,3 +8,6 @@ }; void func(void (*unnamed1)(void (*unnamed2)())); + +// This will be removed because 'long double' is unsupported. +void funcNestedUnimplemented(void (*unnamed1)(void (*unnamed2)(long double)));
diff --git a/pkgs/ffigen/test/header_parser_tests/native_func_typedef_test.dart b/pkgs/ffigen/test/header_parser_tests/native_func_typedef_test.dart index c2826d4..7409609 100644 --- a/pkgs/ffigen/test/header_parser_tests/native_func_typedef_test.dart +++ b/pkgs/ffigen/test/header_parser_tests/native_func_typedef_test.dart
@@ -7,6 +7,7 @@ import 'package:ffigen/src/code_generator.dart'; import 'package:ffigen/src/header_parser.dart' as parser; import 'package:ffigen/src/config_provider.dart'; +import 'package:logging/logging.dart'; import 'package:test/test.dart'; import 'package:yaml/yaml.dart' as yaml; import 'package:ffigen/src/strings.dart' as strings; @@ -17,7 +18,7 @@ void main() { group('unnamed_enums_test', () { setUpAll(() { - logWarnings(); + logWarnings(Level.SEVERE); actual = parser.parse( Config.fromYaml(yaml.loadYaml(''' ${strings.name}: 'NativeLibrary' @@ -30,6 +31,11 @@ ); }); + test('Remove deeply nested unsupported types', () { + expect(() => actual.getBindingAsString('funcNestedUnimplemented'), + throwsA(TypeMatcher<NotFoundException>())); + }); + test('Expected bindings', () { final gen = actual.generate(); // Writing to file for debug purpose.
diff --git a/pkgs/ffigen/test/header_parser_tests/typedef.h b/pkgs/ffigen/test/header_parser_tests/typedef.h index 3e9d996..9dda096 100644 --- a/pkgs/ffigen/test/header_parser_tests/typedef.h +++ b/pkgs/ffigen/test/header_parser_tests/typedef.h
@@ -40,14 +40,11 @@ typedef enum { - + a=0 } AnonymousEnumInTypedef; -// These typerefs do not affect the name of AnonymousEnumInTypedef. -typedef AnonymousEnumInTypedef Typeref1; -typedef AnonymousEnumInTypedef Typeref2; // Name from global namespace is used. typedef enum _NamedEnumInTypedef { - + b=0 } NamedEnumInTypedef;
diff --git a/pkgs/ffigen/test/header_parser_tests/typedef_test.dart b/pkgs/ffigen/test/header_parser_tests/typedef_test.dart index 7f7646c..6b3b971 100644 --- a/pkgs/ffigen/test/header_parser_tests/typedef_test.dart +++ b/pkgs/ffigen/test/header_parser_tests/typedef_test.dart
@@ -97,8 +97,18 @@ Parameter(type: Type.pointer(Type.struct(excludedNtyperef))) ], ), - EnumClass(name: 'AnonymousEnumInTypedef'), - EnumClass(name: 'NamedEnumInTypedef'), + EnumClass( + name: 'AnonymousEnumInTypedef', + enumConstants: [ + EnumConstant(name: 'a', value: 0), + ], + ), + EnumClass( + name: 'NamedEnumInTypedef', + enumConstants: [ + EnumConstant(name: 'b', value: 0), + ], + ), ], ); }
diff --git a/pkgs/ffigen/test/large_integration_tests/large_test.dart b/pkgs/ffigen/test/large_integration_tests/large_test.dart index 2815a1f..697ea92 100644 --- a/pkgs/ffigen/test/large_integration_tests/large_test.dart +++ b/pkgs/ffigen/test/large_integration_tests/large_test.dart
@@ -79,6 +79,8 @@ ${strings.description}: Bindings to SQLite. ${strings.output}: unused ${strings.arrayWorkaround}: true +# Needed for stdarg.h in MacOS +${strings.compilerOpts}: '-I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Headers/' ${strings.comments}: ${strings.style}: ${strings.any} ${strings.length}: ${strings.full}