| library /*isNonNullableByDefault*/; |
| // |
| // Problems in library: |
| // |
| // pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:31:8: Error: Too many positional arguments: 1 allowed, but 2 found. |
| // Try removing the extra positional arguments. |
| // f1a(42, 87); // error |
| // ^ |
| // |
| // pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:47:8: Error: Too many positional arguments: 0 allowed, but 1 found. |
| // Try removing the extra positional arguments. |
| // f2a(87); // error |
| // ^ |
| // |
| import self as self; |
| import "dart:core" as core; |
| |
| class Class1 extends core::Object { |
| final field core::int field; |
| constructor •([core::int field = #C1]) → self::Class1 |
| : self::Class1::field = field, super core::Object::•() |
| ; |
| static method _#new#tearOff([core::int field = #C1]) → self::Class1 |
| return new self::Class1::•(field); |
| } |
| class Class2 extends core::Object { |
| final field core::int field; |
| constructor •({core::int field = #C1}) → self::Class2 |
| : self::Class2::field = field, super core::Object::•() |
| ; |
| static method _#new#tearOff({core::int field = #C1}) → self::Class2 |
| return new self::Class2::•(field: field); |
| } |
| static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>); |
| static method main() → dynamic { |
| core::print("inSoundMode: ${self::inSoundMode}"); |
| self::testDefaultValues(); |
| } |
| static method testDefaultValues() → void { |
| ([core::int]) → self::Class1 f1a = #C2; |
| self::Class1 c1a = f1a(){([core::int]) → self::Class1}; |
| self::expect(42, c1a.{self::Class1::field}{core::int}); |
| self::Class1 c1b = f1a(87){([core::int]) → self::Class1}; |
| self::expect(87, c1b.{self::Class1::field}{core::int}); |
| () → Null { |
| invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:31:8: Error: Too many positional arguments: 1 allowed, but 2 found. |
| Try removing the extra positional arguments. |
| f1a(42, 87); // error |
| ^" in f1a{<inapplicable>}.(42, 87); |
| }; |
| dynamic f1b = #C2; |
| dynamic c1c = f1b{dynamic}.call(); |
| self::expect(42, c1c{dynamic}.field); |
| dynamic c1d = f1b{dynamic}.call(87); |
| self::expect(87, c1d{dynamic}.field); |
| self::throws(() → dynamic => f1b{dynamic}.call(42, 87)); |
| ({field: core::int}) → self::Class2 f2a = #C3; |
| self::Class2 c2a = f2a(){({field: core::int}) → self::Class2}; |
| self::expect(42, c2a.{self::Class2::field}{core::int}); |
| self::Class2 c2b = f2a(field: 87){({field: core::int}) → self::Class2}; |
| self::expect(87, c2b.{self::Class2::field}{core::int}); |
| () → Null { |
| invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/constructor_tear_off_default_values.dart:47:8: Error: Too many positional arguments: 0 allowed, but 1 found. |
| Try removing the extra positional arguments. |
| f2a(87); // error |
| ^" in f2a{<inapplicable>}.(87); |
| }; |
| dynamic f2b = #C3; |
| dynamic c2c = f2b{dynamic}.call(); |
| self::expect(42, c2c{dynamic}.field); |
| dynamic c2d = f2b{dynamic}.call(field: 87); |
| self::expect(87, c2d{dynamic}.field); |
| self::throws(() → dynamic => f2b{dynamic}.call(87)); |
| } |
| static method expect(dynamic expected, dynamic actual) → dynamic { |
| if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) |
| throw "Expected ${expected}, actual ${actual}"; |
| } |
| static method throws(() → dynamic f, {core::bool inSoundModeOnly = #C4}) → dynamic { |
| try { |
| f(){() → dynamic}; |
| } |
| on core::Object catch(final core::Object e) { |
| core::print("Thrown: ${e}"); |
| return; |
| } |
| if(!self::inSoundMode && inSoundModeOnly) { |
| return; |
| } |
| throw "Expected exception"; |
| } |
| |
| constants { |
| #C1 = 42 |
| #C2 = static-tearoff self::Class1::_#new#tearOff |
| #C3 = static-tearoff self::Class2::_#new#tearOff |
| #C4 = false |
| } |