| library #lib /*isNonNullableByDefault*/; |
| import self as self; |
| import "dart:core" as core; |
| import "package:expect/expect.dart" as exp; |
| |
| import "package:expect/expect.dart"; |
| |
| class A extends core::Object { |
| synthetic constructor •() → self::A |
| : dynamic #t1 = [@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::foo(), super core::Object::•() |
| ; |
| } |
| class B extends core::Object { |
| constructor •() → self::B |
| : dynamic #t2 = [@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::foo(), super core::Object::•() |
| ; |
| } |
| abstract class C<T extends core::Object? = dynamic> extends core::Object { |
| [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1] abstract set /*isLegacy*/ bar(covariant-by-class self::C::T? value) → void; |
| } |
| class D extends core::Object implements self::C<core::int> { |
| synthetic constructor •() → self::D |
| : super core::Object::•() |
| ; |
| [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1] set /*isLegacy*/ bar(covariant-by-class core::int? value) → void; |
| } |
| abstract class E extends core::Object { |
| [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2] [@vm.unboxing-info.metadata=()->i] abstract get /*isLegacy*/ bar() → core::int; |
| } |
| class F extends core::Object implements self::E { |
| synthetic constructor •() → self::F |
| : super core::Object::•() |
| ; |
| [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2] [@vm.unboxing-info.metadata=()->i] get bar() → core::int |
| return 42; |
| } |
| class G extends core::Object /*hasConstConstructor*/ { |
| [@vm.inferred-type.metadata=dart.core::_Smi] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] [@vm.unboxing-info.metadata=()->i] final field core::int bazz; |
| } |
| abstract class H extends core::Object { |
| synthetic constructor •() → self::H |
| : super core::Object::•() |
| ; |
| [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4] set /*isLegacy*/ unused6(core::int? value) → void; |
| } |
| class I extends self::H { |
| synthetic constructor •() → self::I |
| : super self::H::•() |
| ; |
| [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method foo() → dynamic { |
| super.{self::H::unused6} = 3; |
| } |
| } |
| static method foo() → dynamic {} |
| static method main() → void { |
| new self::A::•(); |
| new self::B::•(); |
| self::C<core::num> c = new self::D::•(); |
| exp::Expect::throws<core::Object>(() → void { |
| [@vm.call-site-attributes.metadata=receiverType:#lib::C<dart.core::num>] [@vm.direct-call.metadata=#lib::D.bar] c.{self::C::bar} = 3.14; |
| }); |
| self::E e = new self::F::•(); |
| let final core::int #t3 = [@vm.direct-call.metadata=#lib::F.bar] [@vm.inferred-type.metadata=dart.core::_Smi (value: 42)] e.{self::E::bar}{core::int} in exp::Expect::equals(); |
| exp::Expect::isTrue(!core::identical(#C2, #C4)); |
| [@vm.direct-call.metadata=#lib::I.foo] [@vm.inferred-type.metadata=!? (skip check)] new self::I::•().{self::I::foo}(){() → dynamic}; |
| 5; |
| } |
| constants { |
| #C1 = 1 |
| #C2 = self::G {bazz:#C1} |
| #C3 = 2 |
| #C4 = self::G {bazz:#C3} |
| } |