blob: 6c49846d26a1118061fc40d58e9909e65cf1da96 [file] [log] [blame]
library #lib;
import self as self;
import "dart:core" as core;
import "package:expect/expect.dart" as exp;
class T1 extends core::Object {
synthetic constructor •() void
: super core::Object::•()
;
method doTest1() void {
self::ok = true;
}
}
class A1 extends core::Object {
[@vm.inferred-type.metadata=#lib::T1?] field self::T1 foo = null;
synthetic constructor •() void
: super core::Object::•()
;
method call([dynamic a1 = null, dynamic a2 = null, dynamic a3 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = null, [@vm.inferred-type.metadata=#lib::T1?] dynamic a5 = null]) void {
[@vm.direct-call.metadata=#lib::A1::foo] this.{self::A1::foo} = a5 as{TypeError} self::T1;
}
}
class B1 extends core::Object {
[@vm.inferred-type.metadata=#lib::A1] field self::A1 aa1 = new self::A1::•();
synthetic constructor •() void
: super core::Object::•()
;
}
class T2 extends core::Object {
synthetic constructor •() void
: super core::Object::•()
;
method doTest2() void {
self::ok = true;
}
}
class A2 extends core::Object {
[@vm.inferred-type.metadata=#lib::T2?] field dynamic foo = null;
synthetic constructor •() void
: super core::Object::•()
;
method call([dynamic a1 = null, dynamic a2 = null, dynamic a3 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = null, [@vm.inferred-type.metadata=#lib::T2?] dynamic a6 = null]) void {
[@vm.direct-call.metadata=#lib::A2::foo] this.{self::A2::foo} = a6;
}
}
abstract class B2Base extends core::Object {
[@vm.inferred-type.metadata=#lib::A2] field dynamic _aa = new self::A2::•();
synthetic constructor •() void
: super core::Object::•()
;
get aa2() dynamic
return [@vm.direct-call.metadata=#lib::B2Base::_aa] [@vm.inferred-type.metadata=#lib::A2] this.{self::B2Base::_aa};
}
class B2 extends self::B2Base {
synthetic constructor •() void
: super self::B2Base::•()
;
method doSuperCall() void {
[@vm.call-site-attributes.metadata=receiverType:dynamic] [@vm.direct-call.metadata=#lib::A2::call] [@vm.inferred-type.metadata=#lib::A2] super.{self::B2Base::aa2}.call(1, 2, 3, 4, 5, new self::T2::•());
}
}
class T3 extends core::Object {
synthetic constructor •() void
: super core::Object::•()
;
method doTest3() void {
self::ok = true;
}
}
class A3 extends core::Object {
[@vm.inferred-type.metadata=#lib::T3?] field dynamic foo = null;
synthetic constructor •() void
: super core::Object::•()
;
method call([dynamic a1 = null, dynamic a2 = null, dynamic a3 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a6 = null, [@vm.inferred-type.metadata=#lib::T3?] dynamic a7 = null]) void {
[@vm.direct-call.metadata=#lib::A3::foo] this.{self::A3::foo} = a7;
}
}
class B3 extends core::Object {
[@vm.inferred-type.metadata=#lib::A3] field self::A3 aa3 = new self::A3::•();
synthetic constructor •() void
: super core::Object::•()
;
}
class T4 extends core::Object {
synthetic constructor •() void
: super core::Object::•()
;
method doTest4() void {
self::ok = true;
}
}
class A4 extends core::Object {
[@vm.inferred-type.metadata=#lib::T4?] field dynamic foo = null;
synthetic constructor •() void
: super core::Object::•()
;
method call([dynamic a1 = null, dynamic a2 = null, dynamic a3 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a6 = null, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a7 = null, [@vm.inferred-type.metadata=#lib::T4?] dynamic a8 = null]) void {
[@vm.direct-call.metadata=#lib::A4::foo] this.{self::A4::foo} = a8;
}
}
class B4 extends core::Object {
[@vm.inferred-type.metadata=#lib::A4] field dynamic _aa = new self::A4::•();
synthetic constructor •() void
: super core::Object::•()
;
get aa4() dynamic
return [@vm.direct-call.metadata=#lib::B4::_aa] [@vm.inferred-type.metadata=#lib::A4] this.{self::B4::_aa};
}
[@vm.inferred-type.metadata=dart.core::bool?]static field core::bool ok;
[@vm.inferred-type.metadata=#lib::B3?]static field dynamic bb3 = new self::B3::•();
[@vm.inferred-type.metadata=dart.core::_Closure?]static field core::Function unknown3 = () dynamic => self::bb3;
[@vm.inferred-type.metadata=#lib::B4?]static field dynamic bb4 = new self::B4::•();
[@vm.inferred-type.metadata=dart.core::_Closure?]static field core::Function unknown4 = () dynamic => self::bb4;
static method test1() void {
self::B1 bb = new self::B1::•();
[@vm.inferred-type.metadata=#lib::A1] bb.{self::B1::aa1}(1, 2, 3, 4, new self::T1::•());
self::ok = false;
[@vm.direct-call.metadata=#lib::T1::doTest1??] [@vm.direct-call.metadata=#lib::A1::foo] [@vm.inferred-type.metadata=#lib::T1?] [@vm.direct-call.metadata=#lib::B1::aa1] [@vm.inferred-type.metadata=#lib::A1] bb.{self::B1::aa1}.{self::A1::foo}.{self::T1::doTest1}();
exp::Expect::isTrue([@vm.inferred-type.metadata=dart.core::bool?] self::ok);
}
static method test2() void {
self::B2 bb = new self::B2::•();
[@vm.direct-call.metadata=#lib::B2::doSuperCall] bb.{self::B2::doSuperCall}();
self::ok = false;
[@vm.direct-call.metadata=#lib::T2::doTest2??] [@vm.direct-call.metadata=#lib::A2::foo] [@vm.inferred-type.metadata=#lib::T2?] [@vm.direct-call.metadata=#lib::B2Base::aa2] [@vm.inferred-type.metadata=#lib::A2] bb.{self::B2Base::aa2}.foo.doTest2();
exp::Expect::isTrue([@vm.inferred-type.metadata=dart.core::bool?] self::ok);
}
static method getDynamic3() dynamic
return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function] self::unknown3.call();
static method test3() void {
self::getDynamic3().aa3(1, 2, 3, 4, 5, 6, new self::T3::•());
self::ok = false;
[@vm.direct-call.metadata=#lib::T3::doTest3??] [@vm.direct-call.metadata=#lib::A3::foo] [@vm.inferred-type.metadata=#lib::T3?] [@vm.direct-call.metadata=#lib::B3::aa3??] [@vm.inferred-type.metadata=#lib::A3] [@vm.inferred-type.metadata=#lib::B3?] self::bb3.aa3.foo.doTest3();
exp::Expect::isTrue([@vm.inferred-type.metadata=dart.core::bool?] self::ok);
}
static method getDynamic4() dynamic
return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function] self::unknown4.call();
static method test4() void {
self::getDynamic4().aa4(1, 2, 3, 4, 5, 6, 7, new self::T4::•());
self::ok = false;
[@vm.direct-call.metadata=#lib::T4::doTest4??] [@vm.direct-call.metadata=#lib::A4::foo] [@vm.inferred-type.metadata=#lib::T4?] [@vm.inferred-type.metadata=#lib::A4] self::getDynamic4().aa4.foo.doTest4();
exp::Expect::isTrue([@vm.inferred-type.metadata=dart.core::bool?] self::ok);
}
static method main() void {
self::test1();
self::test2();
self::test3();
self::test4();
}