| library; |
| import self as self; |
| import "dart:core" as core; |
| |
| class A extends core::Object { |
| field core::int field = 42; |
| synthetic constructor •() → self::A |
| : super core::Object::•() |
| ; |
| method method() → core::int |
| return this.{self::A::field}{core::int}; |
| get getter() → core::int |
| return this.{self::A::field}{core::int}; |
| set setter(core::int value) → void { |
| this.{self::A::field} = value; |
| } |
| } |
| class B extends self::A { |
| synthetic constructor •() → self::B |
| : super self::A::•() |
| ; |
| } |
| extension type E(self::B it) implements self::B { |
| abstract extension-type-member representation-field get it() → self::B; |
| constructor • = self::E|constructor#; |
| constructor tearoff • = self::E|constructor#_#new#tearOff; |
| } |
| extension type F(self::B it) implements self::E /* erasure=self::B */ { |
| abstract extension-type-member representation-field get it() → self::B; |
| constructor • = self::F|constructor#; |
| constructor tearoff • = self::F|constructor#_#new#tearOff; |
| } |
| static extension-type-member method E|constructor#(self::B it) → self::E /* erasure=self::B */ { |
| lowered final self::E /* erasure=self::B */ #this = it; |
| return #this; |
| } |
| static extension-type-member method E|constructor#_#new#tearOff(self::B it) → self::E /* erasure=self::B */ |
| return self::E|constructor#(it); |
| static extension-type-member method F|constructor#(self::B it) → self::F /* erasure=self::B */ { |
| lowered final self::F /* erasure=self::B */ #this = it; |
| return #this; |
| } |
| static extension-type-member method F|constructor#_#new#tearOff(self::B it) → self::F /* erasure=self::B */ |
| return self::F|constructor#(it); |
| static method main() → dynamic { |
| self::B b = new self::B::•(); |
| self::E /* erasure=self::B */ e = self::E|constructor#(b); |
| self::F /* erasure=self::B */ f = self::F|constructor#(b); |
| self::expect(42, b.{self::A::field}{core::int}); |
| self::expect(42, e.{self::A::field}{core::int}); |
| self::expect(42, f.{self::A::field}{core::int}); |
| b.{self::A::field} = 87; |
| self::expect(87, b.{self::A::method}(){() → core::int}); |
| self::expect(87, e.{self::A::method}(){() → core::int}); |
| self::expect(87, f.{self::A::method}(){() → core::int}); |
| b.{self::A::setter} = 123; |
| self::expect(123, b.{self::A::getter}{core::int}); |
| self::expect(123, e.{self::A::getter}{core::int}); |
| self::expect(123, f.{self::A::getter}{core::int}); |
| e.{self::A::setter} = 87; |
| self::expect(87, b.{self::A::field}{core::int}); |
| self::expect(87, e.{self::A::field}{core::int}); |
| self::expect(87, f.{self::A::field}{core::int}); |
| e.{self::A::field} = 42; |
| self::expect(42, b.{self::A::getter}{core::int}); |
| self::expect(42, e.{self::A::getter}{core::int}); |
| self::expect(42, f.{self::A::getter}{core::int}); |
| f.{self::A::field} = 87; |
| self::expect(87, b.{self::A::field}{core::int}); |
| self::expect(87, e.{self::A::field}{core::int}); |
| self::expect(87, f.{self::A::field}{core::int}); |
| f.{self::A::setter} = 123; |
| self::expect(123, b.{self::A::method}(){() → core::int}); |
| self::expect(123, e.{self::A::method}(){() → core::int}); |
| self::expect(123, f.{self::A::method}(){() → core::int}); |
| } |
| static method expect(dynamic expected, dynamic actual) → dynamic { |
| if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) |
| throw "Expected ${expected}, actual ${actual}"; |
| } |