| library; |
| import self as self; |
| import "dart:core" as core; |
| |
| class C extends core::Object { |
| synthetic constructor •() → self::C |
| : super core::Object::•() |
| ; |
| method call() → core::String |
| return "call from C"; |
| } |
| class D extends core::Object { |
| synthetic constructor •() → self::D |
| : super core::Object::•() |
| ; |
| get getter1() → core::Function |
| return self::Ext|get#call(self::Ext|constructor#(let final self::C #t1 = new self::C::•() in #t1 == null ?{() → core::String} null : #t1.{self::C::call}{() → core::String})); |
| get getter2() → core::Function { |
| self::Ext% /* erasure=core::Function, declared=! */ result = self::Ext|constructor#(let final self::C #t2 = new self::C::•() in #t2 == null ?{() → core::String} null : #t2.{self::C::call}{() → core::String}); |
| return self::Ext|get#call(result); |
| } |
| get getter3() → core::Function |
| return let final self::Ext2 /* erasure=self::C */ #t3 = self::Ext2|constructor#(new self::C::•()) in #t3 == null ?{() → core::String} null : #t3.{self::C::call}{() → core::String}; |
| get getter4() → core::Function { |
| self::Ext2 /* erasure=self::C */ result = self::Ext2|constructor#(new self::C::•()); |
| return let final self::Ext2 /* erasure=self::C */ #t4 = result in #t4 == null ?{() → core::String} null : #t4.{self::C::call}{() → core::String}; |
| } |
| method method1<T extends self::C>(self::D::method1::T c) → core::Function { |
| return let final self::D::method1::T #t5 = c in #t5 == null ?{() → core::String} null : #t5.{self::C::call}{() → core::String}; |
| } |
| method method2<T extends self::C>(self::D::method2::T c) → core::Function { |
| self::Ext% /* erasure=core::Function, declared=! */ result = self::Ext|constructor#(let final self::D::method2::T #t6 = c in #t6 == null ?{() → core::String} null : #t6.{self::C::call}{() → core::String}); |
| return self::Ext|get#call(result); |
| } |
| method method3<T extends self::Ext% /* erasure=core::Function, declared=! */>(self::Ext% /* erasure=core::Function, declared=! */ e) → core::Function { |
| return self::Ext|get#call(e); |
| } |
| method method4<T extends self::Ext2 /* erasure=self::C */>(self::Ext2 /* erasure=self::C */ e) → core::Function { |
| return let final self::Ext2 /* erasure=self::C */ #t7 = e in #t7 == null ?{() → core::String} null : #t7.{self::C::call}{() → core::String}; |
| } |
| method method5<T extends core::Object? = dynamic>(self::D::method5::T% c) → core::Function { |
| if(c is self::C) { |
| return let final self::D::method5::T% & self::C /* '%' & '!' = '!' */ #t8 = c{self::D::method5::T% & self::C /* '%' & '!' = '!' */} in #t8 == null ?{() → core::String} null : #t8.{self::C::call}{() → core::String}; |
| } |
| return () → Null => null; |
| } |
| method method6<T extends core::Object? = dynamic, S extends self::C>(self::D::method6::T% c) → core::Function { |
| if(c is self::D::method6::S) { |
| return let final self::D::method6::T% & self::D::method6::S /* '%' & '!' = '!' */ #t9 = c{self::D::method6::T% & self::D::method6::S /* '%' & '!' = '!' */} in #t9 == null ?{() → core::String} null : #t9.{self::C::call}{() → core::String}; |
| } |
| return () → Null => null; |
| } |
| } |
| class E extends core::Object { |
| synthetic constructor •() → self::E |
| : super core::Object::•() |
| ; |
| get getter1() → core::String |
| return self::Ext|call(self::Ext|constructor#(let final self::C #t10 = new self::C::•() in #t10 == null ?{() → core::String} null : #t10.{self::C::call}{() → core::String})); |
| get getter2() → core::String { |
| core::String result = self::Ext|call(self::Ext|constructor#(let final self::C #t11 = new self::C::•() in #t11 == null ?{() → core::String} null : #t11.{self::C::call}{() → core::String})); |
| return result; |
| } |
| get getter3() → core::String |
| return self::Ext2|constructor#(new self::C::•()).{self::C::call}(){() → core::String}; |
| get getter4() → core::String { |
| core::String result = self::Ext2|constructor#(new self::C::•()).{self::C::call}(){() → core::String}; |
| return result; |
| } |
| method method1<T extends self::C>(self::E::method1::T c) → core::String { |
| return c.{self::C::call}(){() → core::String}; |
| } |
| method method2<T extends self::C>(self::E::method2::T c) → core::String { |
| core::String result = self::Ext|call(self::Ext|constructor#(let final self::E::method2::T #t12 = c in #t12 == null ?{() → core::String} null : #t12.{self::C::call}{() → core::String})); |
| return result; |
| } |
| method method3<T extends self::Ext% /* erasure=core::Function, declared=! */>(self::Ext% /* erasure=core::Function, declared=! */ e) → core::String { |
| return self::Ext|call(e); |
| } |
| method method4<T extends self::Ext2 /* erasure=self::C */>(self::Ext2 /* erasure=self::C */ e) → core::String { |
| return e.{self::C::call}(){() → core::String}; |
| } |
| method method5<T extends core::Object? = dynamic>(self::E::method5::T% c) → core::String { |
| if(c is self::C) { |
| return c{self::E::method5::T% & self::C /* '%' & '!' = '!' */}.{self::C::call}(){() → core::String}; |
| } |
| return ""; |
| } |
| method method6<T extends core::Object? = dynamic, S extends self::C>(self::E::method6::T% c) → core::String { |
| if(c is self::E::method6::S) { |
| return c{self::E::method6::T% & self::E::method6::S /* '%' & '!' = '!' */}.{self::C::call}(){() → core::String}; |
| } |
| return ""; |
| } |
| } |
| extension type Ext(core::Function it) { |
| abstract extension-type-member representation-field get it() → core::Function; |
| method call = self::Ext|call; |
| method tearoff call = self::Ext|get#call; |
| constructor • = self::Ext|constructor#; |
| constructor tearoff • = self::Ext|constructor#_#new#tearOff; |
| } |
| extension type Ext2(self::C c) implements self::C { |
| abstract extension-type-member representation-field get c() → self::C; |
| constructor • = self::Ext2|constructor#; |
| constructor tearoff • = self::Ext2|constructor#_#new#tearOff; |
| } |
| static extension-type-member method Ext|constructor#(core::Function it) → self::Ext% /* erasure=core::Function, declared=! */ { |
| lowered final self::Ext% /* erasure=core::Function, declared=! */ #this = it; |
| return #this; |
| } |
| static extension-type-member method Ext|constructor#_#new#tearOff(core::Function it) → self::Ext% /* erasure=core::Function, declared=! */ |
| return self::Ext|constructor#(it); |
| static extension-type-member method Ext|call(lowered final self::Ext% /* erasure=core::Function, declared=! */ #this) → core::String |
| return "call from Ext: ${(#this as{Unchecked} core::Function)()}"; |
| static extension-type-member method Ext|get#call(lowered final self::Ext% /* erasure=core::Function, declared=! */ #this) → () → core::String |
| return () → core::String => self::Ext|call(#this); |
| static extension-type-member method Ext2|constructor#(self::C c) → self::Ext2 /* erasure=self::C */ { |
| lowered final self::Ext2 /* erasure=self::C */ #this = c; |
| return #this; |
| } |
| static extension-type-member method Ext2|constructor#_#new#tearOff(self::C c) → self::Ext2 /* erasure=self::C */ |
| return self::Ext2|constructor#(c); |
| static method main() → void { |
| self::D d = new self::D::•(); |
| core::print(d.{self::D::getter1}{core::Function}()); |
| core::print(d.{self::D::getter2}{core::Function}()); |
| core::print(d.{self::D::getter3}{core::Function}()); |
| core::print(d.{self::D::getter4}{core::Function}()); |
| core::print(d.{self::D::method1}<self::C>(new self::C::•()){(self::C) → core::Function}()); |
| core::print(d.{self::D::method2}<self::C>(new self::C::•()){(self::C) → core::Function}()); |
| core::print(d.{self::D::method3}<self::Ext% /* erasure=core::Function, declared=! */>(self::Ext|constructor#(let final self::C #t13 = new self::C::•() in #t13 == null ?{() → core::String} null : #t13.{self::C::call}{() → core::String})){(self::Ext% /* erasure=core::Function, declared=! */) → core::Function}()); |
| core::print(d.{self::D::method4}<self::Ext2 /* erasure=self::C */>(self::Ext2|constructor#(new self::C::•())){(self::Ext2 /* erasure=self::C */) → core::Function}()); |
| core::print(d.{self::D::method5}<self::C>(new self::C::•()){(self::C) → core::Function}()); |
| core::print(d.{self::D::method6}<self::C, self::C>(new self::C::•()){(self::C) → core::Function}()); |
| self::E e = new self::E::•(); |
| core::print(e.{self::E::getter1}{core::String}); |
| core::print(e.{self::E::getter2}{core::String}); |
| core::print(e.{self::E::getter3}{core::String}); |
| core::print(e.{self::E::getter4}{core::String}); |
| core::print(e.{self::E::method1}<self::C>(new self::C::•()){(self::C) → core::String}); |
| core::print(e.{self::E::method2}<self::C>(new self::C::•()){(self::C) → core::String}); |
| core::print(e.{self::E::method3}<self::Ext% /* erasure=core::Function, declared=! */>(self::Ext|constructor#(let final self::C #t14 = new self::C::•() in #t14 == null ?{() → core::String} null : #t14.{self::C::call}{() → core::String})){(self::Ext% /* erasure=core::Function, declared=! */) → core::String}); |
| core::print(e.{self::E::method4}<self::Ext2 /* erasure=self::C */>(self::Ext2|constructor#(new self::C::•())){(self::Ext2 /* erasure=self::C */) → core::String}); |
| core::print(e.{self::E::method5}<self::C>(new self::C::•()){(self::C) → core::String}); |
| core::print(e.{self::E::method6}<self::C, self::C>(new self::C::•()){(self::C) → core::String}); |
| } |