mirror of
https://github.com/dart-lang/sdk
synced 2024-10-04 19:08:14 +00:00
[vm/ffi] Migrate off .addressOf
in samples
Removes invocations of `.addressOf` in samples. Removes the constructor from the Coordinate testing class which has become useless with no access to the underlying pointer. Issue: https://github.com/dart-lang/sdk/issues/40667 Change-Id: I1e55a4b159662654e1d14b2d51b0b43d734d5010 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/181405 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Aske Simon Christensen <askesc@google.com>
This commit is contained in:
parent
2525e44a46
commit
24a7e4387d
|
@ -4,8 +4,6 @@
|
|||
|
||||
import 'dart:ffi';
|
||||
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
/// Sample struct for dart:ffi library.
|
||||
class Coordinate extends Struct {
|
||||
@Double()
|
||||
|
@ -15,12 +13,4 @@ class Coordinate extends Struct {
|
|||
external double y;
|
||||
|
||||
external Pointer<Coordinate> next;
|
||||
|
||||
factory Coordinate.allocate(
|
||||
Allocator allocator, double x, double y, Pointer<Coordinate> next) {
|
||||
return allocator<Coordinate>().ref
|
||||
..x = x
|
||||
..y = y
|
||||
..next = next;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,13 +46,15 @@ main() {
|
|||
Pointer<NativeFunction<CoordinateTrice>> p2 =
|
||||
ffiTestFunctions.lookup("CoordinateUnOpTrice");
|
||||
CoordinateTrice coordinateUnOpTrice = p2.asFunction();
|
||||
Coordinate c1 = Coordinate.allocate(calloc, 10.0, 20.0, nullptr);
|
||||
c1.next = c1.addressOf;
|
||||
Coordinate result =
|
||||
coordinateUnOpTrice(transposeCoordinatePointer, c1.addressOf).ref;
|
||||
final c1 = calloc<Coordinate>()
|
||||
..ref.x = 10.0
|
||||
..ref.y = 20.0;
|
||||
c1.ref.next = c1;
|
||||
Coordinate result = coordinateUnOpTrice(transposeCoordinatePointer, c1).ref;
|
||||
print(result.runtimeType);
|
||||
print(result.x);
|
||||
print(result.y);
|
||||
calloc.free(c1);
|
||||
}
|
||||
|
||||
{
|
||||
|
|
|
@ -24,14 +24,19 @@ main() {
|
|||
ffiTestFunctions.lookup("TransposeCoordinate");
|
||||
NativeCoordinateOp f1 = p1.asFunction();
|
||||
|
||||
Coordinate c1 = Coordinate.allocate(calloc, 10.0, 20.0, nullptr);
|
||||
Coordinate c2 = Coordinate.allocate(calloc, 42.0, 84.0, c1.addressOf);
|
||||
c1.next = c2.addressOf;
|
||||
final c1 = calloc<Coordinate>()
|
||||
..ref.x = 10.0
|
||||
..ref.y = 20.0;
|
||||
final c2 = calloc<Coordinate>()
|
||||
..ref.x = 42.0
|
||||
..ref.y = 84.0
|
||||
..ref.next = c1;
|
||||
c1.ref.next = c2;
|
||||
|
||||
Coordinate result = f1(c1.addressOf).ref;
|
||||
Coordinate result = f1(c1).ref;
|
||||
|
||||
print(c1.x);
|
||||
print(c1.y);
|
||||
print(c1.ref.x);
|
||||
print(c1.ref.y);
|
||||
|
||||
print(result.runtimeType);
|
||||
|
||||
|
|
|
@ -14,20 +14,28 @@ main() {
|
|||
|
||||
{
|
||||
// Allocates each coordinate separately in c memory.
|
||||
Coordinate c1 = Coordinate.allocate(calloc, 10.0, 10.0, nullptr);
|
||||
Coordinate c2 = Coordinate.allocate(calloc, 20.0, 20.0, c1.addressOf);
|
||||
Coordinate c3 = Coordinate.allocate(calloc, 30.0, 30.0, c2.addressOf);
|
||||
c1.next = c3.addressOf;
|
||||
final c1 = calloc<Coordinate>()
|
||||
..ref.x = 10.0
|
||||
..ref.y = 10.0;
|
||||
final c2 = calloc<Coordinate>()
|
||||
..ref.x = 20.0
|
||||
..ref.y = 20.0
|
||||
..ref.next = c1;
|
||||
final c3 = calloc<Coordinate>()
|
||||
..ref.x = 30.0
|
||||
..ref.y = 30.0
|
||||
..ref.next = c2;
|
||||
c1.ref.next = c3;
|
||||
|
||||
Coordinate currentCoordinate = c1;
|
||||
Coordinate currentCoordinate = c1.ref;
|
||||
for (var i in [0, 1, 2, 3, 4]) {
|
||||
currentCoordinate = currentCoordinate.next.ref;
|
||||
print("${currentCoordinate.x}; ${currentCoordinate.y}");
|
||||
}
|
||||
|
||||
calloc.free(c1.addressOf);
|
||||
calloc.free(c2.addressOf);
|
||||
calloc.free(c3.addressOf);
|
||||
calloc.free(c1);
|
||||
calloc.free(c2);
|
||||
calloc.free(c3);
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -55,11 +63,12 @@ main() {
|
|||
}
|
||||
|
||||
{
|
||||
Coordinate c = Coordinate.allocate(calloc, 10, 10, nullptr);
|
||||
print(c is Coordinate);
|
||||
print(c is Pointer<Void>);
|
||||
print(c is Pointer);
|
||||
calloc.free(c.addressOf);
|
||||
// Allocating in native memory returns a pointer.
|
||||
final c = calloc<Coordinate>();
|
||||
print(c is Pointer<Coordinate>);
|
||||
// `.ref` returns a reference which gives access to the fields.
|
||||
print(c.ref is Coordinate);
|
||||
calloc.free(c);
|
||||
}
|
||||
|
||||
print("end main");
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
|
||||
import 'dart:ffi';
|
||||
|
||||
import "package:ffi/ffi.dart";
|
||||
|
||||
/// Sample struct for dart:ffi library.
|
||||
class Coordinate extends Struct {
|
||||
@Double()
|
||||
|
@ -17,12 +15,4 @@ class Coordinate extends Struct {
|
|||
double y;
|
||||
|
||||
Pointer<Coordinate> next;
|
||||
|
||||
factory Coordinate.allocate(
|
||||
Allocator allocator, double x, double y, Pointer<Coordinate> next) {
|
||||
return allocator<Coordinate>().ref
|
||||
..x = x
|
||||
..y = y
|
||||
..next = next;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,13 +48,15 @@ main() {
|
|||
Pointer<NativeFunction<CoordinateTrice>> p2 =
|
||||
ffiTestFunctions.lookup("CoordinateUnOpTrice");
|
||||
CoordinateTrice coordinateUnOpTrice = p2.asFunction();
|
||||
Coordinate c1 = Coordinate.allocate(calloc, 10.0, 20.0, nullptr);
|
||||
c1.next = c1.addressOf;
|
||||
Coordinate result =
|
||||
coordinateUnOpTrice(transposeCoordinatePointer, c1.addressOf).ref;
|
||||
final c1 = calloc<Coordinate>()
|
||||
..ref.x = 10.0
|
||||
..ref.y = 20.0;
|
||||
c1.ref.next = c1;
|
||||
Coordinate result = coordinateUnOpTrice(transposeCoordinatePointer, c1).ref;
|
||||
print(result.runtimeType);
|
||||
print(result.x);
|
||||
print(result.y);
|
||||
calloc.free(c1);
|
||||
}
|
||||
|
||||
{
|
||||
|
|
|
@ -26,14 +26,19 @@ main() {
|
|||
ffiTestFunctions.lookup("TransposeCoordinate");
|
||||
NativeCoordinateOp f1 = p1.asFunction();
|
||||
|
||||
Coordinate c1 = Coordinate.allocate(calloc, 10.0, 20.0, nullptr);
|
||||
Coordinate c2 = Coordinate.allocate(calloc, 42.0, 84.0, c1.addressOf);
|
||||
c1.next = c2.addressOf;
|
||||
final c1 = calloc<Coordinate>()
|
||||
..ref.x = 10.0
|
||||
..ref.y = 20.0;
|
||||
final c2 = calloc<Coordinate>()
|
||||
..ref.x = 42.0
|
||||
..ref.y = 84.0
|
||||
..ref.next = c1;
|
||||
c1.ref.next = c2;
|
||||
|
||||
Coordinate result = f1(c1.addressOf).ref;
|
||||
Coordinate result = f1(c1).ref;
|
||||
|
||||
print(c1.x);
|
||||
print(c1.y);
|
||||
print(c1.ref.x);
|
||||
print(c1.ref.y);
|
||||
|
||||
print(result.runtimeType);
|
||||
|
||||
|
|
|
@ -16,20 +16,28 @@ main() {
|
|||
|
||||
{
|
||||
// Allocates each coordinate separately in c memory.
|
||||
Coordinate c1 = Coordinate.allocate(calloc, 10.0, 10.0, nullptr);
|
||||
Coordinate c2 = Coordinate.allocate(calloc, 20.0, 20.0, c1.addressOf);
|
||||
Coordinate c3 = Coordinate.allocate(calloc, 30.0, 30.0, c2.addressOf);
|
||||
c1.next = c3.addressOf;
|
||||
final c1 = calloc<Coordinate>()
|
||||
..ref.x = 10.0
|
||||
..ref.y = 10.0;
|
||||
final c2 = calloc<Coordinate>()
|
||||
..ref.x = 20.0
|
||||
..ref.y = 20.0
|
||||
..ref.next = c1;
|
||||
final c3 = calloc<Coordinate>()
|
||||
..ref.x = 30.0
|
||||
..ref.y = 30.0
|
||||
..ref.next = c2;
|
||||
c1.ref.next = c3;
|
||||
|
||||
Coordinate currentCoordinate = c1;
|
||||
Coordinate currentCoordinate = c1.ref;
|
||||
for (var i in [0, 1, 2, 3, 4]) {
|
||||
currentCoordinate = currentCoordinate.next.ref;
|
||||
print("${currentCoordinate.x}; ${currentCoordinate.y}");
|
||||
}
|
||||
|
||||
calloc.free(c1.addressOf);
|
||||
calloc.free(c2.addressOf);
|
||||
calloc.free(c3.addressOf);
|
||||
calloc.free(c1);
|
||||
calloc.free(c2);
|
||||
calloc.free(c3);
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -57,11 +65,12 @@ main() {
|
|||
}
|
||||
|
||||
{
|
||||
Coordinate c = Coordinate.allocate(calloc, 10, 10, nullptr);
|
||||
print(c is Coordinate);
|
||||
print(c is Pointer<Void>);
|
||||
print(c is Pointer);
|
||||
calloc.free(c.addressOf);
|
||||
// Allocating in native memory returns a pointer.
|
||||
final c = calloc<Coordinate>();
|
||||
print(c is Pointer<Coordinate>);
|
||||
// `.ref` returns a reference which gives access to the fields.
|
||||
print(c.ref is Coordinate);
|
||||
calloc.free(c);
|
||||
}
|
||||
|
||||
print("end main");
|
||||
|
|
Loading…
Reference in a new issue