library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:20:5: Error: Expected ';' after this.
//   A x3 f3();
//     ^^
//
import self as self;
import "dart:core" as core;

class A extends core::Object {
  static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
  constructor •() → self::A
    : super core::Object::•()
    ;
  static factory redirectingFactory() → self::A
    return new self::A::•();
  static factory redirectingFactoryChild() → self::A
    return new self::B::•();
  static factory redirectingTwice() → self::A
    return self::A::redirectingFactory();
}
class B extends self::A {
  synthetic constructor •() → self::B
    : super self::A::•()
    ;
}
static method test() → dynamic {
  () → self::A f1 = #C1;
  () → self::A f2 = #C2;
  () → self::A f3 = #C3;
  self::A x1 = f1(){() → self::A};
  self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
  self::A x3;
  f3(){() → self::A};
}
static method main() → dynamic
  return self::test();

constants  {
  #C1 = redirecting-factory-tearoff self::A::redirectingFactory
  #C2 = redirecting-factory-tearoff self::A::redirectingFactoryChild
  #C3 = redirecting-factory-tearoff self::A::redirectingTwice
}
