| library /*isNonNullableByDefault*/; |
| import self as self; |
| import "dart:core" as core; |
| |
| class A extends core::Object { |
| synthetic constructor •() → self::A |
| : super core::Object::•() |
| ; |
| method foo() → dynamic |
| return 23; |
| } |
| extension B on self::A? { |
| method foo = self::B|foo; |
| tearoff foo = self::B|get#foo; |
| method bar = self::B|bar; |
| tearoff bar = self::B|get#bar; |
| } |
| extension C on self::A { |
| method bar = self::C|bar; |
| tearoff bar = self::C|get#bar; |
| } |
| extension D on () →? core::int { |
| method call = self::D|call; |
| tearoff call = self::D|get#call; |
| } |
| static method B|foo(lowered final self::A? #this) → dynamic |
| return 42; |
| static method B|get#foo(lowered final self::A? #this) → () → dynamic |
| return () → dynamic => self::B|foo(#this); |
| static method B|bar(lowered final self::A? #this) → dynamic |
| return 87; |
| static method B|get#bar(lowered final self::A? #this) → () → dynamic |
| return () → dynamic => self::B|bar(#this); |
| static method C|bar(lowered final self::A #this) → dynamic |
| return 123; |
| static method C|get#bar(lowered final self::A #this) → () → dynamic |
| return () → dynamic => self::C|bar(#this); |
| static method D|call(lowered final () →? core::int #this) → core::int |
| return 76; |
| static method D|get#call(lowered final () →? core::int #this) → () → core::int |
| return () → core::int => self::D|call(#this); |
| static method main() → dynamic { |
| self::testA(new self::A::•()); |
| self::testFunction(() → core::int => 53); |
| } |
| static method testA(self::A? a) → dynamic { |
| self::expect(23, let final self::A? #t1 = a in #t1 == null ?{dynamic} null : #t1{self::A}.{self::A::foo}(){() → dynamic}); |
| self::expect(42, self::B|foo(a)); |
| self::expect(123, let final self::A? #t2 = a in #t2 == null ?{dynamic} null : self::C|bar(#t2{self::A})); |
| self::expect(87, self::B|bar(a)); |
| } |
| static method testFunction(() →? core::int f) → dynamic { |
| self::expect(53, let final () →? core::int #t3 = f in #t3 == null ?{core::int?} null : #t3{() → core::int}(){() → core::int}); |
| self::expect(76, self::D|call(f)); |
| } |
| static method expect(dynamic expected, dynamic actual) → dynamic { |
| if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) |
| throw "Expected ${expected}, actual ${actual}"; |
| } |