|  | library; | 
|  | import self as self; | 
|  | import "dart:core" as core; | 
|  |  | 
|  | class C1 extends core::Object { | 
|  | final field core::int id; | 
|  | constructor n1(core::int id, [core::String s = #C1]) → self::C1 | 
|  | : self::C1::id = id, super core::Object::•() { | 
|  | self::log = s; | 
|  | } | 
|  | } | 
|  | extension type ET1(core::int id) { | 
|  | abstract extension-type-member representation-field get id() → core::int; | 
|  | constructor • = self::ET1|constructor#; | 
|  | constructor tearoff • = self::ET1|constructor#_#new#tearOff; | 
|  | constructor n1 = self::ET1|constructor#n1; | 
|  | constructor tearoff n1 = self::ET1|constructor#_#n1#tearOff; | 
|  | } | 
|  | static field dynamic log; | 
|  | static extension-type-member method ET1|constructor#(core::int id) → self::ET1% /* erasure=core::int, declared=! */ { | 
|  | lowered final self::ET1% /* erasure=core::int, declared=! */ #this = id; | 
|  | return #this; | 
|  | } | 
|  | static extension-type-member method ET1|constructor#_#new#tearOff(core::int id) → self::ET1% /* erasure=core::int, declared=! */ | 
|  | return self::ET1|constructor#(id); | 
|  | static extension-type-member method ET1|constructor#n1(core::int id, [core::String s = #C2]) → self::ET1% /* erasure=core::int, declared=! */ { | 
|  | lowered final self::ET1% /* erasure=core::int, declared=! */ #this = id; | 
|  | { | 
|  | self::log = s; | 
|  | } | 
|  | return #this; | 
|  | } | 
|  | static extension-type-member method ET1|constructor#_#n1#tearOff(core::int id, [core::String s = #C2]) → self::ET1% /* erasure=core::int, declared=! */ | 
|  | return self::ET1|constructor#n1(id, s); | 
|  | static method main() → dynamic { | 
|  | (core::int, [core::String]) → self::C1 x = #C3; | 
|  | x(0){(core::int, [core::String]) → self::C1}; | 
|  | self::expect("a", self::log); | 
|  | (core::int, [core::String]) → self::ET1% /* erasure=core::int, declared=! */ y = #C4; | 
|  | y(1){(core::int, [core::String]) → self::ET1% /* erasure=core::int, declared=! */}; | 
|  | self::expect("b", self::log); | 
|  | } | 
|  | static method expect(dynamic expected, dynamic actual) → dynamic { | 
|  | if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) | 
|  | throw "Expected ${expected}, actual ${actual}"; | 
|  | } | 
|  |  | 
|  | constants  { | 
|  | #C1 = "a" | 
|  | #C2 = "b" | 
|  | #C3 = constructor-tearoff self::C1::n1 | 
|  | #C4 = static-tearoff self::ET1|constructor#_#n1#tearOff | 
|  | } |