| library /*isNonNullableByDefault*/; |
| // |
| // Problems in library: |
| // |
| // pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:44:8: Error: Too few positional arguments: 1 required, 0 given. |
| // f3a(); // error |
| // ^ |
| // |
| // pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:45:8: Error: Too many positional arguments: 1 allowed, but 2 found. |
| // Try removing the extra positional arguments. |
| // f3a(42, 87); // error |
| // ^ |
| // |
| // pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:62:8: Error: Expected 1 type arguments. |
| // f4a<int, String>(); // error |
| // ^ |
| // |
| // pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:70:8: Error: Expected 0 type arguments. |
| // f4b<int>(); // error |
| // ^ |
| // |
| // pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:87:8: Error: Expected 1 type arguments. |
| // f4d<int, String>(); // error |
| // ^ |
| // |
| // pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:95:8: Error: Expected 0 type arguments. |
| // f4e<int>(); // error |
| // ^ |
| // |
| // pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:112:8: Error: Type argument 'String' doesn't conform to the bound 'num' of the type variable 'T' on 'call'. |
| // Try changing type arguments so that they conform to the bounds. |
| // f5a<String>(); // error |
| // ^ |
| // |
| // pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:113:8: Error: Expected 1 type arguments. |
| // f5a<int, String>(); // error |
| // ^ |
| // |
| import self as self; |
| import "main_lib.dart" as mai; |
| import "dart:core" as core; |
| |
| import "org-dartlang-testcase:///main_lib.dart"; |
| |
| static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>); |
| static method main() → dynamic { |
| () → mai::Class1 f1a = #C1; |
| mai::Class1 c1a = f1a(){() → mai::Class1}; |
| self::expect(true, c1a is{ForNonNullableByDefault} mai::Class1); |
| dynamic f1b = #C1; |
| dynamic c1b = f1b{dynamic}.call(); |
| self::expect(true, c1b is{ForNonNullableByDefault} mai::Class1); |
| self::expect(true, core::identical(f1a, f1b)); |
| () → mai::Class2 f2a = #C2; |
| mai::Class2 c2a = f2a(){() → mai::Class2}; |
| self::expect(true, c2a is{ForNonNullableByDefault} mai::Class2); |
| dynamic f2b = #C2; |
| dynamic c2b = f2b{dynamic}.call(); |
| self::expect(true, c2b is{ForNonNullableByDefault} mai::Class2); |
| self::expect(true, core::identical(f2a, f2b)); |
| () → mai::Class2 f2c = #C3; |
| mai::Class2 c2c = f2c(){() → mai::Class2}; |
| self::expect(true, c2c is{ForNonNullableByDefault} mai::Class2); |
| dynamic f2d = #C3; |
| dynamic c2d = f2d{dynamic}.call(); |
| self::expect(true, c2d is{ForNonNullableByDefault} mai::Class2); |
| self::expect(true, core::identical(f2c, f2d)); |
| (core::int) → mai::Class3 f3a = #C4; |
| mai::Class3 c3a = f3a(42){(core::int) → mai::Class3}; |
| self::expect(42, c3a.{mai::Class3::field}{core::int}); |
| () → Null { |
| invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:44:8: Error: Too few positional arguments: 1 required, 0 given. |
| f3a(); // error |
| ^" in f3a{<inapplicable>}.(); |
| invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:45:8: Error: Too many positional arguments: 1 allowed, but 2 found. |
| Try removing the extra positional arguments. |
| f3a(42, 87); // error |
| ^" in f3a{<inapplicable>}.(42, 87); |
| }; |
| dynamic f3b = #C4; |
| dynamic c3b = f3b{dynamic}.call(87); |
| self::expect(87, c3b{dynamic}.field); |
| self::throws(() → dynamic => f3b{dynamic}.call()); |
| self::throws(() → dynamic => f3b{dynamic}.call(42, 87)); |
| <T extends core::Object? = dynamic>() → mai::Class4<T%> f4a = #C5; |
| mai::Class4<dynamic> c4a = f4a<dynamic>(){() → mai::Class4<dynamic>}; |
| self::expect(true, c4a is{ForNonNullableByDefault} mai::Class4<dynamic>); |
| self::expect(false, c4a is{ForNonNullableByDefault} mai::Class4<core::int>); |
| mai::Class4<core::int> c4b = f4a<core::int>(){() → mai::Class4<core::int>}; |
| self::expect(true, c4b is{ForNonNullableByDefault} mai::Class4<core::int>); |
| self::expect(false, c4b is{ForNonNullableByDefault} mai::Class4<core::String>); |
| () → Null { |
| invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:62:8: Error: Expected 1 type arguments. |
| f4a<int, String>(); // error |
| ^" in f4a{<inapplicable>}.<core::int, core::String>(); |
| }; |
| () → mai::Class4<core::int> f4b = f4a<core::int>; |
| mai::Class4<core::int> c4c = f4b(){() → mai::Class4<core::int>}; |
| self::expect(true, c4c is{ForNonNullableByDefault} mai::Class4<core::int>); |
| self::expect(false, c4c is{ForNonNullableByDefault} mai::Class4<core::String>); |
| () → Null { |
| invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:70:8: Error: Expected 0 type arguments. |
| f4b<int>(); // error |
| ^" in f4b{<inapplicable>}.<core::int>(); |
| }; |
| dynamic f4c = #C5; |
| dynamic c4d = f4c{dynamic}.call(); |
| self::expect(true, c4d is{ForNonNullableByDefault} mai::Class4<dynamic>); |
| self::expect(false, c4d is{ForNonNullableByDefault} mai::Class4<core::int>); |
| self::throws(() → dynamic => f4c{dynamic}.call<core::int, core::String>()); |
| <T extends core::Object? = dynamic>() → mai::Class4<T%> f4d = #C6; |
| mai::Class4<dynamic> c4e = f4d<dynamic>(){() → mai::Class4<dynamic>}; |
| self::expect(true, c4e is{ForNonNullableByDefault} mai::Class4<dynamic>); |
| self::expect(false, c4e is{ForNonNullableByDefault} mai::Class4<core::int>); |
| mai::Class4<core::int> c4f = f4d<core::int>(){() → mai::Class4<core::int>}; |
| self::expect(true, c4f is{ForNonNullableByDefault} mai::Class4<core::int>); |
| self::expect(false, c4f is{ForNonNullableByDefault} mai::Class4<core::String>); |
| () → Null { |
| invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:87:8: Error: Expected 1 type arguments. |
| f4d<int, String>(); // error |
| ^" in f4d{<inapplicable>}.<core::int, core::String>(); |
| }; |
| () → mai::Class4<core::int> f4e = f4d<core::int>; |
| mai::Class4<core::int> c4g = f4e(){() → mai::Class4<core::int>}; |
| self::expect(true, c4g is{ForNonNullableByDefault} mai::Class4<core::int>); |
| self::expect(false, c4g is{ForNonNullableByDefault} mai::Class4<core::String>); |
| () → Null { |
| invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:95:8: Error: Expected 0 type arguments. |
| f4e<int>(); // error |
| ^" in f4e{<inapplicable>}.<core::int>(); |
| }; |
| dynamic f4f = #C6; |
| dynamic c4h = f4f{dynamic}.call(); |
| self::expect(true, c4h is{ForNonNullableByDefault} mai::Class4<dynamic>); |
| self::expect(false, c4h is{ForNonNullableByDefault} mai::Class4<core::int>); |
| self::throws(() → dynamic => f4f{dynamic}.call<core::int, core::String>()); |
| <T extends core::num>() → mai::Class5<T> f5a = #C7; |
| mai::Class5<core::num> c5a = f5a<core::num>(){() → mai::Class5<core::num>}; |
| self::expect(true, c5a is{ForNonNullableByDefault} mai::Class5<core::num>); |
| self::expect(false, c5a is{ForNonNullableByDefault} mai::Class5<core::int>); |
| mai::Class5<core::int> c5b = f5a<core::int>(){() → mai::Class5<core::int>}; |
| self::expect(true, c5b is{ForNonNullableByDefault} mai::Class5<core::int>); |
| self::expect(false, c5b is{ForNonNullableByDefault} mai::Class5<core::double>); |
| () → Null { |
| f5a<core::String>(){() → mai::Class5<core::String>}; |
| invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/from_dill/main.dart:113:8: Error: Expected 1 type arguments. |
| f5a<int, String>(); // error |
| ^" in f5a{<inapplicable>}.<core::int, core::String>(); |
| }; |
| dynamic f5b = #C7; |
| dynamic c5c = f5b{dynamic}.call(); |
| self::expect(true, c5c is{ForNonNullableByDefault} mai::Class5<core::num>); |
| self::expect(false, c5c is{ForNonNullableByDefault} mai::Class5<core::int>); |
| dynamic c5d = f5b{dynamic}.call<core::int>(); |
| self::expect(true, c5d is{ForNonNullableByDefault} mai::Class5<core::int>); |
| self::expect(false, c5d is{ForNonNullableByDefault} mai::Class5<core::double>); |
| self::throws(() → dynamic => f5b{dynamic}.call<core::String>()); |
| self::throws(() → dynamic => f5b{dynamic}.call<core::int, core::String>()); |
| } |
| 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 = #C8}) → 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"; |
| } |
| |
| library /*isNonNullableByDefault*/; |
| import self as mai; |
| import "dart:core" as core; |
| |
| class Class1 extends core::Object { |
| synthetic constructor •() → mai::Class1 |
| : super core::Object::•() |
| ; |
| static method _#new#tearOff() → mai::Class1 |
| return new mai::Class1::•(); |
| } |
| class Class2 extends core::Object { |
| static final field dynamic _redirecting# = <dynamic>[#C9]/*isLegacy*/; |
| constructor named() → mai::Class2 |
| : super core::Object::•() |
| ; |
| static method _#named#tearOff() → mai::Class2 |
| return new mai::Class2::named(); |
| static factory redirect() → mai::Class2 |
| return new mai::Class2::named(); |
| static method _#redirect#tearOff() → mai::Class2 |
| return new mai::Class2::named(); |
| } |
| class Class3 extends core::Object { |
| final field core::int field; |
| constructor •(core::int field) → mai::Class3 |
| : mai::Class3::field = field, super core::Object::•() |
| ; |
| static method _#new#tearOff(core::int field) → mai::Class3 |
| return new mai::Class3::•(field); |
| } |
| class Class4<T extends core::Object? = dynamic> extends core::Object { |
| static final field dynamic _redirecting# = <dynamic>[#C10]/*isLegacy*/; |
| constructor _() → mai::Class4<mai::Class4::T%> |
| : super core::Object::•() |
| ; |
| static method _#_#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#_#tearOff::T%> |
| return new mai::Class4::_<mai::Class4::_#_#tearOff::T%>(); |
| static factory •<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::•::T%> |
| return new mai::Class4::_<mai::Class4::•::T%>(); |
| static method _#new#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#new#tearOff::T%> |
| return mai::Class4::•<mai::Class4::_#new#tearOff::T%>(); |
| static factory redirect<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::redirect::T%> |
| return new mai::Class4::_<mai::Class4::redirect::T%>(); |
| static method _#redirect#tearOff<T extends core::Object? = dynamic>() → mai::Class4<mai::Class4::_#redirect#tearOff::T%> |
| return new mai::Class4::_<mai::Class4::_#redirect#tearOff::T%>(); |
| } |
| class Class5<T extends core::num> extends core::Object { |
| constructor _() → mai::Class5<mai::Class5::T> |
| : super core::Object::•() |
| ; |
| static method _#_#tearOff<T extends core::num>() → mai::Class5<mai::Class5::_#_#tearOff::T> |
| return new mai::Class5::_<mai::Class5::_#_#tearOff::T>(); |
| static factory •<T extends core::num>() → mai::Class5<mai::Class5::•::T> |
| return new mai::Class5::_<mai::Class5::•::T>(); |
| static method _#new#tearOff<T extends core::num>() → mai::Class5<mai::Class5::_#new#tearOff::T> |
| return mai::Class5::•<mai::Class5::_#new#tearOff::T>(); |
| } |
| |
| constants { |
| #C1 = static-tearoff mai::Class1::_#new#tearOff |
| #C2 = static-tearoff mai::Class2::_#named#tearOff |
| #C3 = static-tearoff mai::Class2::_#redirect#tearOff |
| #C4 = static-tearoff mai::Class3::_#new#tearOff |
| #C5 = static-tearoff mai::Class4::_#new#tearOff |
| #C6 = static-tearoff mai::Class4::_#redirect#tearOff |
| #C7 = static-tearoff mai::Class5::_#new#tearOff |
| #C8 = false |
| #C9 = constructor-tearoff mai::Class2::redirect |
| #C10 = constructor-tearoff mai::Class4::redirect |
| } |