| library #lib /*isNonNullableByDefault*/; |
| import self as self; |
| import "dart:core" as core; |
| |
| abstract class A extends core::Object { |
| synthetic constructor •() → self::A |
| : super core::Object::•() |
| ; |
| [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=()->i] abstract method foo() → core::int; |
| } |
| class B extends self::A { |
| synthetic constructor •() → self::B |
| : super self::A::•() |
| ; |
| [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=()->i] method foo() → core::int |
| return 1; |
| } |
| class C extends core::Object implements self::A { |
| synthetic constructor •() → self::C |
| : super core::Object::•() |
| ; |
| [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=()->i] method foo() → core::int |
| return 2; |
| } |
| class D extends self::C { |
| synthetic constructor •() → self::D |
| : super self::C::•() |
| ; |
| } |
| class E extends core::Object { |
| synthetic constructor •() → self::E |
| : super core::Object::•() |
| ; |
| [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method toString() → core::String |
| return "D"; |
| } |
| [@vm.inferred-type.metadata=#lib::D]late static field self::A dd; |
| [@vm.inferred-type.metadata=#lib::E?]static field self::E ee = new self::E::•(); |
| static method callerA1([@vm.inferred-type.metadata=!] self::A aa) → void { |
| [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::foo}(){() → core::int}; |
| } |
| static method callerA2([@vm.inferred-type.metadata=#lib::B] self::A aa) → void { |
| [@vm.direct-call.metadata=#lib::B.foo] [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::foo}(){() → core::int}; |
| } |
| static method callerA3([@vm.inferred-type.metadata=#lib::C] self::A aa) → void { |
| [@vm.direct-call.metadata=#lib::C.foo] [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::foo}(){() → core::int}; |
| } |
| static method callerA4([@vm.inferred-type.metadata=#lib::D] self::A aa) → void { |
| [@vm.direct-call.metadata=#lib::C.foo] [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::foo}(){() → core::int}; |
| } |
| static method callerE1() → void { |
| [@vm.direct-call.metadata=dart.core::_StringBase.toString] [@vm.inferred-type.metadata=!? (skip check) (receiver not int)] #C1.{core::Object::toString}(){() → core::String}; |
| } |
| static method callerE2([@vm.inferred-type.metadata=#lib::E?] dynamic x) → void { |
| [@vm.inferred-type.metadata=!? (receiver not int)] x.{core::Object::toString}(){() → core::String}; |
| } |
| static method main(core::List<core::String> args) → dynamic { |
| self::callerA1(new self::B::•()); |
| self::callerA1(new self::C::•()); |
| self::callerA2(new self::B::•()); |
| let final self::C #t1 = new self::C::•() in self::callerA3(#t1); |
| self::callerA4([@vm.inferred-type.metadata=#lib::D] self::dd); |
| self::dd = new self::D::•(); |
| self::callerE1(); |
| self::callerE2([@vm.inferred-type.metadata=#lib::E?] self::ee); |
| } |
| constants { |
| #C1 = "abc" |
| } |