| library #lib; |
| import self as self; |
| import "dart:core" as core; |
| import "dart:ffi" as ffi; |
| import "dart:isolate" as iso; |
| |
| import "dart:ffi"; |
| |
| static method main() → void { |
| self::testNativeCallableListener(); |
| self::testNativeCallableListenerClosure(); |
| self::testNativeCallableIsolateLocalVoid(); |
| self::testNativeCallableIsolateLocalVoidClosure(); |
| self::testNativeCallableIsolateLocalPointer(); |
| self::testNativeCallableIsolateLocalPointerClosure(); |
| self::testNativeCallableIsolateLocalInt(); |
| self::testNativeCallableIsolateLocalIntClosure(); |
| } |
| static method printInt(core::int i) → void |
| return core::print(i); |
| static method testNativeCallableListener() → void { |
| final ffi::NativeCallable<(ffi::Int32) → ffi::Void> callback = block { |
| final ffi::NativeCallable<(ffi::Int32) → ffi::Void> #t1 = new ffi::_NativeCallableListener::•<(ffi::Int32) → ffi::Void>((final core::List<dynamic> args) → void |
| #C1(args.{core::List::[]}(0){(core::int) → dynamic}){(ffi::Int32) → ffi::Void}; |
| , "NativeCallable(ConstantExpression(printInt))"); |
| [@vm.call-site-attributes.metadata=receiverType:dart.ffi::NativeCallable<dart.ffi::Void Function(dart.ffi::Int32)>] #t1.{ffi::_NativeCallableBase::_pointer} = ffi::_createNativeCallableListener<ffi::NativeFunction<(ffi::Int32) → ffi::Void>>(ffi::_nativeAsyncCallbackFunction<(ffi::Int32) → ffi::Void>(), #t1.{ffi::_NativeCallableListener::_port}{iso::RawReceivePort}); |
| } =>#t1; |
| core::print(callback.{ffi::NativeCallable::nativeFunction}{ffi::Pointer<ffi::NativeFunction<(ffi::Int32) → ffi::Void>>}); |
| callback.{ffi::NativeCallable::close}(){() → void}; |
| } |
| static method testNativeCallableListenerClosure() → void { |
| core::int j = 123; |
| function closure(core::int i) → void |
| return core::print(i.{core::num::+}(j){(core::num) → core::int}); |
| final ffi::NativeCallable<(ffi::Int32) → ffi::Void> callback = block { |
| final ffi::NativeCallable<(ffi::Int32) → ffi::Void> #t2 = new ffi::_NativeCallableListener::•<(ffi::Int32) → ffi::Void>((final core::List<dynamic> args) → void |
| closure(args.{core::List::[]}(0){(core::int) → dynamic}){(ffi::Int32) → ffi::Void}; |
| , "NativeCallable(VariableGet(closure))"); |
| [@vm.call-site-attributes.metadata=receiverType:dart.ffi::NativeCallable<dart.ffi::Void Function(dart.ffi::Int32)>] #t2.{ffi::_NativeCallableBase::_pointer} = ffi::_createNativeCallableListener<ffi::NativeFunction<(ffi::Int32) → ffi::Void>>(ffi::_nativeAsyncCallbackFunction<(ffi::Int32) → ffi::Void>(), #t2.{ffi::_NativeCallableListener::_port}{iso::RawReceivePort}); |
| } =>#t2; |
| core::print(callback.{ffi::NativeCallable::nativeFunction}{ffi::Pointer<ffi::NativeFunction<(ffi::Int32) → ffi::Void>>}); |
| callback.{ffi::NativeCallable::close}(){() → void}; |
| } |
| static method testNativeCallableIsolateLocalVoid() → void { |
| final ffi::NativeCallable<(ffi::Int32) → ffi::Void> callback = new ffi::_NativeCallableIsolateLocal::•<(ffi::Int32) → ffi::Void>(ffi::_createNativeCallableIsolateLocal<ffi::NativeFunction<(ffi::Int32) → ffi::Void>>(ffi::_nativeCallbackFunction<(ffi::Int32) → ffi::Void>(#C1, null), null, true)); |
| core::print(callback.{ffi::NativeCallable::nativeFunction}{ffi::Pointer<ffi::NativeFunction<(ffi::Int32) → ffi::Void>>}); |
| callback.{ffi::NativeCallable::close}(){() → void}; |
| } |
| static method testNativeCallableIsolateLocalVoidClosure() → void { |
| core::int j = 123; |
| function closure(core::int i) → void |
| return core::print(i.{core::num::+}(j){(core::num) → core::int}); |
| final ffi::NativeCallable<(ffi::Int32) → ffi::Void> callback = new ffi::_NativeCallableIsolateLocal::•<(ffi::Int32) → ffi::Void>(ffi::_createNativeCallableIsolateLocal<ffi::NativeFunction<(ffi::Int32) → ffi::Void>>(ffi::_nativeIsolateLocalCallbackFunction<(ffi::Int32) → ffi::Void>(null), closure, true)); |
| core::print(callback.{ffi::NativeCallable::nativeFunction}{ffi::Pointer<ffi::NativeFunction<(ffi::Int32) → ffi::Void>>}); |
| callback.{ffi::NativeCallable::close}(){() → void}; |
| } |
| static method intToPointer(core::int i) → ffi::Pointer<ffi::NativeType> |
| return ffi::Pointer::fromAddress<ffi::NativeType>(i); |
| static method testNativeCallableIsolateLocalPointer() → void { |
| final ffi::NativeCallable<(ffi::Int32) → ffi::Pointer<ffi::NativeType>> callback = new ffi::_NativeCallableIsolateLocal::•<(ffi::Int32) → ffi::Pointer<ffi::NativeType>>(ffi::_createNativeCallableIsolateLocal<ffi::NativeFunction<(ffi::Int32) → ffi::Pointer<ffi::NativeType>>>(ffi::_nativeCallbackFunction<(ffi::Int32) → ffi::Pointer<ffi::NativeType>>(#C2, null), null, true)); |
| core::print(callback.{ffi::NativeCallable::nativeFunction}{ffi::Pointer<ffi::NativeFunction<(ffi::Int32) → ffi::Pointer<ffi::NativeType>>>}); |
| callback.{ffi::NativeCallable::close}(){() → void}; |
| } |
| static method testNativeCallableIsolateLocalPointerClosure() → void { |
| core::int j = 123; |
| function closure(core::int i) → ffi::Pointer<ffi::NativeType> |
| return ffi::Pointer::fromAddress<ffi::NativeType>(i.{core::num::+}(j){(core::num) → core::int}); |
| final ffi::NativeCallable<(ffi::Int32) → ffi::Pointer<ffi::NativeType>> callback = new ffi::_NativeCallableIsolateLocal::•<(ffi::Int32) → ffi::Pointer<ffi::NativeType>>(ffi::_createNativeCallableIsolateLocal<ffi::NativeFunction<(ffi::Int32) → ffi::Pointer<ffi::NativeType>>>(ffi::_nativeIsolateLocalCallbackFunction<(ffi::Int32) → ffi::Pointer<ffi::NativeType>>(null), closure, true)); |
| core::print(callback.{ffi::NativeCallable::nativeFunction}{ffi::Pointer<ffi::NativeFunction<(ffi::Int32) → ffi::Pointer<ffi::NativeType>>>}); |
| callback.{ffi::NativeCallable::close}(){() → void}; |
| } |
| static method negateInt(core::int i) → core::int |
| return i.{core::int::unary-}(){() → core::int}; |
| static method testNativeCallableIsolateLocalInt() → void { |
| final ffi::NativeCallable<(ffi::Int32) → ffi::Int> callback = new ffi::_NativeCallableIsolateLocal::•<(ffi::Int32) → ffi::Int>(ffi::_createNativeCallableIsolateLocal<ffi::NativeFunction<(ffi::Int32) → ffi::Int>>(ffi::_nativeCallbackFunction<(ffi::Int32) → ffi::Int>(#C3, #C4), null, true)); |
| core::print(callback.{ffi::NativeCallable::nativeFunction}{ffi::Pointer<ffi::NativeFunction<(ffi::Int32) → ffi::Int>>}); |
| callback.{ffi::NativeCallable::close}(){() → void}; |
| } |
| static method testNativeCallableIsolateLocalIntClosure() → void { |
| core::int j = 123; |
| function closure(core::int i) → core::int |
| return i.{core::num::+}(j){(core::num) → core::int}; |
| final ffi::NativeCallable<(ffi::Int32) → ffi::Int> callback = new ffi::_NativeCallableIsolateLocal::•<(ffi::Int32) → ffi::Int>(ffi::_createNativeCallableIsolateLocal<ffi::NativeFunction<(ffi::Int32) → ffi::Int>>(ffi::_nativeIsolateLocalCallbackFunction<(ffi::Int32) → ffi::Int>(#C4), closure, true)); |
| core::print(callback.{ffi::NativeCallable::nativeFunction}{ffi::Pointer<ffi::NativeFunction<(ffi::Int32) → ffi::Int>>}); |
| callback.{ffi::NativeCallable::close}(){() → void}; |
| } |
| constants { |
| #C1 = static-tearoff self::printInt |
| #C2 = static-tearoff self::intToPointer |
| #C3 = static-tearoff self::negateInt |
| #C4 = 123 |
| } |