Skip to content

Commit d27f166

Browse files
dcharkescommit-bot@chromium.org
authored andcommitted
[vm/ffi] Tree shaking of Struct sub classes
This CL enables tree shaking of `Struct` sub classes by simulating the native behavior in Dart code. We call the struct constructors in let expressions where FFI trampolines are created which allocate these struct objects in native code. This way TFA is instructed about the native behavior. The VM recognizes these constructor calls as dead code and removes them. For more info see go/dart-ffi-struct-treeshaking. Closes: #38721 This CL fixes the types on the generated #fromTypedDataBase constructors. Also, this CL also cleans up the struct naming: * _addressOf -> _typedDataBase * _fromPointer -> _fromTypedDataBase * #pointer -> #typedDataBase These cleanups are not split into a separate CL to prevent updating the .expect files multiple times. Finally, this CL enables running a single transformer test through: `dart pkg/vm/test/transformations/type_flow/transformer_test.dart name` TEST=pkg/vm/testcases/transformations/type_flow/transformer/ffi_struct_constructors.dart TEST=tests/ffi(_2)/function_callbacks_structs_by_value_generated_test.dart TEST=tests/ffi(_2)/function_structs_by_value_generated_test.dart Change-Id: I418d0d73bc86b234dfe5b7b04ae726c33d2b8aeb Cq-Include-Trybots: luci.dart.try:vm-precomp-ffi-qemu-linux-release-arm-try,vm-ffi-android-debug-arm64-try,vm-kernel-precomp-asan-linux-release-x64-try,vm-kernel-precomp-dwarf-linux-product-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,analyzer-analysis-server-linux-try,analyzer-linux-release-try,dart-sdk-linux-try,vm-kernel-reload-rollback-linux-debug-x64-try,vm-kernel-reload-linux-debug-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/193661 Commit-Queue: Daco Harkes <[email protected]> Reviewed-by: Alexander Markov <[email protected]>
1 parent 4a6a92e commit d27f166

26 files changed

+658
-313
lines changed

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

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

