Skip to content

Commit b13c377

Browse files
dcharkescommit-bot@chromium.org
authored andcommitted
[cfe/ffi] Transformation changes for structs-by-value
Changes the kernel representation of structs in two ways. 1. `_addressOf` field of `Struct` gets type `Object` because it will be either `TypedData` or `Pointer` in structs by value CL. 2. Subtypes of `Struct` get a pragma `vm:ffi:struct-fields` which contains a const list of the native types of the fields of the struct which will be read in the VM to do compute the locations of structs in the target ABI. Split off from https://dart-review.googlesource.com/c/sdk/+/140290/23 to make that CL smaller. That CL will no longer have changes to the kernel representation of FFI code after this CL lands separately. These changes are not consumed in the VM in this CL, but they are tested by the expect files. Issue: #36730. Change-Id: I5d3babd5be07f78c6d2bd80bbc1fd492c51bc01f Cq-Include-Trybots: luci.dart.try:front-end-linux-release-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/167280 Commit-Queue: Daco Harkes <[email protected]> Reviewed-by: Martin Kustermann <[email protected]>
1 parent 016ebdd commit b13c377

15 files changed

+239
-157
lines changed

pkg/front_end/testcases/general/ffi_sample.dart.outline.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class Coordinate extends ffi::Struct {
1414
field ffi::Pointer<self::Coordinate*>* next;
1515
static factory allocate(core::double* x, core::double* y, ffi::Pointer<self::Coordinate*>* next) → self::Coordinate*
1616
;
17-
abstract member-signature get _addressOf() → ffi::Pointer<ffi::Struct*>*; -> ffi::Struct::_addressOf
17+
abstract member-signature get _addressOf() → core::Object*; -> ffi::Struct::_addressOf
1818
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
1919
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
2020
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf

pkg/front_end/testcases/general/ffi_sample.dart.strong.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class Coordinate extends ffi::Struct {
2020
#t1.{self::Coordinate::next} = next;
2121
} =>#t1;
2222
}
23-
abstract member-signature get _addressOf() → ffi::Pointer<ffi::Struct*>*; -> ffi::Struct::_addressOf
23+
abstract member-signature get _addressOf() → core::Object*; -> ffi::Struct::_addressOf
2424
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
2525
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
2626
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf

pkg/front_end/testcases/general/ffi_sample.dart.strong.transformed.expect

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ import "dart:ffi";
88
import "package:ffi/ffi.dart";
99

