-
Notifications
You must be signed in to change notification settings - Fork 0
[experimental] confirm ffigen feasibility #10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
ffigen $ dart sample.dart
Edax version 4.4 Jan 20 2021 21:16:12 for Apple
copyright 1998 - 2017 Richard Delorme
0
34628173824 すごい。ただ、問題が 2 つある。
$ pub run ffigen --config ffigen.yaml
Running in Directory: '/Users/shimizunaoki/DartProjects/libedax4dart'
[WARNING]: Prefer adding Key 'description' to your config.
Input Headers: [edax-reversi/include/stdbool.h, edax-reversi/src/ui.h]
[SEVERE] : Header edax-reversi/src/ui.h: Total errors/warnings: 1.
[SEVERE] : edax-reversi/src/board.h:17:10: fatal error: 'stdbool.h' file not found [Lexical or Preprocessor Issue]
[SEVERE] : Null check operator used on a null value
[SEVERE] : #0 Type.isIncompleteStruct (package:ffigen/src/code_generator/type.dart:167:45)
dart-lang/ffigen#1 _structMembersVisitor (package:ffigen/src/header_parser/sub_parsers/structdecl_parser.dart:156:21)
dart-lang/ffigen#2 _FfiCallback_structMembersVisitor (dart:ffi)
dart-lang/native#540 FfiTrampoline (dart:ffi)
dart-lang/native#541 Clang.clang_visitChildren (package:ffigen/src/header_parser/clang_bindings/clang_bindings.dart:703:59)
dart-lang/native#542 _setStructMembers (package:ffigen/src/header_parser/sub_parsers/structdecl_parser.dart:87:28)
dart-lang/native#543 parseStructDeclaration (package:ffigen/src/header_parser/sub_parsers/structdecl_parser.dart:71:5)
dart-lang/native#530 _rootCursorVisitor (package:ffigen/src/header_parser/translation_unit_parser.dart:54:25)
dart-lang/native#531 _FfiCallback_rootCursorVisitor (dart:ffi)
dart-lang/ffigen#9 FfiTrampoline (dart:ffi)
dart-lang/native#532 Clang.clang_visitChildren (package:ffigen/src/header_parser/clang_bindings/clang_bindings.dart:703:59)
dart-lang/native#533 parseTranslationUnit (package:ffigen/src/header_parser/translation_unit_parser.dart:28:28)
dart-lang/native#534 parseToBindings (package:ffigen/src/header_parser/parser.dart:101:21)
dart-lang/native#535 parse (package:ffigen/src/header_parser/parser.dart:24:20)
dart-lang/native#536 main (package:ffigen/src/executables/ffigen.dart:42:19)
dart-lang/ffigen#15 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:281:32)
dart-lang/ffigen#16 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
[SEVERE] : Exception: Exception thrown in a dart function called via C, use --verbose to see more details
[SEVERE] : #0 visitChildrenResultChecker (package:ffigen/src/header_parser/utils.dart:21:5)
dart-lang/ffigen#1 _setStructMembers (package:ffigen/src/header_parser/sub_parsers/structdecl_parser.dart:94:3)
dart-lang/ffigen#2 parseStructDeclaration (package:ffigen/src/header_parser/sub_parsers/structdecl_parser.dart:71:5)
dart-lang/native#540 _rootCursorVisitor (package:ffigen/src/header_parser/translation_unit_parser.dart:54:25)
dart-lang/native#541 _FfiCallback_rootCursorVisitor (dart:ffi)
dart-lang/native#542 FfiTrampoline (dart:ffi)
dart-lang/native#543 Clang.clang_visitChildren (package:ffigen/src/header_parser/clang_bindings/clang_bindings.dart:703:59)
dart-lang/native#530 parseTranslationUnit (package:ffigen/src/header_parser/translation_unit_parser.dart:28:28)
dart-lang/native#531 parseToBindings (package:ffigen/src/header_parser/parser.dart:101:21)
dart-lang/ffigen#9 parse (package:ffigen/src/header_parser/parser.dart:24:20)
dart-lang/native#532 main (package:ffigen/src/executables/ffigen.dart:42:19)
dart-lang/native#533 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:281:32)
dart-lang/native#534 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
Unhandled exception:
Exception: Exception thrown in a dart function called via C, use --verbose to see more details
#0 visitChildrenResultChecker (package:ffigen/src/header_parser/utils.dart:21:5)
dart-lang/ffigen#1 parseTranslationUnit (package:ffigen/src/header_parser/translation_unit_parser.dart:35:3)
dart-lang/ffigen#2 parseToBindings (package:ffigen/src/header_parser/parser.dart:101:21)
dart-lang/native#540 parse (package:ffigen/src/header_parser/parser.dart:24:20)
dart-lang/native#541 main (package:ffigen/src/executables/ffigen.dart:42:19)
dart-lang/native#542 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:281:32)
dart-lang/native#543 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12) |
まあエラーにもある通り、なんか null check operator を null に当てて死んでるぽい。 まあ dev 系リリースには null safety の対応が漏れているとかでバグってんのかな、多分。追いきれてはない。 |
んー、inline struct array の workaround 対応部分だけをガッともらって、今のベタ実装に入れるのが安定ぽいなあ。 |
うん、決めた。 ffigen は採用しない。(実験段階と明記されているのだからしょうがない。) |
^ の生成ファイル貼っとく。 |
ffigen が今回の用途に耐えれるかを確認する、実験 PR なのでマージはしない。
作業ログとして立ててある。
ffigen は実験段階なことは分かってるが、以下のことを考慮すると contribute 前提で導入しちゃってもいい気持ち。