| library; | 
 | import self as self; | 
 | import "dart:core" as core; | 
 |  | 
 | class B extends core::Object implements self::A { | 
 |   final field core::int x = 1; | 
 |   synthetic constructor •() → self::B | 
 |     : super core::Object::•() | 
 |     ; | 
 |   static method _#new#tearOff() → self::B | 
 |     return new self::B::•(); | 
 | } | 
 | abstract class A extends core::Object { | 
 |   abstract get x() → core::int; | 
 |   static factory •() → self::A /* redirection-target: self::B::• */ | 
 |     return new self::B::•(); | 
 |   static method _#new#tearOff() → self::A | 
 |     return new self::B::•(); | 
 | } | 
 | extension type C(self::A point) implements self::A { | 
 |   abstract extension-type-member representation-field get point() → self::A; | 
 |   constructor _ = self::C|constructor#_; | 
 |   constructor tearoff _ = self::C|constructor#_#_#tearOff; | 
 |   constructor • = self::C|constructor#; | 
 |   constructor tearoff • = self::C|constructor#_#new#tearOff; | 
 | } | 
 | static extension-type-member method C|constructor#_(self::A point) → self::C /* erasure=self::A */ { | 
 |   lowered final self::C /* erasure=self::A */ #this = point; | 
 |   return #this; | 
 | } | 
 | static extension-type-member method C|constructor#_#_#tearOff(self::A point) → self::C /* erasure=self::A */ | 
 |   return self::C|constructor#_(point); | 
 | static extension-type-member method C|constructor#() → self::C /* erasure=self::A */ { | 
 |   lowered final self::C /* erasure=self::A */ #this = new self::B::•(); | 
 |   return #this; | 
 | } | 
 | static extension-type-member method C|constructor#_#new#tearOff() → self::C /* erasure=self::A */ | 
 |   return self::C|constructor#(); | 
 | static method main() → void { | 
 |   self::expectEquals(new self::B::•().{self::A::x}{core::int}, 1); | 
 |   self::expectEquals(self::C|constructor#().{self::A::x}{core::int}, 1); | 
 | } | 
 | static method expectEquals(dynamic x, dynamic y) → dynamic { | 
 |   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) { | 
 |     throw "Expected equal values, got '${x}' and '${y}'."; | 
 |   } | 
 | } |