| library /*isNonNullableByDefault*/; |
| // |
| // Problems in library: |
| // |
| // pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. |
| // f1a(''); // error |
| // ^ |
| // |
| // pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. |
| // f2a(''); // error |
| // ^ |
| // |
| import self as self; |
| import "dart:core" as core; |
| |
| class Class1 extends core::Object { |
| field core::int field; |
| constructor •(core::int field) → self::Class1 |
| : self::Class1::field = field, super core::Object::•() |
| ; |
| } |
| abstract class Interface2 extends core::Object { |
| synthetic constructor •() → self::Interface2 |
| : super core::Object::•() |
| ; |
| abstract get field() → core::int; |
| } |
| class Class2 extends core::Object implements self::Interface2 { |
| final field core::int field; |
| constructor •(core::int field) → self::Class2 |
| : self::Class2::field = field, super core::Object::•() |
| ; |
| } |
| static final field core::bool inSoundMode = !(core::_GrowableList::•<core::int?>(0) is{ForNonNullableByDefault} core::List<core::int>); |
| static field (core::int) → self::Class1 Class1_new = #C1; |
| static field (core::int) → self::Class2 Class2_new = #C2; |
| static method main() → dynamic { |
| core::print("inSoundMode: ${self::inSoundMode}"); |
| self::testInferred(); |
| } |
| static method testInferred() → dynamic { |
| (core::int) → self::Class1 f1a = #C1; |
| self::expect(true, f1a is{ForNonNullableByDefault} (core::int) → self::Class1); |
| self::expect(false, f1a is{ForNonNullableByDefault} (core::String) → self::Class1); |
| self::Class1 c1a = f1a(0){(core::int) → self::Class1}; |
| self::expect(true, c1a is{ForNonNullableByDefault} self::Class1); |
| () → Null { |
| f1a(let final Never #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:38:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. |
| f1a(''); // error |
| ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class1}; |
| }; |
| dynamic f1b = #C1; |
| dynamic c1b = f1b{dynamic}.call(0); |
| self::expect(true, c1b is{ForNonNullableByDefault} self::Class1); |
| self::throws(() → dynamic => f1b{dynamic}.call("")); |
| (core::int) → self::Class2 f2a = #C2; |
| self::expect(true, f2a is{ForNonNullableByDefault} (core::int) → self::Class2); |
| self::expect(false, f2a is{ForNonNullableByDefault} (core::String) → self::Class2); |
| self::Class2 c2a = f2a(0){(core::int) → self::Class2}; |
| self::expect(true, c2a is{ForNonNullableByDefault} self::Class2); |
| () → Null { |
| f2a(let final Never #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/inferred_constructor_tear_off.dart:52:9: Error: The argument type 'String' can't be assigned to the parameter type 'int'. |
| f2a(''); // error |
| ^" in "" as{TypeError,ForNonNullableByDefault} core::int){(core::int) → self::Class2}; |
| }; |
| dynamic f2b = #C2; |
| dynamic c2b = f2b{dynamic}.call(0); |
| self::expect(true, c2b is{ForNonNullableByDefault} self::Class2); |
| self::throws(() → dynamic => f2b{dynamic}.call("")); |
| } |
| 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 = #C3}) → 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 = constructor-tearoff self::Class1::• |
| #C2 = constructor-tearoff self::Class2::• |
| #C3 = false |
| } |