| library /*isNonNullableByDefault*/; | 
 | import self as self; | 
 | import "dart:core" as core; | 
 |  | 
 | abstract class B extends core::Object { | 
 |   synthetic constructor •() → self::B | 
 |     : super core::Object::•() | 
 |     ; | 
 |   abstract method call<T extends core::Object? = dynamic>() → dynamic; | 
 | } | 
 | class C extends core::Object implements self::B { | 
 |   synthetic constructor •() → self::C | 
 |     : super core::Object::•() | 
 |     ; | 
 |   method call<T extends core::Object? = dynamic>() → dynamic | 
 |     return core::print(self::C::call::T%); | 
 |   static method _#new#tearOff() → self::C | 
 |     return new self::C::•(); | 
 | } | 
 | abstract class A extends core::Object { | 
 |   synthetic constructor •() → self::A | 
 |     : super core::Object::•() | 
 |     ; | 
 | } | 
 | class Wrapper extends core::Object { | 
 |   final field self::B b; | 
 |   final field self::B call; | 
 |   constructor •(self::B b, self::B call) → self::Wrapper | 
 |     : self::Wrapper::b = b, self::Wrapper::call = call, super core::Object::•() | 
 |     ; | 
 |   static method _#new#tearOff(self::B b, self::B call) → self::Wrapper | 
 |     return new self::Wrapper::•(b, call); | 
 | } | 
 | static method main() → void { | 
 |   self::B b = new self::C::•(); | 
 |   b.{self::B::call}<self::A>(){() → dynamic}; | 
 |   new self::Wrapper::•(b, b).{self::Wrapper::b}<self::A>(){() → dynamic}; | 
 |   new self::Wrapper::•(b, b).{self::Wrapper::b}{self::B}.{self::B::call}<self::A>(){() → dynamic}; | 
 |   new self::Wrapper::•(b, b).{self::Wrapper::call}<self::A>(){() → dynamic}; | 
 |   new self::Wrapper::•(b, b).{self::Wrapper::call}{self::B}.{self::B::call}<self::A>(){() → dynamic}; | 
 | } |