bb483f34a3
TEST=tests/ffi/* CoreLibraryReviewExempt: VM only Closes: https://github.com/dart-lang/sdk/issues/52366 Change-Id: I545a323f48d955b591cedf2dae7106d9004242e2 Cq-Include-Trybots: dart/try:vm-aot-android-release-arm64c-try,vm-aot-android-release-arm_x64-try,vm-aot-asan-linux-release-x64-try,vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-mac-release-arm64-try,vm-aot-mac-release-x64-try,vm-aot-msan-linux-release-x64-try,vm-aot-obfuscate-linux-release-x64-try,vm-aot-optimization-level-linux-release-x64-try,vm-aot-tsan-linux-release-x64-try,vm-aot-ubsan-linux-release-x64-try,vm-aot-win-debug-arm64-try,vm-aot-win-debug-x64-try,vm-aot-win-debug-x64c-try,vm-appjit-linux-debug-x64-try,vm-asan-linux-release-arm64-try,vm-asan-linux-release-x64-try,vm-checked-mac-release-arm64-try,vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64c-try,vm-ffi-qemu-linux-release-arm-try,vm-ffi-qemu-linux-release-riscv64-try,vm-fuchsia-release-arm64-try,vm-fuchsia-release-x64-try,vm-linux-debug-ia32-try,vm-linux-debug-x64-try,vm-linux-debug-x64c-try,vm-mac-debug-arm64-try,vm-mac-debug-x64-try,vm-msan-linux-release-arm64-try,vm-msan-linux-release-x64-try,vm-reload-linux-debug-x64-try,vm-reload-rollback-linux-debug-x64-try,vm-tsan-linux-release-arm64-try,vm-tsan-linux-release-x64-try,vm-ubsan-linux-release-arm64-try,vm-ubsan-linux-release-x64-try,vm-win-debug-arm64-try,vm-win-debug-x64-try,vm-win-debug-x64c-try,vm-win-release-ia32-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/398621 Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Daco Harkes <dacoharkes@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
75 lines
1.4 KiB
Dart
75 lines
1.4 KiB
Dart
import 'dart:ffi';
|
|
|
|
@Native()
|
|
external Pointer<Char> aString;
|
|
|
|
@Native<Int32>()
|
|
external int anInt;
|
|
|
|
@Native<Int>()
|
|
external int anotherInt;
|
|
|
|
final class Vec2d extends Struct {
|
|
@Double()
|
|
external double x;
|
|
@Double()
|
|
external double y;
|
|
}
|
|
|
|
final class MyStruct extends Struct {
|
|
@Array.variable()
|
|
external Array<Uint8> array;
|
|
}
|
|
|
|
final class MyStruct2 extends Struct {
|
|
@Array.variableWithVariableDimension(1)
|
|
external Array<Uint8> array;
|
|
}
|
|
|
|
final class MyStruct3 extends Struct {
|
|
@Array.variableMulti([1, 2])
|
|
external Array<Array<Array<Uint8>>> array;
|
|
}
|
|
|
|
final class MyStruct4 extends Struct {
|
|
@Array.variableMulti(variableDimension: 1, [1, 2])
|
|
external Array<Array<Array<Uint8>>> array;
|
|
}
|
|
|
|
final class MyUnion extends Union {
|
|
external Vec2d vector;
|
|
external Pointer<Vec2d> indirectVector;
|
|
}
|
|
|
|
@Native()
|
|
external final Vec2d vector;
|
|
|
|
@Native()
|
|
external MyUnion union;
|
|
|
|
@Native()
|
|
@Array(1, 2, 3)
|
|
external Array<Array<Array<Double>>> manyNumbers;
|
|
|
|
void main() {
|
|
print('first char of string: ${aString.value}');
|
|
print('global int: {$anInt}');
|
|
|
|
aString = nullptr;
|
|
anInt++;
|
|
|
|
final vec = vector;
|
|
print('(${vec.x}, ${vec.y})');
|
|
|
|
union.indirectVector = Native.addressOf(vector);
|
|
|
|
print(Native.addressOf<Int>(anotherInt));
|
|
print(Native.addressOf<Vec2d>(vector));
|
|
print(Native.addressOf<MyUnion>(union));
|
|
|
|
final wholeArray = manyNumbers;
|
|
wholeArray[0][1][2] = 123.45;
|
|
manyNumbers = wholeArray;
|
|
manyNumbers[0][0][0] = 54.321;
|
|
}
|