library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:101:8: Error: Too few positional arguments: 1 required, 0 given.
//     f3a(); // error
//        ^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:102: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/redirecting_factory_tear_off.dart:117:8: Error: Too many positional arguments: 1 allowed, but 2 found.
// Try removing the extra positional arguments.
//     f4a(42, 87); // error
//        ^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:131:8: Error: Too few positional arguments: 1 required, 0 given.
//     f5a(); // error
//        ^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:132:8: Error: Too many positional arguments: 2 allowed, but 3 found.
// Try removing the extra positional arguments.
//     f5a(42, 87, 123); // error
//        ^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too few positional arguments: 1 required, 0 given.
//     f6a(); // error
//        ^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Required named parameter 'field3' must be provided.
//     f6a(42); // error
//        ^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:146:8: Error: Too many positional arguments: 1 allowed, but 2 found.
// Try removing the extra positional arguments.
//     f6a(42, 87); // error
//        ^
//
// pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:147:8: Error: Too few positional arguments: 1 required, 0 given.
//     f6a(field1: 87, field2: 87); // error
//        ^
//
import self as self;
import "dart:core" as core;

class Class1 extends core::Object {
  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
  constructor _() → self::Class1
    : super core::Object::•()
    ;
  static method _#_#tearOff() → self::Class1
    return new self::Class1::_();
  static factory •() → self::Class1
    return new self::Class1::_();
  static method _#new#tearOff() → self::Class1
    return new self::Class1::_();
}
class Class2 extends core::Object {
  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
  constructor __() → self::Class2
    : super core::Object::•()
    ;
  static method _#__#tearOff() → self::Class2
    return new self::Class2::__();
  static factory _() → self::Class2
    return new self::Class2::__();
  static method _#_#tearOff() → self::Class2
    return self::Class2::_();
  static factory named() → self::Class2
    return self::Class2::_();
  static method _#named#tearOff() → self::Class2
    return self::Class2::_();
}
class Class3 extends core::Object {
  final field core::int field;
  static final field dynamic _redirecting# = <dynamic>[#C3]/*isLegacy*/;
  constructor _(core::int field) → self::Class3
    : self::Class3::field = field, super core::Object::•()
    ;
  static method _#_#tearOff(core::int field) → self::Class3
    return new self::Class3::_(field);
  static factory •(core::int field) → self::Class3
    return new self::Class3::_(field);
  static method _#new#tearOff(core::int field) → self::Class3
    return new self::Class3::_(field);
}
class Class4 extends core::Object {
  final field core::int? field;
  static final field dynamic _redirecting# = <dynamic>[#C4]/*isLegacy*/;
  constructor _([core::int? field = #C5]) → self::Class4
    : self::Class4::field = field, super core::Object::•()
    ;
  static method _#_#tearOff([core::int? field = #C5]) → self::Class4
    return new self::Class4::_(field);
  static factory •([core::int? field = #C5]) → self::Class4
    return new self::Class4::_(field);
  static method _#new#tearOff([core::int? field = #C5]) → self::Class4
    return new self::Class4::_(field);
}
class Class5 extends core::Object {
  final field core::int field1;
  final field core::int? field2;
  static final field dynamic _redirecting# = <dynamic>[#C6]/*isLegacy*/;
  constructor _(core::int field1, [core::int? field2 = #C5]) → self::Class5
    : self::Class5::field1 = field1, self::Class5::field2 = field2, super core::Object::•()
    ;
  static method _#_#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
    return new self::Class5::_(field1, field2);
  static factory •(core::int field1, [core::int? field2 = #C5]) → self::Class5
    return new self::Class5::_(field1, field2);
  static method _#new#tearOff(core::int field1, [core::int? field2 = #C5]) → self::Class5
    return new self::Class5::_(field1, field2);
}
class Class6 extends core::Object {
  final field core::int field1;
  final field core::int? field2;
  final field core::int field3;
  static final field dynamic _redirecting# = <dynamic>[#C7]/*isLegacy*/;
  constructor _(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
    : self::Class6::field1 = field1, self::Class6::field2 = field2, self::Class6::field3 = field3, super core::Object::•()
    ;
  static method _#_#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
    return new self::Class6::_(field1, field2: field2, field3: field3);
  static factory •(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
    return new self::Class6::_(field1, field2: field2, field3: field3);
  static method _#new#tearOff(core::int field1, {core::int? field2 = #C5, required core::int field3 = #C5}) → self::Class6
    return new self::Class6::_(field1, field2: field2, field3: field3);
}
class Class7a extends core::Object implements self::Class7b {
  constructor •() → self::Class7a
    : super core::Object::•()
    ;
  static method _#new#tearOff() → self::Class7a
    return new self::Class7a::•();
}
class Class7b extends core::Object {
  static final field dynamic _redirecting# = <dynamic>[#C8]/*isLegacy*/;
  static factory •() → self::Class7b
    return new self::Class7a::•();
  static method _#new#tearOff() → self::Class7b
    return new self::Class7a::•();
}
class Class8a<T extends core::Object? = dynamic> extends core::Object implements self::Class8b<self::Class8a::T%> {
  constructor •() → self::Class8a<self::Class8a::T%>
    : super core::Object::•()
    ;
  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::_#new#tearOff::T%>
    return new self::Class8a::•<self::Class8a::_#new#tearOff::T%>();
  static factory fact<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::fact::T%>
    return new self::Class8a::•<self::Class8a::fact::T%>();
  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class8a<self::Class8a::_#fact#tearOff::T%>
    return self::Class8a::fact<self::Class8a::_#fact#tearOff::T%>();
}
class Class8b<T extends core::Object? = dynamic> extends core::Object {
  static final field dynamic _redirecting# = <dynamic>[#C9, #C10]/*isLegacy*/;
  static factory •<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::•::T%>
    return new self::Class8a::•<self::Class8b::•::T%>();
  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#new#tearOff::T%>
    return new self::Class8a::•<self::Class8b::_#new#tearOff::T%>();
  static factory fact<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::fact::T%>
    return self::Class8a::fact<self::Class8b::fact::T%>();
  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::Class8b<self::Class8b::_#fact#tearOff::T%>
    return self::Class8a::fact<self::Class8b::_#fact#tearOff::T%>();
}
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::testNoArgs();
  self::testArgs();
}
static method testNoArgs() → dynamic {
  () → self::Class1 f1a = #C11;
  self::Class1 c1a = f1a(){() → self::Class1};
  self::expect(true, c1a is{ForNonNullableByDefault} self::Class1);
  dynamic f1b = #C11;
  dynamic c1b = f1b{dynamic}.call();
  self::expect(true, c1b is{ForNonNullableByDefault} self::Class1);
  self::expect(true, core::identical(f1a, f1b));
  () → self::Class2 f2a = #C12;
  self::Class2 c2a = f2a(){() → self::Class2};
  self::expect(true, c2a is{ForNonNullableByDefault} self::Class2);
  dynamic f2b = #C12;
  dynamic c2b = f2b{dynamic}.call();
  self::expect(true, c2b is{ForNonNullableByDefault} self::Class2);
  self::expect(true, core::identical(f2a, f2b));
}
static method testArgs() → dynamic {
  (core::int) → self::Class3 f3a = #C13;
  self::Class3 c3a = f3a(42){(core::int) → self::Class3};
  self::expect(42, c3a.{self::Class3::field}{core::int});
  () → Null {
    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:101:8: Error: Too few positional arguments: 1 required, 0 given.
    f3a(); // error
       ^" in f3a{<inapplicable>}.();
    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:102: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 = #C13;
  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));
  ([core::int?]) → self::Class4 f4a = #C14;
  self::Class4 c4a = f4a(){([core::int?]) → self::Class4};
  self::expect(null, c4a.{self::Class4::field}{core::int?});
  self::Class4 c4b = f4a(42){([core::int?]) → self::Class4};
  self::expect(42, c4b.{self::Class4::field}{core::int?});
  () → Null {
    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:117:8: Error: Too many positional arguments: 1 allowed, but 2 found.
Try removing the extra positional arguments.
    f4a(42, 87); // error
       ^" in f4a{<inapplicable>}.(42, 87);
  };
  dynamic f4b = #C14;
  self::throws(() → dynamic => f4b{dynamic}.call(42, 87));
  (core::int, [core::int?]) → self::Class5 f5a = #C15;
  self::Class5 c5a = f5a(42){(core::int, [core::int?]) → self::Class5};
  self::expect(42, c5a.{self::Class5::field1}{core::int});
  self::expect(null, c5a.{self::Class5::field2}{core::int?});
  self::Class5 c5b = f5a(87, 42){(core::int, [core::int?]) → self::Class5};
  self::expect(87, c5b.{self::Class5::field1}{core::int});
  self::expect(42, c5b.{self::Class5::field2}{core::int?});
  () → Null {
    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:131:8: Error: Too few positional arguments: 1 required, 0 given.
    f5a(); // error
       ^" in f5a{<inapplicable>}.();
    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:132:8: Error: Too many positional arguments: 2 allowed, but 3 found.
Try removing the extra positional arguments.
    f5a(42, 87, 123); // error
       ^" in f5a{<inapplicable>}.(42, 87, 123);
  };
  dynamic f5b = #C15;
  self::throws(() → dynamic => f5b{dynamic}.call());
  self::throws(() → dynamic => f5b{dynamic}.call(42, 87, 123));
  (core::int, {field2: core::int?, required field3: core::int}) → self::Class6 f6a = #C16;
  self::Class6 c6a = f6a(42, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
  self::expect(42, c6a.{self::Class6::field1}{core::int});
  self::expect(null, c6a.{self::Class6::field2}{core::int?});
  self::expect(87, c6a.{self::Class6::field3}{core::int});
  () → Null {
    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:144:8: Error: Too few positional arguments: 1 required, 0 given.
    f6a(); // error
       ^" in f6a{<inapplicable>}.();
    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:145:8: Error: Required named parameter 'field3' must be provided.
    f6a(42); // error
       ^" in f6a{<inapplicable>}.(42);
    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:146:8: Error: Too many positional arguments: 1 allowed, but 2 found.
Try removing the extra positional arguments.
    f6a(42, 87); // error
       ^" in f6a{<inapplicable>}.(42, 87);
    invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/redirecting_factory_tear_off.dart:147:8: Error: Too few positional arguments: 1 required, 0 given.
    f6a(field1: 87, field2: 87); // error
       ^" in f6a{<inapplicable>}.(field1: 87, field2: 87);
  };
  self::Class6 c6b = f6a(42, field2: 123, field3: 87){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
  self::expect(42, c6b.{self::Class6::field1}{core::int});
  self::expect(123, c6b.{self::Class6::field2}{core::int?});
  self::expect(87, c6b.{self::Class6::field3}{core::int});
  self::Class6 c6c = f6a(87, field3: 42, field2: 123){(core::int, {field2: core::int?, required field3: core::int}) → self::Class6};
  self::expect(87, c6c.{self::Class6::field1}{core::int});
  self::expect(123, c6c.{self::Class6::field2}{core::int?});
  self::expect(42, c6c.{self::Class6::field3}{core::int});
  dynamic f6b = #C16;
  self::throws(() → dynamic => f6b{dynamic}.call());
  self::throws(() → dynamic => f6b{dynamic}.call(42), inSoundModeOnly: true);
  self::throws(() → dynamic => f6b{dynamic}.call(42, 87), inSoundModeOnly: true);
  self::throws(() → dynamic => f6b{dynamic}.call(field1: 87, field2: 87));
  () → self::Class7b f7a = #C17;
  self::Class7b c7a = f7a(){() → self::Class7b};
  self::expect(true, c7a is{ForNonNullableByDefault} self::Class7a);
  self::expect(true, c7a is{ForNonNullableByDefault} self::Class7b);
  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8a = #C18;
  self::Class8b<dynamic> c8a = f8a<dynamic>(){() → self::Class8b<dynamic>};
  self::expect(true, c8a is{ForNonNullableByDefault} self::Class8a<dynamic>);
  self::expect(true, c8a is{ForNonNullableByDefault} self::Class8b<dynamic>);
  self::Class8b<core::int> c8b = f8a<core::int>(){() → self::Class8b<core::int>};
  self::expect(true, c8b is{ForNonNullableByDefault} self::Class8a<core::int>);
  self::expect(true, c8b is{ForNonNullableByDefault} self::Class8b<core::int>);
  self::expect(false, c8b is{ForNonNullableByDefault} self::Class8b<core::String>);
  <T extends core::Object? = dynamic>() → self::Class8b<T%> f8b = #C19;
  self::Class8b<dynamic> c8c = f8b<dynamic>(){() → self::Class8b<dynamic>};
  self::expect(true, c8c is{ForNonNullableByDefault} self::Class8a<dynamic>);
  self::expect(true, c8c is{ForNonNullableByDefault} self::Class8b<dynamic>);
  self::Class8b<core::int> c8d = f8b<core::int>(){() → self::Class8b<core::int>};
  self::expect(true, c8d is{ForNonNullableByDefault} self::Class8a<core::int>);
  self::expect(true, c8d is{ForNonNullableByDefault} self::Class8b<core::int>);
  self::expect(false, c8d is{ForNonNullableByDefault} self::Class8b<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 = #C20}) → 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::named
  #C3 = constructor-tearoff self::Class3::•
  #C4 = constructor-tearoff self::Class4::•
  #C5 = null
  #C6 = constructor-tearoff self::Class5::•
  #C7 = constructor-tearoff self::Class6::•
  #C8 = constructor-tearoff self::Class7b::•
  #C9 = constructor-tearoff self::Class8b::•
  #C10 = constructor-tearoff self::Class8b::fact
  #C11 = static-tearoff self::Class1::_#new#tearOff
  #C12 = static-tearoff self::Class2::_#named#tearOff
  #C13 = static-tearoff self::Class3::_#new#tearOff
  #C14 = static-tearoff self::Class4::_#new#tearOff
  #C15 = static-tearoff self::Class5::_#new#tearOff
  #C16 = static-tearoff self::Class6::_#new#tearOff
  #C17 = static-tearoff self::Class7b::_#new#tearOff
  #C18 = static-tearoff self::Class8b::_#new#tearOff
  #C19 = static-tearoff self::Class8b::_#fact#tearOff
  #C20 = false
}
