blob: 28475582daf5d17d56cf5b93fc279a249564c87a [file] [log] [blame]
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
}