pkg/front_end/testcases/general/ffi_sample.dart.weak.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(ffi::Allocator* allocator, core::double* x, core::double* y, ffi::Pointer<self::Coordinate*>* next) → self::Coordinate*
1616
;
17-
abstract member-signature get _addressOf() → core::Object*; -> ffi::Struct::_addressOf
17+
abstract member-signature get _typedDataBase() → core::Object*; -> ffi::Struct::_typedDataBase
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.weak.transformed.expect

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@ import "package:ffi/ffi.dart";
99
@#C7
1010
class Coordinate extends ffi::Struct {
1111
static final field core::int* #sizeOf = (#C10).{core::List::[]}(ffi::_abi());
12-
@#C12
13-
constructor #fromTypedDataBase(dynamic #pointer) → dynamic
14-
: super ffi::Struct::_fromPointer(#pointer)
12+
constructor #fromTypedDataBase(core::Object #typedDataBase) → self::Coordinate
13+
: super ffi::Struct::_fromTypedDataBase(#typedDataBase)
1514
;
1615
static factory allocate(ffi::Allocator* allocator, core::double* x, core::double* y, ffi::Pointer<self::Coordinate*>* next) → self::Coordinate* {
1716
return let final self::Coordinate* #t1 = new self::Coordinate::#fromTypedDataBase(allocator.{ffi::Allocator::allocate}<self::Coordinate*>(self::Coordinate::#sizeOf)!) in block {
@@ -20,7 +19,7 @@ class Coordinate extends ffi::Struct {
2019
#t1.{self::Coordinate::next} = next;
2120
} =>#t1;
2221
}
23-
abstract member-signature get _addressOf() → core::Object*; -> ffi::Struct::_addressOf
22+
abstract member-signature get _typedDataBase() → core::Object*; -> ffi::Struct::_typedDataBase
2423
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
2524
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
2625
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -32,17 +31,17 @@ class Coordinate extends ffi::Struct {
3231
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
3332
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
3433
get x() → core::double*
35-
return ffi::_loadDouble(this.{ffi::Struct::_addressOf}, (#C14).{core::List::[]}(ffi::_abi()));
34+
return ffi::_loadDouble(this.{ffi::Struct::_typedDataBase}, (#C12).{core::List::[]}(ffi::_abi()));
3635
set x(core::double* #v) → void
37-
return ffi::_storeDouble(this.{ffi::Struct::_addressOf}, (#C14).{core::List::[]}(ffi::_abi()), #v);
36+
return ffi::_storeDouble(this.{ffi::Struct::_typedDataBase}, (#C12).{core::List::[]}(ffi::_abi()), #v);
3837
get y() → core::double*
39-
return ffi::_loadDouble(this.{ffi::Struct::_addressOf}, (#C16).{core::List::[]}(ffi::_abi()));
38+
return ffi::_loadDouble(this.{ffi::Struct::_typedDataBase}, (#C14).{core::List::[]}(ffi::_abi()));
4039
set y(core::double* #v) → void
41-
return ffi::_storeDouble(this.{ffi::Struct::_addressOf}, (#C16).{core::List::[]}(ffi::_abi()), #v);
40+
return ffi::_storeDouble(this.{ffi::Struct::_typedDataBase}, (#C14).{core::List::[]}(ffi::_abi()), #v);
4241
get next() → ffi::Pointer<self::Coordinate*>*
43-
return ffi::_fromAddress<self::Coordinate*>(ffi::_loadIntPtr(this.{ffi::Struct::_addressOf}, (#C18).{core::List::[]}(ffi::_abi())));
42+
return ffi::_fromAddress<self::Coordinate*>(ffi::_loadIntPtr(this.{ffi::Struct::_typedDataBase}, (#C16).{core::List::[]}(ffi::_abi())));
4443
set next(ffi::Pointer<self::Coordinate*>* #v) → void
45-
return ffi::_storeIntPtr(this.{ffi::Struct::_addressOf}, (#C18).{core::List::[]}(ffi::_abi()), #v.{ffi::Pointer::address});
44+
return ffi::_storeIntPtr(this.{ffi::Struct::_typedDataBase}, (#C16).{core::List::[]}(ffi::_abi()), #v.{ffi::Pointer::address});
4645
}
4746
static method main() → dynamic {}
4847

@@ -57,14 +56,12 @@ constants {
5756
#C8 = 24
5857
#C9 = 20
5958
#C10 = <core::int*>[#C8, #C9, #C8]
60-
#C11 = "vm:entry-point"
61-
#C12 = core::pragma {name:#C11, options:#C5}
62-
#C13 = 0
59+
#C11 = 0
60+
#C12 = <core::int*>[#C11, #C11, #C11]
61+
#C13 = 8
6362
#C14 = <core::int*>[#C13, #C13, #C13]
64-
#C15 = 8
63+
#C15 = 16
6564
#C16 = <core::int*>[#C15, #C15, #C15]
66-
#C17 = 16
67-
#C18 = <core::int*>[#C17, #C17, #C17]
6865
}
6966

7067

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

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,13 @@ library from "org-dartlang-test:///lib.dart" as lib {
66
@#C7
77
class Coordinate extends dart.ffi::Struct {
88
static final field dart.core::int* #sizeOf = (#C10).{dart.core::List::[]}(dart.ffi::_abi());
9-
@#C12
10-
constructor #fromTypedDataBase(dynamic #pointer) → dynamic
11-
: super dart.ffi::Struct::_fromPointer(#pointer)
9+
constructor #fromTypedDataBase(dart.core::Object #typedDataBase) → lib::Coordinate
10+
: super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
1211
;
1312
static factory allocate(dart.core::double* x, dart.core::double* y, dart.ffi::Pointer<lib::Coordinate*>* next) → lib::Coordinate* {
1413
return null;
1514
}
16-
abstract member-signature get _addressOf() → dart.core::Object*; -> dart.ffi::Struct::_addressOf
15+
abstract member-signature get _typedDataBase() → dart.core::Object*; -> dart.ffi::Struct::_typedDataBase
1716
abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
1817
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
1918
abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -25,17 +24,17 @@ library from "org-dartlang-test:///lib.dart" as lib {
2524
abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
2625
abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
2726
get x() → dart.core::double*
28-
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_addressOf}, (#C14).{dart.core::List::[]}(dart.ffi::_abi()));
27+
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_typedDataBase}, (#C12).{dart.core::List::[]}(dart.ffi::_abi()));
2928
set x(dart.core::double* #v) → void
30-
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_addressOf}, (#C14).{dart.core::List::[]}(dart.ffi::_abi()), #v);
29+
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_typedDataBase}, (#C12).{dart.core::List::[]}(dart.ffi::_abi()), #v);
3130
get y() → dart.core::double*
32-
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_addressOf}, (#C16).{dart.core::List::[]}(dart.ffi::_abi()));
31+
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_typedDataBase}, (#C14).{dart.core::List::[]}(dart.ffi::_abi()));
3332
set y(dart.core::double* #v) → void
34-
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_addressOf}, (#C16).{dart.core::List::[]}(dart.ffi::_abi()), #v);
33+
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_typedDataBase}, (#C14).{dart.core::List::[]}(dart.ffi::_abi()), #v);
3534
get next() → dart.ffi::Pointer<lib::Coordinate*>*
36-
return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadIntPtr(this.{dart.ffi::Struct::_addressOf}, (#C18).{dart.core::List::[]}(dart.ffi::_abi())));
35+
return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadIntPtr(this.{dart.ffi::Struct::_typedDataBase}, (#C16).{dart.core::List::[]}(dart.ffi::_abi())));
3736
set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
38-
return dart.ffi::_storeIntPtr(this.{dart.ffi::Struct::_addressOf}, (#C18).{dart.core::List::[]}(dart.ffi::_abi()), #v.{dart.ffi::Pointer::address});
37+
return dart.ffi::_storeIntPtr(this.{dart.ffi::Struct::_typedDataBase}, (#C16).{dart.core::List::[]}(dart.ffi::_abi()), #v.{dart.ffi::Pointer::address});
3938
}
4039
}
4140
library from "org-dartlang-test:///main.dart" as main {
@@ -60,12 +59,10 @@ constants {
6059
#C8 = 24
6160
#C9 = 20
6261
#C10 = <dart.core::int*>[#C8, #C9, #C8]
63-
#C11 = "vm:entry-point"
64-
#C12 = dart.core::pragma {name:#C11, options:#C5}
65-
#C13 = 0
62+
#C11 = 0
63+
#C12 = <dart.core::int*>[#C11, #C11, #C11]
64+
#C13 = 8
6665
#C14 = <dart.core::int*>[#C13, #C13, #C13]
67-
#C15 = 8
66+
#C15 = 16
6867
#C16 = <dart.core::int*>[#C15, #C15, #C15]
69-
#C17 = 16
70-
#C18 = <dart.core::int*>[#C17, #C17, #C17]
7168
}

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

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,13 @@ library from "org-dartlang-test:///lib.dart" as lib {
66
@#C7
77
class Coordinate extends dart.ffi::Struct {
88
static final field dart.core::int* #sizeOf = (#C10).{dart.core::List::[]}(dart.ffi::_abi());
9-
@#C12
10-
constructor #fromTypedDataBase(dynamic #pointer) → dynamic
11-
: super dart.ffi::Struct::_fromPointer(#pointer)
9+
constructor #fromTypedDataBase(dart.core::Object #typedDataBase) → lib::Coordinate
10+
: super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
1211
;
1312
static factory allocate(dart.core::double* x, dart.core::double* y, dart.ffi::Pointer<lib::Coordinate*>* next) → lib::Coordinate* {
1413
return null;
1514
}
16-
abstract member-signature get _addressOf() → dart.core::Object*; -> dart.ffi::Struct::_addressOf
15+
abstract member-signature get _typedDataBase() → dart.core::Object*; -> dart.ffi::Struct::_typedDataBase
1716
abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
1817
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
1918
abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -25,17 +24,17 @@ library from "org-dartlang-test:///lib.dart" as lib {
2524
abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
2625
abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
2726
get x() → dart.core::double*
28-
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_addressOf}, (#C14).{dart.core::List::[]}(dart.ffi::_abi()));
27+
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_typedDataBase}, (#C12).{dart.core::List::[]}(dart.ffi::_abi()));
2928
set x(dart.core::double* #v) → void
30-
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_addressOf}, (#C14).{dart.core::List::[]}(dart.ffi::_abi()), #v);
29+
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_typedDataBase}, (#C12).{dart.core::List::[]}(dart.ffi::_abi()), #v);
3130
get y() → dart.core::double*
32-
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_addressOf}, (#C16).{dart.core::List::[]}(dart.ffi::_abi()));
31+
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_typedDataBase}, (#C14).{dart.core::List::[]}(dart.ffi::_abi()));
3332
set y(dart.core::double* #v) → void
34-
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_addressOf}, (#C16).{dart.core::List::[]}(dart.ffi::_abi()), #v);
33+
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_typedDataBase}, (#C14).{dart.core::List::[]}(dart.ffi::_abi()), #v);
3534
get next() → dart.ffi::Pointer<lib::Coordinate*>*
36-
return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadIntPtr(this.{dart.ffi::Struct::_addressOf}, (#C18).{dart.core::List::[]}(dart.ffi::_abi())));
35+
return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadIntPtr(this.{dart.ffi::Struct::_typedDataBase}, (#C16).{dart.core::List::[]}(dart.ffi::_abi())));
3736
set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
38-
return dart.ffi::_storeIntPtr(this.{dart.ffi::Struct::_addressOf}, (#C18).{dart.core::List::[]}(dart.ffi::_abi()), #v.{dart.ffi::Pointer::address});
37+
return dart.ffi::_storeIntPtr(this.{dart.ffi::Struct::_typedDataBase}, (#C16).{dart.core::List::[]}(dart.ffi::_abi()), #v.{dart.ffi::Pointer::address});
3938
}
4039
}
4140
library from "org-dartlang-test:///main.dart" as main {
@@ -64,12 +63,10 @@ constants {
6463
#C8 = 24
6564
#C9 = 20
6665
#C10 = <dart.core::int*>[#C8, #C9, #C8]
67-
#C11 = "vm:entry-point"
68-
#C12 = dart.core::pragma {name:#C11, options:#C5}
69-
#C13 = 0
66+
#C11 = 0
67+
#C12 = <dart.core::int*>[#C11, #C11, #C11]
68+
#C13 = 8
7069
#C14 = <dart.core::int*>[#C13, #C13, #C13]
71-
#C15 = 8
70+
#C15 = 16
7271
#C16 = <dart.core::int*>[#C15, #C15, #C15]
73-
#C17 = 16
74-
#C18 = <dart.core::int*>[#C17, #C17, #C17]
7572
}

pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,13 @@ library from "org-dartlang-test:///lib.dart" as lib {
66
@#C7
77
class Coordinate extends dart.ffi::Struct {
88
static final field dart.core::int* #sizeOf = (#C10).{dart.core::List::[]}(dart.ffi::_abi());
9-
@#C12
10-
constructor #fromTypedDataBase(dynamic #pointer) → dynamic
11-
: super dart.ffi::Struct::_fromPointer(#pointer)
9+
constructor #fromTypedDataBase(dart.core::Object #typedDataBase) → lib::Coordinate
10+
: super dart.ffi::Struct::_fromTypedDataBase(#typedDataBase)
1211
;
1312
static factory allocate(dart.core::double* x, dart.core::double* y, dart.ffi::Pointer<lib::Coordinate*>* next) → lib::Coordinate* {
1413
return null;
1514
}
16-
abstract member-signature get _addressOf() → dart.core::Object*; -> dart.ffi::Struct::_addressOf
15+
abstract member-signature get _typedDataBase() → dart.core::Object*; -> dart.ffi::Struct::_typedDataBase
1716
abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
1817
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
1918
abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -25,17 +24,17 @@ library from "org-dartlang-test:///lib.dart" as lib {
2524
abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
2625
abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
2726
get x() → dart.core::double*
28-
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_addressOf}, (#C14).{dart.core::List::[]}(dart.ffi::_abi()));
27+
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_typedDataBase}, (#C12).{dart.core::List::[]}(dart.ffi::_abi()));
2928
set x(dart.core::double* #v) → void
30-
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_addressOf}, (#C14).{dart.core::List::[]}(dart.ffi::_abi()), #v);
29+
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_typedDataBase}, (#C12).{dart.core::List::[]}(dart.ffi::_abi()), #v);
3130
get y() → dart.core::double*
32-
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_addressOf}, (#C16).{dart.core::List::[]}(dart.ffi::_abi()));
31+
return dart.ffi::_loadDouble(this.{dart.ffi::Struct::_typedDataBase}, (#C14).{dart.core::List::[]}(dart.ffi::_abi()));
3332
set y(dart.core::double* #v) → void
34-
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_addressOf}, (#C16).{dart.core::List::[]}(dart.ffi::_abi()), #v);
33+
return dart.ffi::_storeDouble(this.{dart.ffi::Struct::_typedDataBase}, (#C14).{dart.core::List::[]}(dart.ffi::_abi()), #v);
3534
get next() → dart.ffi::Pointer<lib::Coordinate*>*
36-
return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadIntPtr(this.{dart.ffi::Struct::_addressOf}, (#C18).{dart.core::List::[]}(dart.ffi::_abi())));
35+
return dart.ffi::_fromAddress<lib::Coordinate*>(dart.ffi::_loadIntPtr(this.{dart.ffi::Struct::_typedDataBase}, (#C16).{dart.core::List::[]}(dart.ffi::_abi())));
3736
set next(dart.ffi::Pointer<lib::Coordinate*>* #v) → void
38-
return dart.ffi::_storeIntPtr(this.{dart.ffi::Struct::_addressOf}, (#C18).{dart.core::List::[]}(dart.ffi::_abi()), #v.{dart.ffi::Pointer::address});
37+
return dart.ffi::_storeIntPtr(this.{dart.ffi::Struct::_typedDataBase}, (#C16).{dart.core::List::[]}(dart.ffi::_abi()), #v.{dart.ffi::Pointer::address});
3938
}
4039
}
4140
library from "org-dartlang-test:///main.dart" as main {
@@ -61,12 +60,10 @@ constants {
6160
#C8 = 24
6261
#C9 = 20
6362
#C10 = <dart.core::int*>[#C8, #C9, #C8]
64-
#C11 = "vm:entry-point"
65-
#C12 = dart.core::pragma {name:#C11, options:#C5}
66-
#C13 = 0
63+
#C11 = 0
64+
#C12 = <dart.core::int*>[#C11, #C11, #C11]
65+
#C13 = 8
6766
#C14 = <dart.core::int*>[#C13, #C13, #C13]
68-
#C15 = 8
67+
#C15 = 16
6968
#C16 = <dart.core::int*>[#C15, #C15, #C15]
70-
#C17 = 16
71-
#C18 = <dart.core::int*>[#C17, #C17, #C17]
7269
}

0 commit comments

Comments
 (0)