5ea90ee907
* Update tearoff runtime equality algorithm with newly specified requirements. * Update kernel golden files for the dartdevc target to include the static method lowering for constructor tearoffs. * Avoid adding source maps and debug symbols to the static methods created by the CFE lowering. * Add additional expected non-nullable values detected in the nullable inference tests. These correspond to the values that appear in the static method return statements. Measurements taken from large applications show the lowering causes a code size increase of 2.5%-3.5%. That increase did not appear to create any measurable difference in initial page load time but if there turns out to be a regression we can revisit each of the various lowerings to implement support in DDC at the site where the constructor is torn off. Fixes: https://github.com/dart-lang/sdk/issues/46486 Fixes: https://github.com/dart-lang/sdk/issues/46837 Change-Id: I01fa39d4f1d0e937919dd1466bb6a34c91a10e75 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/206960 Commit-Queue: Nicholas Shahan <nshahan@google.com> Reviewed-by: Mark Zhou <markzipan@google.com> Reviewed-by: Anna Gringauze <annagrin@google.com> Reviewed-by: Sigmund Cherem <sigmund@google.com>
28 lines
1.0 KiB
Plaintext
28 lines
1.0 KiB
Plaintext
library /*isNonNullableByDefault*/;
|
|
import self as self;
|
|
import "dart:core" as core;
|
|
|
|
class Class extends core::Object {
|
|
synthetic constructor •() → self::Class
|
|
: super core::Object::•()
|
|
;
|
|
get idFunction() → <S extends core::Object? = dynamic>(S%) → S%
|
|
return #C1;
|
|
get dynFunction() → dynamic
|
|
return #C1;
|
|
static method _#new#tearOff() → self::Class
|
|
return new self::Class::•();
|
|
}
|
|
static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
|
|
return t;
|
|
static method main() → dynamic {
|
|
self::Class c = new self::Class::•();
|
|
let final self::Class #t1 = c in let final core::int #t2 = 0 in #t1.{self::Class::idFunction}<core::int>(#t2){(core::int) → core::int};
|
|
let final self::Class #t3 = c in let final core::int #t4 = 0 in #t3.{self::Class::idFunction}<core::int>(#t4){(core::int) → core::int};
|
|
let final self::Class #t5 = c in let final core::int #t6 = 0 in #t5.{self::Class::dynFunction}(#t6);
|
|
}
|
|
|
|
constants {
|
|
#C1 = static-tearoff self::id
|
|
}
|