| library #lib; |
| 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?]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" |
| } |