library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

typedef B<T extends core::num> = self::A<T>;
class A<T extends core::Object? = dynamic> extends core::Object {
  static final field dynamic _redirecting# = <dynamic>[self::A::redirect]/*isLegacy*/;
  constructor •() → self::A<self::A::T%>
    ;
  constructor named() → self::A<self::A::T%>
    ;
  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::T%>
    return new self::A::•<self::A::_#new#tearOff::T%>();
  static method _#named#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#named#tearOff::T%>
    return new self::A::named<self::A::_#named#tearOff::T%>();
  static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
    ;
  static method _#fact#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#fact#tearOff::T%>
    return self::A::fact<self::A::_#fact#tearOff::T%>();
  static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
    return new self::A::•<self::A::redirect::T%>();
  static method _#redirect#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#redirect#tearOff::T%>
    return new self::A::•<self::A::_#redirect#tearOff::T%>();
}
static method test() → dynamic
  ;
static method main() → dynamic
  ;
static method _#B#new#tearOff<T extends core::num>() → self::A<self::_#B#new#tearOff::T>
  return new self::A::•<self::_#B#new#tearOff::T>();
static method _#B#named#tearOff<T extends core::num>() → self::A<self::_#B#named#tearOff::T>
  return new self::A::named<self::_#B#named#tearOff::T>();
static method _#B#fact#tearOff<T extends core::num>() → self::A<self::_#B#fact#tearOff::T>
  return self::A::fact<self::_#B#fact#tearOff::T>();
static method _#B#redirect#tearOff<T extends core::num>() → self::A<self::_#B#redirect#tearOff::T>
  return self::A::_#redirect#tearOff<self::_#B#redirect#tearOff::T>();


Extra constant evaluation status:
Evaluated: ConstructorTearOff @ org-dartlang-testcase:///misplaced_type_arguments.dart:5:7 -> ConstructorTearOffConstant(A.redirect)
Extra constant evaluation: evaluated: 11, effectively constant: 1
