|  | 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}'."; | 
|  | } | 
|  | } |