Bump version to 1.0.0, minor fixes (#101)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6d143e5..c04cf39 100644
--- a/CHANGELOG.md
+++ b/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/lib/src/header_parser/type_extractor/extractor.dart b/lib/src/header_parser/type_extractor/extractor.dart
index 3e74ea6..f2ec345 100644
--- a/lib/src/header_parser/type_extractor/extractor.dart
+++ b/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/lib/src/header_parser/utils.dart b/lib/src/header_parser/utils.dart
index 171113d..df41d6f 100644
--- a/lib/src/header_parser/utils.dart
+++ b/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/pubspec.yaml b/pubspec.yaml
index 7aa1133..36302e6 100644
--- a/pubspec.yaml
+++ b/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/test/header_parser_tests/native_func_typedef.h b/test/header_parser_tests/native_func_typedef.h
index 38551e9..f799b9d 100644
--- a/test/header_parser_tests/native_func_typedef.h
+++ b/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/test/header_parser_tests/native_func_typedef_test.dart b/test/header_parser_tests/native_func_typedef_test.dart
index c2826d4..7409609 100644
--- a/test/header_parser_tests/native_func_typedef_test.dart
+++ b/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/test/header_parser_tests/typedef.h b/test/header_parser_tests/typedef.h
index 3e9d996..9dda096 100644
--- a/test/header_parser_tests/typedef.h
+++ b/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/test/header_parser_tests/typedef_test.dart b/test/header_parser_tests/typedef_test.dart
index 7f7646c..6b3b971 100644
--- a/test/header_parser_tests/typedef_test.dart
+++ b/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/test/large_integration_tests/large_test.dart b/test/large_integration_tests/large_test.dart
index 2815a1f..697ea92 100644
--- a/test/large_integration_tests/large_test.dart
+++ b/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}