1010
@#C3
11+
@#C8
1112
class Coordinate extends ffi::Struct {
1213
@#C3
13-
static final field core::int* #sizeOf = (#C6).{core::List::[]}(ffi::_abi());
14+
static final field core::int* #sizeOf = (#C11).{core::List::[]}(ffi::_abi());
1415
@#C3
1516
constructor #fromPointer(dynamic #pointer) → dynamic
1617
: super ffi::Struct::_fromPointer(#pointer)
@@ -22,7 +23,7 @@ class Coordinate extends ffi::Struct {
2223
#t1.{self::Coordinate::next} = next;
2324
} =>#t1;
2425
}
25-
abstract member-signature get _addressOf() → ffi::Pointer<ffi::Struct*>*; -> ffi::Struct::_addressOf
26+
abstract member-signature get _addressOf() → core::Object*; -> ffi::Struct::_addressOf
2627
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
2728
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
2829
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -34,31 +35,36 @@ class Coordinate extends ffi::Struct {
3435
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
3536
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
3637
get x() → core::double*
37-
return ffi::_loadDouble(this.{ffi::Struct::_addressOf}, (#C8).{core::List::[]}(ffi::_abi()));
38+
return ffi::_loadDouble(this.{ffi::Struct::_addressOf}, (#C13).{core::List::[]}(ffi::_abi()));
3839
set x(core::double* #v) → void
39-
return ffi::_storeDouble(this.{ffi::Struct::_addressOf}, (#C8).{core::List::[]}(ffi::_abi()), #v);
40+
return ffi::_storeDouble(this.{ffi::Struct::_addressOf}, (#C13).{core::List::[]}(ffi::_abi()), #v);
4041
get y() → core::double*
41-
return ffi::_loadDouble(this.{ffi::Struct::_addressOf}, (#C10).{core::List::[]}(ffi::_abi()));
42+
return ffi::_loadDouble(this.{ffi::Struct::_addressOf}, (#C15).{core::List::[]}(ffi::_abi()));
4243
set y(core::double* #v) → void
43-
return ffi::_storeDouble(this.{ffi::Struct::_addressOf}, (#C10).{core::List::[]}(ffi::_abi()), #v);
44+
return ffi::_storeDouble(this.{ffi::Struct::_addressOf}, (#C15).{core::List::[]}(ffi::_abi()), #v);
4445
get next() → ffi::Pointer<self::Coordinate*>*
45-
return ffi::_fromAddress<self::Coordinate*>(ffi::_loadIntPtr(this.{ffi::Struct::_addressOf}, (#C12).{core::List::[]}(ffi::_abi())));
46+
return ffi::_fromAddress<self::Coordinate*>(ffi::_loadIntPtr(this.{ffi::Struct::_addressOf}, (#C17).{core::List::[]}(ffi::_abi())));
4647
set next(ffi::Pointer<self::Coordinate*>* #v) → void
47-
return ffi::_storeIntPtr(this.{ffi::Struct::_addressOf}, (#C12).{core::List::[]}(ffi::_abi()), #v.{ffi::Pointer::address});
48+
return ffi::_storeIntPtr(this.{ffi::Struct::_addressOf}, (#C17).{core::List::[]}(ffi::_abi()), #v.{ffi::Pointer::address});
4849
}
4950
static method main() → dynamic {}
5051

5152
constants {
5253
#C1 = "vm:entry-point"
5354
#C2 = null
5455
#C3 = core::pragma {name:#C1, options:#C2}
55-
#C4 = 24
56-
#C5 = 20
57-
#C6 = <core::int*>[#C4, #C5, #C4]
58-
#C7 = 0
59-
#C8 = <core::int*>[#C7, #C7, #C7]
60-
#C9 = 8
61-
#C10 = <core::int*>[#C9, #C9, #C9]
62-
#C11 = 16
63-
#C12 = <core::int*>[#C11, #C11, #C11]
56+
#C4 = "vm:ffi:struct-fields"
57+
#C5 = TypeLiteralConstant(ffi::Double)
58+
#C6 = TypeLiteralConstant(ffi::Pointer<ffi::NativeType>)
59+
#C7 = <core::Type>[#C5, #C5, #C6]
60+
#C8 = core::pragma {name:#C4, options:#C7}
61+
#C9 = 24
62+
#C10 = 20
63+
#C11 = <core::int*>[#C9, #C10, #C9]
64+
#C12 = 0
65+
#C13 = <core::int*>[#C12, #C12, #C12]
66+
#C14 = 8
67+
#C15 = <core::int*>[#C14, #C14, #C14]
68+
#C16 = 16
69+
#C17 = <core::int*>[#C16, #C16, #C16]
6470
}

pkg/front_end/testcases/general_nnbd_opt_out/ffi_sample.dart.weak.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class Coordinate extends ffi::Struct {
2020
#t1.{self::Coordinate::next} = next;
2121
} =>#t1;
2222
}
23-
abstract member-signature get _addressOf() → ffi::Pointer<ffi::Struct*>*; -> ffi::Struct::_addressOf
23+
abstract member-signature get _addressOf() → core::Object*; -> ffi::Struct::_addressOf
2424
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
2525
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
2626
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf

pkg/front_end/testcases/general_nnbd_opt_out/ffi_sample.dart.weak.transformed.expect

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ import "dart:ffi";
88
import "package:ffi/ffi.dart";
99

1010
@#C3
11+
@#C8
1112
class Coordinate extends ffi::Struct {
1213
@#C3
13-
static final field core::int* #sizeOf = (#C6).{core::List::[]}(ffi::_abi());
14+
static final field core::int* #sizeOf = (#C11).{core::List::[]}(ffi::_abi());
1415
@#C3
1516
constructor #fromPointer(dynamic #pointer) → dynamic
1617
: super ffi::Struct::_fromPointer(#pointer)
@@ -22,7 +23,7 @@ class Coordinate extends ffi::Struct {
2223
#t1.{self::Coordinate::next} = next;
2324
} =>#t1;
2425
}
25-
abstract member-signature get _addressOf() → ffi::Pointer<ffi::Struct*>*; -> ffi::Struct::_addressOf
26+
abstract member-signature get _addressOf() → core::Object*; -> ffi::Struct::_addressOf
2627
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
2728
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
2829
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -34,31 +35,36 @@ class Coordinate extends ffi::Struct {
3435
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
3536
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
3637
get x() → core::double*
37-
return ffi::_loadDouble(this.{ffi::Struct::_addressOf}, (#C8).{core::List::[]}(ffi::_abi()));
38+
return ffi::_loadDouble(this.{ffi::Struct::_addressOf}, (#C13).{core::List::[]}(ffi::_abi()));
3839
set x(core::double* #v) → void
39-
return ffi::_storeDouble(this.{ffi::Struct::_addressOf}, (#C8).{core::List::[]}(ffi::_abi()), #v);
40+
return ffi::_storeDouble(this.{ffi::Struct::_addressOf}, (#C13).{core::List::[]}(ffi::_abi()), #v);
4041
get y() → core::double*
41-
return ffi::_loadDouble(this.{ffi::Struct::_addressOf}, (#C10).{core::List::[]}(ffi::_abi()));
42+
return ffi::_loadDouble(this.{ffi::Struct::_addressOf}, (#C15).{core::List::[]}(ffi::_abi()));
4243
set y(core::double* #v) → void
43-
return ffi::_storeDouble(this.{ffi::Struct::_addressOf}, (#C10).{core::List::[]}(ffi::_abi()), #v);
44+
return ffi::_storeDouble(this.{ffi::Struct::_addressOf}, (#C15).{core::List::[]}(ffi::_abi()), #v);
4445
get next() → ffi::Pointer<self::Coordinate*>*
45-
return ffi::_fromAddress<self::Coordinate*>(ffi::_loadIntPtr(this.{ffi::Struct::_addressOf}, (#C12).{core::List::[]}(ffi::_abi())));
46+
return ffi::_fromAddress<self::Coordinate*>(ffi::_loadIntPtr(this.{ffi::Struct::_addressOf}, (#C17).{core::List::[]}(ffi::_abi())));
4647
set next(ffi::Pointer<self::Coordinate*>* #v) → void
47-
return ffi::_storeIntPtr(this.{ffi::Struct::_addressOf}, (#C12).{core::List::[]}(ffi::_abi()), #v.{ffi::Pointer::address});
48+
return ffi::_storeIntPtr(this.{ffi::Struct::_addressOf}, (#C17).{core::List::[]}(ffi::_abi()), #v.{ffi::Pointer::address});
4849
}
4950
static method main() → dynamic {}
5051

5152
constants {
5253
#C1 = "vm:entry-point"
5354
#C2 = null
5455
#C3 = core::pragma {name:#C1, options:#C2}
55-
#C4 = 24
56-
#C5 = 20
57-
#C6 = <core::int*>[#C4, #C5, #C4]
58-
#C7 = 0
59-
#C8 = <core::int*>[#C7, #C7, #C7]
60-
#C9 = 8
61-
#C10 = <core::int*>[#C9, #C9, #C9]
62-
#C11 = 16
63-
#C12 = <core::int*>[#C11, #C11, #C11]
56+
#C4 = "vm:ffi:struct-fields"
57+
#C5 = TypeLiteralConstant(ffi::Double)
58+
#C6 = TypeLiteralConstant(ffi::Pointer<ffi::NativeType>)
59+
#C7 = <core::Type>[#C5, #C5, #C6]
60+
#C8 = core::pragma {name:#C4, options:#C7}
61+
#C9 = 24
62+
#C10 = 20
63+
#C11 = <core::int*>[#C9, #C10, #C9]
64+
#C12 = 0
65+
#C13 = <core::int*>[#C12, #C12, #C12]
66+
#C14 = 8
67+
#C15 = <core::int*>[#C14, #C14, #C14]
68+
#C16 = 16
69+
#C17 = <core::int*>[#C16, #C16, #C16]
6470
}

pkg/front_end/testcases/incremental_initialize_from_dill/ffi_01.yaml.world.1.expect

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,18 @@ library from "org-dartlang-test:///lib.dart" as lib {
44
import "dart:ffi";
55

66
@#C3
7+
@#C8
78
class Coordinate extends dart.ffi::Struct {
89
@#C3
9-
static final field dart.core::int* #sizeOf = (#C6).{dart.core::List::[]}(dart.ffi::_abi());
10+
static final field dart.core::int* #sizeOf = (#C11).{dart.core::List::[]}(dart.ffi::_abi());
1011
@#C3
1112
constructor #fromPointer(dynamic #pointer) → dynamic
1213
: super dart.ffi::Struct::_fromPointer(#pointer)
1314
;
1415
static factory allocate(dart.core::double* x, dart.core::double* y, dart.ffi::Pointer<lib::Coordinate*>* next) → lib::Coordinate* {
1516
return null;
1617
}
17-
abstract member-signature get _addressOf() → dart.ffi::Pointer<dart.ffi::Struct*>*; -> dart.ffi::Struct::_addressOf
18+
abstract member-signature get _addressOf() → dart.core::Object*; -> dart.ffi::Struct::_addressOf
1819
abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
1920
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
2021
abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -26,17 +27,17 @@ library from "org-dartlang-test:///lib.dart" as lib {
2627
abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
2728
abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
2829
get x() → dart.core::double*
29-
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_addressOf}, (#C8).{dart.core::List::[]}(dart.ffi::_abi()));
30+
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_addressOf}, (#C13).{dart.core::List::[]}(dart.ffi::_abi()));
3031
set x(dart.core::double* #v) → void
31-
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_addressOf}, (#C8).{dart.core::List::[]}(dart.ffi::_abi()), #v);
32+
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_addressOf}, (#C13).{dart.core::List::[]}(dart.ffi::_abi()), #v);
3233
get y() → dart.core::double*
33-
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_addressOf}, (#C10).{dart.core::List::[]}(dart.ffi::_abi()));
34+
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_addressOf}, (#C15).{dart.core::List::[]}(dart.ffi::_abi()));
3435
set y(dart.core::double* #v) → void
35-
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_addressOf}, (#C10).{dart.core::List::[]}(dart.ffi::_abi()), #v);
36+
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_addressOf}, (#C15).{dart.core::List::[]}(dart.ffi::_abi()), #v);
3637
get next() → dart.ffi::Pointer<lib::Coordinate*>*
37-
return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadIntPtr(this.{dart.ffi::Struct::_addressOf}, (#C12).{dart.core::List::[]}(dart.ffi::_abi())));
38+
return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadIntPtr(this.{dart.ffi::Struct::_addressOf}, (#C17).{dart.core::List::[]}(dart.ffi::_abi())));
3839
set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
39-
return dart.ffi::_storeIntPtr(this.{dart.ffi::Struct::_addressOf}, (#C12).{dart.core::List::[]}(dart.ffi::_abi()), #v.{dart.ffi::Pointer::address});
40+
return dart.ffi::_storeIntPtr(this.{dart.ffi::Struct::_addressOf}, (#C17).{dart.core::List::[]}(dart.ffi::_abi()), #v.{dart.ffi::Pointer::address});
4041
}
4142
}
4243
library from "org-dartlang-test:///main.dart" as main {
@@ -54,13 +55,18 @@ constants {
5455
#C1 = "vm:entry-point"
5556
#C2 = null
5657
#C3 = dart.core::pragma {name:#C1, options:#C2}
57-
#C4 = 24
58-
#C5 = 20
59-
#C6 = <dart.core::int*>[#C4, #C5, #C4]
60-
#C7 = 0
61-
#C8 = <dart.core::int*>[#C7, #C7, #C7]
62-
#C9 = 8
63-
#C10 = <dart.core::int*>[#C9, #C9, #C9]
64-
#C11 = 16
65-
#C12 = <dart.core::int*>[#C11, #C11, #C11]
58+
#C4 = "vm:ffi:struct-fields"
59+
#C5 = TypeLiteralConstant(dart.ffi::Double)
60+
#C6 = TypeLiteralConstant(dart.ffi::Pointer<dart.ffi::NativeType>)
61+
#C7 = <dart.core::Type>[#C5, #C5, #C6]
62+
#C8 = dart.core::pragma {name:#C4, options:#C7}
63+
#C9 = 24
64+
#C10 = 20
65+
#C11 = <dart.core::int*>[#C9, #C10, #C9]
66+
#C12 = 0
67+
#C13 = <dart.core::int*>[#C12, #C12, #C12]
68+
#C14 = 8
69+
#C15 = <dart.core::int*>[#C14, #C14, #C14]
70+
#C16 = 16
71+
#C17 = <dart.core::int*>[#C16, #C16, #C16]
6672
}

pkg/front_end/testcases/incremental_initialize_from_dill/ffi_01.yaml.world.2.expect

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,18 @@ library from "org-dartlang-test:///lib.dart" as lib {
44
import "dart:ffi";
55

66
@#C3
7+
@#C8
78
class Coordinate extends dart.ffi::Struct {
89
@#C3
9-
static final field dart.core::int* #sizeOf = (#C6).{dart.core::List::[]}(dart.ffi::_abi());
10+
static final field dart.core::int* #sizeOf = (#C11).{dart.core::List::[]}(dart.ffi::_abi());
1011
@#C3
1112
constructor #fromPointer(dynamic #pointer) → dynamic
1213
: super dart.ffi::Struct::_fromPointer(#pointer)
1314
;
1415
static factory allocate(dart.core::double* x, dart.core::double* y, dart.ffi::Pointer<lib::Coordinate*>* next) → lib::Coordinate* {
1516
return null;
1617
}
17-
abstract member-signature get _addressOf() → dart.ffi::Pointer<dart.ffi::Struct*>*; -> dart.ffi::Struct::_addressOf
18+
abstract member-signature get _addressOf() → dart.core::Object*; -> dart.ffi::Struct::_addressOf
1819
abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
1920
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
2021
abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -26,17 +27,17 @@ library from "org-dartlang-test:///lib.dart" as lib {
2627
abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
2728
abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
2829
get x() → dart.core::double*
29-
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_addressOf}, (#C8).{dart.core::List::[]}(dart.ffi::_abi()));
30+
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_addressOf}, (#C13).{dart.core::List::[]}(dart.ffi::_abi()));
3031
set x(dart.core::double* #v) → void
31-
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_addressOf}, (#C8).{dart.core::List::[]}(dart.ffi::_abi()), #v);
32+
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_addressOf}, (#C13).{dart.core::List::[]}(dart.ffi::_abi()), #v);
3233
get y() → dart.core::double*
33-
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_addressOf}, (#C10).{dart.core::List::[]}(dart.ffi::_abi()));
34+
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_addressOf}, (#C15).{dart.core::List::[]}(dart.ffi::_abi()));
3435
set y(dart.core::double* #v) → void
35-
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_addressOf}, (#C10).{dart.core::List::[]}(dart.ffi::_abi()), #v);
36+
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_addressOf}, (#C15).{dart.core::List::[]}(dart.ffi::_abi()), #v);
3637
get next() → dart.ffi::Pointer<lib::Coordinate*>*
37-
return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadIntPtr(this.{dart.ffi::Struct::_addressOf}, (#C12).{dart.core::List::[]}(dart.ffi::_abi())));
38+
return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadIntPtr(this.{dart.ffi::Struct::_addressOf}, (#C17).{dart.core::List::[]}(dart.ffi::_abi())));
3839
set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
39-
return dart.ffi::_storeIntPtr(this.{dart.ffi::Struct::_addressOf}, (#C12).{dart.core::List::[]}(dart.ffi::_abi()), #v.{dart.ffi::Pointer::address});
40+
return dart.ffi::_storeIntPtr(this.{dart.ffi::Struct::_addressOf}, (#C17).{dart.core::List::[]}(dart.ffi::_abi()), #v.{dart.ffi::Pointer::address});
4041
}
4142
}
4243
library from "org-dartlang-test:///main.dart" as main {
@@ -58,13 +59,18 @@ constants {
5859
#C1 = "vm:entry-point"
5960
#C2 = null
6061
#C3 = dart.core::pragma {name:#C1, options:#C2}
61-
#C4 = 24
62-
#C5 = 20
63-
#C6 = <dart.core::int*>[#C4, #C5, #C4]
64-
#C7 = 0
65-
#C8 = <dart.core::int*>[#C7, #C7, #C7]
66-
#C9 = 8
67-
#C10 = <dart.core::int*>[#C9, #C9, #C9]
68-
#C11 = 16
69-
#C12 = <dart.core::int*>[#C11, #C11, #C11]
62+
#C4 = "vm:ffi:struct-fields"
63+
#C5 = TypeLiteralConstant(dart.ffi::Double)
64+
#C6 = TypeLiteralConstant(dart.ffi::Pointer<dart.ffi::NativeType>)
65+
#C7 = <dart.core::Type>[#C5, #C5, #C6]
66+
#C8 = dart.core::pragma {name:#C4, options:#C7}
67+
#C9 = 24
68+
#C10 = 20
69+
#C11 = <dart.core::int*>[#C9, #C10, #C9]
70+
#C12 = 0
71+
#C13 = <dart.core::int*>[#C12, #C12, #C12]
72+
#C14 = 8
73+
#C15 = <dart.core::int*>[#C14, #C14, #C14]
74+
#C16 = 16
75+
#C17 = <dart.core::int*>[#C16, #C16, #C16]
7076
}

0 commit comments

Comments
 (0)