| library #lib /*isNonNullableByDefault*/; |
| import self as self; |
| import "dart:core" as core; |
| |
| abstract class T0 extends core::Object { |
| synthetic constructor •() → self::T0 |
| : super core::Object::•() |
| ; |
| [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] abstract method foo() → void; |
| } |
| class T2 extends self::T0 { |
| synthetic constructor •() → self::T2 |
| : super self::T0::•() |
| ; |
| [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method foo() → void {} |
| } |
| class A extends core::Object { |
| synthetic constructor •() → self::A |
| : super core::Object::•() |
| ; |
| [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method method1(self::T0 t0) → void { |
| [@vm.direct-call.metadata=#lib::T2.foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}(){() → void}; |
| } |
| } |
| abstract class B extends core::Object { |
| [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] abstract method method2(covariant-by-declaration dynamic arg) → void; |
| } |
| class C extends core::Object implements self::B { |
| synthetic constructor •() → self::C |
| : super core::Object::•() |
| ; |
| [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method method2(covariant-by-declaration self::T0 t0) → void { |
| [@vm.direct-call.metadata=#lib::T2.foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}(){() → void}; |
| } |
| } |
| class D extends core::Object { |
| synthetic constructor •() → self::D |
| : super core::Object::•() |
| ; |
| [@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method method3(self::T0 t0) → void { |
| [@vm.direct-call.metadata=#lib::T2.foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}(){() → void}; |
| } |
| } |
| [@vm.inferred-type.metadata=!]late static field core::Function unknown; |
| static method func1([@vm.inferred-type.metadata=#lib::T2?] self::T0 t0) → void { |
| [@vm.direct-call.metadata=#lib::T2.foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}(){() → void}; |
| } |
| static method func2(self::T0 t0) → void { |
| [@vm.direct-call.metadata=#lib::T2.foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}(){() → void}; |
| } |
| static method getDynamic() → dynamic |
| return self::unknown(); |
| static method use(dynamic x) → dynamic |
| return self::unknown(x); |
| static method main(core::List<core::String> args) → dynamic { |
| self::func1(self::getDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} self::T0); |
| self::use(#C1); |
| self::use(new self::A::•().{self::A::method1}{(self::T0) → void}); |
| self::B bb = self::getDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} self::B; |
| [@vm.direct-call.metadata=#lib::C.method2??] [@vm.inferred-type.metadata=!? (skip check)] bb.{self::B::method2}(self::getDynamic()){(dynamic) → void}; |
| self::getDynamic(){dynamic}.method3(self::getDynamic()); |
| new self::T2::•(); |
| new self::A::•(); |
| new self::C::•(); |
| new self::D::•(); |
| } |
| constants { |
| #C1 = static-tearoff self::func2 |
| } |