@@ -100,8 +100,8 @@ final _{{resolveName "Ffi"}}ReleaseHandle = __lib.catchArgumentError(() => __lib
100100 void Function(Pointer<Void >)
101101 >('{ {libraryName} }_{ {resolveName " FfiSnakeCase" } }_release_handle'));
102102final _{ {resolveName " Ffi" } }CreateProxy = __lib.catchArgumentError(() => __lib.nativeLibrary.lookupFunction<
103- Pointer<Void > Function(Uint64, Int32, Handle{ {> ffiFunctionPointers} }),
104- Pointer<Void > Function(int, int, Object{ {> ffiFunctionPointers} })
103+ Pointer<Void > Function(Uint64, Int32, Handle, Pointer { {> ffiFunctionPointers} }),
104+ Pointer<Void > Function(int, int, Object, Pointer { {> ffiFunctionPointers} })
105105 >('{ {libraryName} }_{ {resolveName " FfiSnakeCase" } }_create_proxy'));
106106{ {#if attributes.equatable} }{ {> dart/DartFfiEqualityFunction} }{ {/if } }
107107final _{ {resolveName " Ffi" } }GetTypeId = __lib.catchArgumentError(() => __lib.nativeLibrary.lookupFunction<
@@ -173,24 +173,23 @@ class {{resolveName}}$Impl extends __lib.NativeBase implements {{resolveName}} {
173173}
174174
175175{ {#set parent= this} }{ {#each inheritedFunctions functions} }{ {#unless isStatic} }
176- int _{ {resolveName parent " Ffi" } }{ {resolveName} }Static({ {!!
177- } }Object _obj{ {#if parameters} }, { {/if } }{ {!!
176+ void _{ {resolveName parent " Ffi" } }{ {resolveName} }Static({ {!!
177+ } }{ {resolveName parent } } _obj{ {#if parameters} }, { {/if } }{ {!!
178178} }{ {#parameters} }{ {resolveName typeRef " FfiDartTypes" } } { {resolveName} }{ {#if iter.hasNext} }, { {/if } }{ {/parameters} }{ {!!
179179} }{ {#unless returnType.isVoid} }, Pointer<{ {resolveName returnType.typeRef " FfiApiTypes" } }> _result{ {/unless} }{ {!!
180- } }{ {#if thrownType} }, Pointer<{ {resolveName exception.errorType " FfiApiTypes" } }> _error{ {/if } }) {
181- {{#if thrownType} }
182- bool _errorFlag = false;
183- { {/if } }{ {#unless returnType.isVoid} }
180+ } }{ {#if thrownType} }, Pointer<{ {resolveName exception.errorType " FfiApiTypes" } }> _error, Pointer<Int8 > _errorFlag{ {/if } }) {
181+ {{#unless returnType.isVoid} }
184182 { {resolveName returnType.typeRef} }{ {#unless returnType.typeRef.isNullable} }?{ {/unless} } _resultObject;{ {/unless} }
185183 try {
186184 {{#unless returnType.isVoid} }_resultObject = { {/unless} }{ {!!
187- } }( _obj as { {resolveName parent } }) .{ {resolveName} }({ {#parameters} }{ {!!
185+ } }_obj.{ {resolveName} }({ {#parameters} }{ {!!
188186 } }{ {#set call= " FromFfi" } }{ {> dart/DartFfiConversionCall} }{ {/set} }({ {resolveName} }){ {#if iter.hasNext} }, { {/if } }{ {!!
189187 } }{ {/parameters} });{ {#unless returnType.isVoid} }
190188 _result.value = { {#returnType} }{ {#set call= " ToFfi" } }{ {> dart/DartFfiConversionCall} }{ {/set} }{ {/returnType} }(_resultObject);{ {/unless} }
191189{ {#if thrownType} }
190+ _errorFlag.value = booleanToFfi(false);
192191 } on { {resolveName exception} } catch(e) {
193- _errorFlag = true ;
192+ _errorFlag.value = booleanToFfi( true ) ;
194193 final _errorObject = e.error;
195194 _error.value = {{#set typeRef= exception.errorType call= " ToFfi" } }{ {> dart/DartFfiConversionCall} }{ {/set} }(_errorObject);
196195{ {/if } }
@@ -199,50 +198,99 @@ int _{{resolveName parent "Ffi"}}{{resolveName}}Static({{!!
199198 { {#resolveName} }{ {#set varName= this} }{ {> dart/DartFfiReleaseHandle} }{ {/set} }{ {/resolveName} }
200199{ {/parameters} }
201200 }
202- return{ {#if thrownType} } _errorFlag ? 1 :{ {/if } } 0;
203201}
204202{ {/unless} }{ {/each} }
205203
206204{ {#each inheritedProperties properties} }{ {#unless isStatic} }
207- int _{ {resolveName parent " Ffi" } }{ {resolveName} }GetStatic(Object _obj, Pointer<{ {resolveName typeRef " FfiApiTypes" } }> _result) {
205+ void _{ {resolveName parent " Ffi" } }{ {resolveName} }GetStatic({ {resolveName parent } } _obj, Pointer<{ {resolveName typeRef " FfiApiTypes" } }> _result) {
208206 _result.value = {{#set call= " ToFfi" } }{ {> dart/DartFfiConversionCall} }{ {/set} }({ {!!
209- } }(_obj as { {resolveName parent} }).{ {resolveName} });
210- return 0;
207+ } }_obj.{ {resolveName} });
211208}
212209{ {#if setter} }
213210
214- int _{ {resolveName parent " Ffi" } }{ {resolveName} }SetStatic(Object _obj, { {resolveName typeRef " FfiDartTypes" } } _value) {
211+ void _{ {resolveName parent " Ffi" } }{ {resolveName} }SetStatic({ {resolveName parent } } _obj, { {resolveName typeRef " FfiDartTypes" } } _value) {
215212 try {
216- (_obj as {{resolveName parent} }).{ {resolveName} } =
217- { {#set call= " FromFfi" } }{ {> dart/DartFfiConversionCall} }{ {/set} }(_value);
213+ _obj.{{resolveName} } = { {#set call= " FromFfi" } }{ {> dart/DartFfiConversionCall} }{ {/set} }(_value);
218214 } finally {
219215 {{#set varName= " _value" } }{ {> dart/DartFfiReleaseHandle} }{ {/set} }
220216 }
221- return 0;
222217}
223218{ {/if } }
224219{ {/unless} }{ {/each} }{ {/set} }
225220
226- Pointer<Void > { {resolveName " Ffi" } }ToFfi({ {resolveName} } value ) {
221+ Pointer<Void > { {resolveName " Ffi" } }ToFfi({ {resolveName} } __interfaceObj ) {
227222{{#unless isNarrow} }
228- if (value is __lib.NativeBase) return _{ {resolveName " Ffi" } }CopyHandle((value as __lib.NativeBase).handle);
223+ if (__interfaceObj is __lib.NativeBase) return _{ {resolveName " Ffi" } }CopyHandle((__interfaceObj as __lib.NativeBase).handle);
229224{ {#eval " descendantInterfaces" fullName} }
230225
231- final descendantResult = tryDescendantToFfi(value );
226+ final descendantResult = tryDescendantToFfi(__interfaceObj );
232227 if (descendantResult != null) {
233228 return descendantResult;
234229 }
235230{ {/eval } }
236231{ {/unless} }
237232
233+ { {#set parent= this} }{ {#each inheritedFunctions functions} }{ {#unless isStatic} }
234+ void __{ {resolveName} }Caller({ {#parameters} }{ {resolveName typeRef " FfiDartTypes" } } { {resolveName} }{ {#if iter.hasNext} }, { {/if } }{ {/parameters} }{ {!!
235+ } }{ {#unless returnType.isVoid} }{ {#if parameters} }, { {/if } }Pointer<{ {resolveName returnType.typeRef " FfiApiTypes" } }> _result{ {/unless} }{ {!!
236+ } }{ {#if thrownType} }{ {#if parameters} }, { {/if } }{ {!!
237+ } }{ {#unless parameters} }{ {#unless returnType.isVoid} }, { {/unless} }{ {/unless} }Pointer<{ {resolveName exception.errorType " FfiApiTypes" } }> _error, Pointer<Int8 > _errorFlag{ {/if } }) { {{!!
238+ } }_{ {resolveName parent " Ffi" } }{ {resolveName} }Static(__interfaceObj{ {#if parameters} }, { {/if } }{ {!!
239+ } }{ {#parameters} }{ {resolveName} }{ {#if iter.hasNext} }, { {/if } }{ {/parameters} }{ {!!
240+ } }{ {#unless returnType.isVoid} }, _result{ {/unless} }{ {!!
241+ } }{ {#if thrownType} }, _error, _errorFlag{ {/if } }); }
242+ final __{ {resolveName} }Callback = NativeCallable<Void Function({{#parameters}}{{resolveName typeRef " FfiApiTypes" }}{{#if iter.hasNext}}, { { /if } } { { /parameters} } { { !!
243+ } } { { #unless returnType.isVoid} } { { #if parameters} } , { { /if } } Pointer <{ { resolveName returnType.typeRef " FfiApiTypes" } } >{ {/unless} }{ {!!
244+ } }{ {#if thrownType} }{ {#if parameters} }, { {/if } }{ {!!
245+ } }{ {#unless parameters} }{ {#unless returnType.isVoid} }, { {/unless} }{ {/unless} }Pointer<{ {resolveName exception.errorType " FfiApiTypes" } }>, Pointer<Int8 >{ {/if } })>.isolateLocal(__{ {resolveName} }Caller);
246+ __{ {resolveName} }Callback.keepIsolateAlive = false;
247+
248+ { {/unless} }{ {/each} }
249+ { {#each inheritedProperties properties} }{ {#unless isStatic} }{ {#set property= this} }{ {!!
250+ } }{ {#getter} }
251+ void __{ {resolveName parent " Ffi" } }{ {resolveName property} }GetCaller(Pointer<{ {resolveName property.typeRef " FfiApiTypes" } }> _result) { {{!!
252+ } }_{ {resolveName parent " Ffi" } }{ {resolveName property} }GetStatic(__interfaceObj, _result); }
253+ final __{ {resolveName parent " Ffi" } }{ {resolveName property} }GetCallback = NativeCallable<Void Function(Pointer <{ { resolveName property.typeRef " FfiApiTypes" } } >)>.isolateLocal(__{ {resolveName parent " Ffi" } }{ {resolveName property} }GetCaller);
254+ __{ {resolveName parent " Ffi" } }{ {resolveName property} }GetCallback.keepIsolateAlive = false;
255+
256+ { {/getter} }{ {!!
257+ } }{ {#setter} }
258+ void __{ {resolveName parent " Ffi" } }{ {resolveName property} }SetCaller({ {resolveName property.typeRef " FfiDartTypes" } } _value) { {{!!
259+ } }_{ {resolveName parent " Ffi" } }{ {resolveName property} }SetStatic(__interfaceObj, _value); }
260+ final __{ {resolveName parent " Ffi" } }{ {resolveName property} }SetCallback = NativeCallable<Void Function({{resolveName property.typeRef " FfiApiTypes" }}) >.isolateLocal(__{ {resolveName parent " Ffi" } }{ {resolveName property} }SetCaller);
261+ __{ {resolveName parent " Ffi" } }{ {resolveName property} }SetCallback.keepIsolateAlive = false;
262+
263+ { {/setter} }
264+ { {/set} }{ {/unless} }{ {/each} }
265+ { {/set} }
266+ late final NativeCallable<Void Function() > __closeAllCallback;
267+ void __closeAll() {
268+ {{#set parent= this} }{ {!!
269+ } }{ {#each inheritedFunctions functions} }{ {#unless isStatic} }
270+ __{ {resolveName} }Callback.close();
271+ { {/unless} }{ {/each} }{ {!!
272+ } }{ {#each inheritedProperties properties} }{ {#unless isStatic} }{ {#set property= this} }{ {!!
273+ } }{ {#getter} }
274+ __{ {resolveName parent " Ffi" } }{ {resolveName property} }GetCallback.close();{ {/getter} }{ {!!
275+ } }{ {#setter} }
276+ __{ {resolveName parent " Ffi" } }{ {resolveName property} }SetCallback.close();
277+ { {/setter} }{ {!!
278+ } }{ {/set} }{ {/unless} }{ {/each} }{ {!!
279+ } }{ {/set} }
280+ __closeAllCallback.close();
281+ }
282+ __closeAllCallback = NativeCallable<Void Function() >.isolateLocal(__closeAll);
283+ __closeAllCallback.keepIsolateAlive = false;
284+
238285 final result = _{ {resolveName " Ffi" } }CreateProxy(
239- __lib.getObjectToken(value ),
286+ __lib.getObjectToken(__interfaceObj ),
240287 __lib.LibraryContext.isolateId,
241- value{ {#set parent= this} }{ {#each inheritedFunctions functions} }{ {#unless isStatic} },
242- Pointer.fromFunction<{ {> ffiApi} }>(_{ {resolveName parent " Ffi" } }{ {resolveName} }Static, __lib.unknownError){ {!!
288+ __interfaceObj,
289+ __closeAllCallback.nativeFunction{ {#set parent= this} }{ {#each inheritedFunctions functions} }{ {#unless isStatic} },
290+ __{ {resolveName} }Callback.nativeFunction{ {!!
243291 } }{ {/unless} }{ {/each} }{ {#each inheritedProperties properties} }{ {#unless isStatic} }{ {#set property= this} }{ {#getter} },
244- Pointer.fromFunction< { { > ffiApi } }>(_ { { resolveName parent " Ffi" } }{ {resolveName property} }GetStatic, __lib.unknownError) { {/getter} }{ {#setter} },
245- Pointer.fromFunction< { { > ffiApi } }>(_ { { resolveName parent " Ffi" } }{ {resolveName property} }SetStatic, __lib.unknownError) { {/setter} }{ {!!
292+ __ { { resolveName parent " Ffi" } }{ {resolveName property} }GetCallback.nativeFunction { {/getter} }{ {#setter} },
293+ __ { { resolveName parent " Ffi" } }{ {resolveName property} }SetCallback.nativeFunction { {/setter} }{ {!!
246294 } }{ {/set} }{ {/unless} }{ {/each} }{ {/set} }
247295 );
248296
0 commit comments