dart-native / dart-native/codegen
生成 Dart 版的 Foundation
- Dominant language
- JavaScript
- Stars
- 81
- Forks
- 4
- Avg merge
- 1d 9h
- Merged PRs (30d)
- 1
Description
先用 Foundation 试水,遇到的问题列在这个 Issue 里,逐个解决:
1. 生成代码功能问题:
- [x] 枚举优化: NS_ERROR_ENUM, NS_CLOSED_ENUM
- [ ] 区分泛型和协议,语法很相似,包含参数、返回值中的。('id' 和 `NSArray` 分别转成 `XXXProtocol ` 和 `List`)
- [ ] 生成函数指针声明(FunctionPointer), 处理含有函数指针的内容,如
```
@property (readonly, copy) NSArray *executionBlocks;
@property (nullable) NSUInteger (*hashFunction)(const void *item, NSUInteger (* _Nullable size)(const void *item));
```
- [ ] 重构 `typedef`(现在写死成解析 `Block`,应区分其他情况,比如定义函数指针)
- [x] 解析 `@property (readonly) const void *bytes NS_RETURNS_INNER_POINTER;` 时误把 `bytes` 当做类型,原因跟 `typeSpecifier` 出现多次有关。
- [x] 生成 `API_DEPRECATED_WITH_REPLACEMENT` 等
~- [ ] 生成常量声明,如:`FOUNDATION_EXPORT double const foo;`~
~- [ ] 生成函数声明,如 `FOUNDATION_EXPORT NSObject * _Nullable NXReadNSObjectFromCoder(NSCoder *decoder) API_DEPRECATED("Not supported", macos(10.0,10.5), ios(2.0,2.0), watchos(2.0,2.0), tvos(9.0,9.0));`~
- [ ] (可能包含上面的问题)**解决 `flutter format` 后的所有 Dart 语法报错问题**
2. 解析报错问题:
- [x] `NSBundle.h` 报错 `line 245:109 no viable alternative at input 'FOUNDATION_EXPORT NSNotificationName const NSBundleResourceRequestLowDiskSpaceNotification API_AVAILABLE(ios(9.0'`
- [x] `NSCompoundPredicate.h, NSData.h` 报错 `line 11:64 extraneous input '<' expecting {';', ','}`
- [x] `NSCompoundPredicate.h` 报错 `line 34:0 mismatched input '+' expecting '@end'`
- [x] `NSCompoundPredicate.h` 报错 `line 34:80 extraneous input ')' expecting {'BOOL', 'Class', 'bycopy', 'byref', 'id', 'IMP', 'in', 'inout', 'oneway', 'out', 'Protocol', 'SEL', 'self', 'super', 'atomic', 'nonatomic', 'retain', '__autoreleasing', '__block', '__bridge_retained', '__bridge_transfer', '__covariant', '__contravariant', '__deprecated', '__kindof', '__unused', NULL_UNSPECIFIED, NULLABLE, NONNULL, 'null_resettable', 'NS_INLINE', 'NS_ENUM', 'NS_OPTIONS', 'assign', 'copy', 'getter', 'setter', 'strong', 'readonly', 'readwrite', 'weak', 'unsafe_unretained', 'IBOutlet', 'IBOutletCollection', 'IBInspectable', 'IB_DESIGNABLE', IDENTIFIER, LP}`
- [x] `NSCompoundPredicate.h` 报错 `line 34:95 missing ';' at 'NS_SWIFT_NAME'`
- [x] `NSException.h` 报错 `line 79:39 mismatched input '(' expecting ';'`
3. 内存问题:
- [x] 目前针对单个大文件的 workaround 为提升老生代内存上限,多个文件开多线程并行可 fix
```
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
1: 0x101018fd1 node::Abort() (.cold.1) [/usr/local/bin/node]
2: 0x10008632b node::FatalError(char const*, char const*) [/usr/local/bin/node]
3: 0x10008646c node::OnFatalError(char const*, char const*) [/usr/local/bin/node]
4: 0x100187727 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/usr/local/bin/node]
5: 0x1001876c7 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/usr/local/bin/node]
6: 0x100312e75 v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/usr/local/bin/node]
7: 0x10031ae5c v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/usr/local/bin/node]
8: 0x1002f0907 v8::internal::Handle v8::internal::Factory::NewWeakFixedArrayWithMap(v8::internal::RootIndex, int, v8::internal::AllocationType) [/usr/local/bin/node]
9: 0x1002f07f9 v8::internal::Factory::NewTransitionArray(int, int) [/usr/local/bin/node]
10: 0x10055a618 v8::internal::TransitionsAccessor::Insert(v8::internal::Handle, v8::internal::Handle, v8::internal::SimpleTransitionFlag) [/usr/local/bin/node]
11: 0x10050695a v8::internal::Map::ConnectTransition(v8::internal::Isolate*, v8::internal::Handle, v8::internal::Handle, v8::internal::Handle, v8::internal::SimpleTransitionFlag) [/usr/local/bin/node]
12: 0x100506d08 v8::internal::Map::CopyReplaceDescriptors(v8::internal::Isolate*, v8::internal::Handle, v8::internal::Handle, v8::internal::Handle, v8::internal::TransitionFlag, v8::internal::MaybeHandle, char const*, v8::internal::SimpleTransitionFlag) [/usr/local/bin/node]
13: 0x100501ce4 v8::internal::Map::CopyAddDescriptor(v8::internal::Isolate*, v8::internal::Handle, v8::internal::Descriptor*, v8::internal::TransitionFlag) [/usr/local/bin/node]
14: 0x100501a16 v8::internal::Map::CopyWithField(v8::internal::Isolate*, v8::internal::Handle, v8::internal::Handle, v8::internal::Handle, v8::internal::PropertyAttributes, v8::internal::PropertyConstness, v8::internal::Representation, v8::internal::TransitionFlag) [/usr/local/bin/node]
15: 0x1005082b7 v8::internal::Map::TransitionToDataProperty(v8::internal::Isolate*, v8::internal::Handle, v8::internal::Handle, v8::internal::Handle, v8::internal::PropertyAttributes, v8::internal::PropertyConstness, v8::internal::StoreOrigin) [/usr/local/bin/node]
16: 0x1004fb1d9 v8::internal::LookupIterator::PrepareTransitionToDataProperty(v8::internal::Handle, v8::internal::Handle, v8::internal::PropertyAttributes, v8::internal::StoreOrigin) [/usr/local/bin/node]
17: 0x100527a03 v8::internal::Object::AddDataProperty(v8::internal::LookupIterator*, v8::internal::Handle, v8::internal::PropertyAttributes, v8::Maybe, v8::internal::StoreOrigin) [/usr/local/bin/node]
18: 0x10064933c v8::internal::Runtime::SetObjectProperty(v8::internal::Isolate*, v8::internal::Handle, v8::internal::Handle, v8::internal::Handle, v8::internal::StoreOrigin, v8::Maybe) [/usr/local/bin/node]
19: 0x10064c7f5 v8::internal::Runtime_SetKeyedProperty(int, unsigned long*, v8::internal::Isolate*) [/usr/local/bin/node]
20: 0x100972e59 Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit [/usr/local/bin/node]
21: 0xa8066bde5ca
fish: 'codegen /Applications/Xcode.app…' terminated by signal SIGABRT (Abort)
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.