| library; |
| // |
| // Problems in library: |
| // |
| // pkg/front_end/testcases/extensions/explicit_extension_access.dart:44:23: Error: Too many positional arguments: 0 allowed, but 1 found. |
| // Try removing the extra positional arguments. |
| // Extension1(c).method(0); // Error |
| // ^ |
| // pkg/front_end/testcases/extensions/explicit_extension_access.dart:16:7: Context: Found this candidate, but the arguments don't match. |
| // int method() => field1; |
| // ^^^^^^ |
| // |
| import self as self; |
| import "dart:core" as core; |
| |
| class Class extends core::Object { |
| field core::int field1 = 42; |
| field core::int field2 = 87; |
| synthetic constructor •() → self::Class |
| : super core::Object::•() |
| ; |
| } |
| extension Extension1 on self::Class { |
| get field = self::Extension1|get#field; |
| set field = self::Extension1|set#field; |
| method method = self::Extension1|method; |
| method tearoff method = self::Extension1|get#method; |
| method genericMethod = self::Extension1|genericMethod; |
| method tearoff genericMethod = self::Extension1|get#genericMethod; |
| } |
| extension Extension2 on self::Class { |
| get field = self::Extension2|get#field; |
| set field = self::Extension2|set#field; |
| method method = self::Extension2|method; |
| method tearoff method = self::Extension2|get#method; |
| method genericMethod = self::Extension2|genericMethod; |
| method tearoff genericMethod = self::Extension2|get#genericMethod; |
| } |
| extension /* unnamed */ _extension#2 on core::int { |
| method method1 = self::_extension#2|method1; |
| method tearoff method1 = self::_extension#2|get#method1; |
| method method2 = self::_extension#2|method2; |
| method tearoff method2 = self::_extension#2|get#method2; |
| } |
| static extension-member method Extension1|get#field(lowered final self::Class #this) → core::int |
| return #this.{self::Class::field1}{core::int}; |
| static extension-member method Extension1|set#field(lowered final self::Class #this, core::int value) → void { |
| #this.{self::Class::field1} = value; |
| } |
| static extension-member method Extension1|method(lowered final self::Class #this) → core::int |
| return #this.{self::Class::field1}{core::int}; |
| static extension-member method Extension1|get#method(lowered final self::Class #this) → () → core::int |
| return () → core::int => self::Extension1|method(#this); |
| static extension-member method Extension1|genericMethod<T extends core::num>(lowered final self::Class #this, self::Extension1|genericMethod::T t) → core::num |
| return #this.{self::Class::field1}{core::int}.{core::num::+}(t){(core::num) → core::num}; |
| static extension-member method Extension1|get#genericMethod(lowered final self::Class #this) → <T extends core::num>(T) → core::num |
| return <T extends core::num>(T t) → core::num => self::Extension1|genericMethod<T>(#this, t); |
| static extension-member method Extension2|get#field(lowered final self::Class #this) → core::int |
| return #this.{self::Class::field2}{core::int}; |
| static extension-member method Extension2|set#field(lowered final self::Class #this, core::int value) → void { |
| #this.{self::Class::field2} = value; |
| } |
| static extension-member method Extension2|method(lowered final self::Class #this) → core::int |
| return #this.{self::Class::field2}{core::int}; |
| static extension-member method Extension2|get#method(lowered final self::Class #this) → () → core::int |
| return () → core::int => self::Extension2|method(#this); |
| static extension-member method Extension2|genericMethod<T extends core::num>(lowered final self::Class #this, self::Extension2|genericMethod::T t) → core::num |
| return #this.{self::Class::field2}{core::int}.{core::num::+}(t){(core::num) → core::num}; |
| static extension-member method Extension2|get#genericMethod(lowered final self::Class #this) → <T extends core::num>(T) → core::num |
| return <T extends core::num>(T t) → core::num => self::Extension2|genericMethod<T>(#this, t); |
| static extension-member method _extension#2|method1(lowered final core::int #this) → dynamic { |
| self::_extension#2|method2<core::int>(#this, <core::int>[0], <core::int>[1], (wildcard core::int _#wc0#formal) → void => 2, () → void => 3); |
| } |
| static extension-member method _extension#2|get#method1(lowered final core::int #this) → () → dynamic |
| return () → dynamic => self::_extension#2|method1(#this); |
| static extension-member method _extension#2|method2<T extends core::Object? = dynamic>(lowered final core::int #this, core::List<self::_extension#2|method2::T%> a, core::List<core::int> b, (self::_extension#2|method2::T%) → void c, () →? void d) → dynamic {} |
| static extension-member method _extension#2|get#method2(lowered final core::int #this) → <T extends core::Object? = dynamic>(core::List<T%>, core::List<core::int>, (T%) → void, () →? void) → dynamic |
| return <T extends core::Object? = dynamic>(core::List<T%> a, core::List<core::int> b, (T%) → void c, () →? void d) → dynamic => self::_extension#2|method2<T%>(#this, a, b, c, d); |
| static method test(self::Class c) → dynamic { |
| invalid-expression "pkg/front_end/testcases/extensions/explicit_extension_access.dart:44:23: Error: Too many positional arguments: 0 allowed, but 1 found. |
| Try removing the extra positional arguments. |
| Extension1(c).method(0); // Error |
| ^"; |
| } |
| static method main() → dynamic { |
| self::Class c = new self::Class::•(); |
| self::expect(42, self::Extension1|get#field(c)); |
| self::expect(87, self::Extension2|get#field(c)); |
| self::expect(42, self::Extension1|method(c)); |
| self::expect(87, self::Extension2|method(c)); |
| () → core::int tearOff1 = self::Extension1|get#method(c); |
| () → core::int tearOff2 = self::Extension2|get#method(c); |
| self::expect(42, tearOff1(){() → core::int}); |
| self::expect(87, tearOff2(){() → core::int}); |
| self::expect(52, self::Extension1|genericMethod<core::int>(c, 10)); |
| self::expect(97, self::Extension2|genericMethod<core::int>(c, 10)); |
| self::expect(52, self::Extension1|genericMethod<core::num>(c, 10)); |
| self::expect(97, self::Extension2|genericMethod<core::num>(c, 10)); |
| <T extends core::num>(T) → core::num genericTearOff1 = self::Extension1|get#genericMethod(c); |
| <T extends core::num>(T) → core::num genericTearOff2 = self::Extension2|get#genericMethod(c); |
| self::expect(52, genericTearOff1<core::int>(10){(core::int) → core::num}); |
| self::expect(97, genericTearOff2<core::int>(10){(core::int) → core::num}); |
| self::expect(52, genericTearOff1<core::num>(10){(core::num) → core::num}); |
| self::expect(97, genericTearOff2<core::num>(10){(core::num) → core::num}); |
| self::expect(23, let final self::Class #t1 = c in let final core::int #t2 = 23 in let final void #t3 = self::Extension1|set#field(#t1, #t2) in #t2); |
| self::expect(67, let final self::Class #t4 = c in let final core::int #t5 = 67 in let final void #t6 = self::Extension2|set#field(#t4, #t5) in #t5); |
| self::expect(23, self::Extension1|get#field(c)); |
| self::expect(67, self::Extension2|get#field(c)); |
| } |
| static method expect(dynamic expected, dynamic actual) → dynamic { |
| if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) { |
| throw "Mismatch: expected=${expected}, actual=${actual}"; |
| } |
| } |