blob: 6df825019e745d02de187992d9009021fccdcf47 [file] [log] [blame]
library;
import self as self;
import "dart:core" as core;
class A1 extends core::Object /*hasConstConstructor*/ {
final field core::int foo;
const constructor •(core::int foo) self::A1
: self::A1::foo = foo, super core::Object::•()
;
static factory redir(self::A1 it) self::A1 /* redirection-target: self::E1|constructor#redir */
return self::E1|constructor#redir(it);
}
class A2 extends core::Object /*hasConstConstructor*/ {
final field core::int foo;
const constructor •(core::int foo) self::A2
: self::A2::foo = foo, super core::Object::•()
;
static factory redir(core::bool b) self::A2 /* redirection-target: self::E2|constructor#pick */
return self::E2|constructor#pick(b);
}
class B2 extends self::A2 /*hasConstConstructor*/ {
static const field self::B2 element = const self::B2::•(0);
const constructor •(core::int foo) self::B2
: super self::A2::•(foo)
;
}
class C2 extends self::A2 /*hasConstConstructor*/ {
static const field self::C2 element = const self::C2::•(0);
const constructor •(core::int foo) self::C2
: super self::A2::•(foo)
;
}
extension type E1(self::A1 it) implements self::A1 {
abstract extension-type-member representation-field get it() self::A1;
constructor = self::E1|constructor#;
constructor tearoff = self::E1|constructor#_#new#tearOff;
static redirecting-factory redir = self::E1|constructor#redir;
static redirecting-factory tearoff redir = self::E1|constructor#_#redir#tearOff;
}
extension type E2(self::A2 it) implements self::A2 {
abstract extension-type-member representation-field get it() self::A2;
constructor = self::E2|constructor#;
constructor tearoff = self::E2|constructor#_#new#tearOff;
constructor pick = self::E2|constructor#pick;
constructor tearoff pick = self::E2|constructor#_#pick#tearOff;
}
static extension-type-member method E1|constructor#(self::A1 it) → self::E1 /* erasure=self::A1 */ {
lowered final self::E1 /* erasure=self::A1 */ #this = it;
return #this;
}
static extension-type-member method E1|constructor#_#new#tearOff(self::A1 it) → self::E1 /* erasure=self::A1 */
return self::E1|constructor#(it);
static extension-type-member method E1|constructor#redir(self::A1 it) → self::E1 /* erasure=self::A1 */ /* redirection-target: self::E1|constructor# */
return self::E1|constructor#(it);
static extension-type-member method E1|constructor#_#redir#tearOff(self::A1 it) → self::E1 /* erasure=self::A1 */
return self::E1|constructor#(it);
static method test1() dynamic
;
static extension-type-member method E2|constructor#(self::A2 it) → self::E2 /* erasure=self::A2 */ {
lowered final self::E2 /* erasure=self::A2 */ #this = it;
return #this;
}
static extension-type-member method E2|constructor#_#new#tearOff(self::A2 it) → self::E2 /* erasure=self::A2 */
return self::E2|constructor#(it);
static extension-type-member method E2|constructor#pick(core::bool b) → self::E2 /* erasure=self::A2 */ {
lowered final self::E2 /* erasure=self::A2 */ #this;
#this = self::E2|constructor#(b ?{self::A2} self::B2::element : self::C2::element);
return #this;
}
static extension-type-member method E2|constructor#_#pick#tearOff(core::bool b) → self::E2 /* erasure=self::A2 */
return self::E2|constructor#pick(b);
static method test2() dynamic
;
static method expectIdentical(dynamic expected, dynamic actual) dynamic
;
static method main() dynamic
;
Extra constant evaluation status:
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_from_class.dart:27:35 -> InstanceConstant(const B2{A2.foo: 0})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///redirecting_factory_from_class.dart:32:35 -> InstanceConstant(const C2{A2.foo: 0})
Evaluated: StaticGet @ org-dartlang-testcase:///redirecting_factory_from_class.dart:37:39 -> InstanceConstant(const B2{A2.foo: 0})
Evaluated: StaticGet @ org-dartlang-testcase:///redirecting_factory_from_class.dart:37:52 -> InstanceConstant(const C2{A2.foo: 0})
Extra constant evaluation: evaluated: 31, effectively constant: 4