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

typedef B<T extends core::Object? = dynamic> = self::A<T%>;
typedef C<unrelated T extends core::Object? = dynamic> = self::A<core::int>;
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%>
    ;
  static factory fact<T extends core::Object? = dynamic>() → self::A<self::A::fact::T%>
    ;
  static factory redirect<T extends core::Object? = dynamic>() → self::A<self::A::redirect::T%>
    return new self::A::•<self::A::redirect::T%>();
}
static const field <T extends core::Object? = dynamic>() → self::A<T%> a = self::A::•;
static const field () → self::A<core::int> b = self::A::•<core::int>;
static const field <T extends core::Object? = dynamic>() → self::A<T%> c = self::A::fact;
static const field () → self::A<core::int> d = self::A::fact<core::int>;
static const field <T extends core::Object? = dynamic>() → self::A<T%> e = self::A::redirect;
static const field () → self::A<core::int> f = self::A::redirect<core::int>;
static const field <T extends core::Object? = dynamic>() → self::A<T%> g = self::A::•;
static const field () → self::A<core::int> h = self::A::•<core::int>;
static const field <T extends core::Object? = dynamic>() → self::A<T%> i = self::A::fact;
static const field () → self::A<core::int> j = self::A::fact<core::int>;
static const field <T extends core::Object? = dynamic>() → self::A<T%> k = self::A::redirect;
static const field () → self::A<core::int> l = self::A::redirect<core::int>;
static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> m = self::_#C#new#tearOff;
static const field () → self::A<core::int> n = self::A::•<core::int>;
static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> o = self::_#C#fact#tearOff;
static const field () → self::A<core::int> p = self::A::fact<core::int>;
static const field <unrelated T extends core::Object? = dynamic>() → self::A<core::int> q = self::_#C#redirect#tearOff;
static const field () → self::A<core::int> r = self::A::redirect<core::int>;
static method main() → dynamic
  ;
static method _#C#new#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
  return new self::A::•<core::int>();
static method _#C#fact#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
  return self::A::fact<core::int>();
static method _#C#redirect#tearOff<unrelated T extends core::Object? = dynamic>() → self::A<core::int>
  return self::A::redirect<core::int>();


Extra constant evaluation status:
Evaluated: ConstructorTearOff @ org-dartlang-testcase:///const_tear_off.dart:14:11 -> ConstructorTearOffConstant(A.)
Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:15:11 -> InstantiationConstant(A.<int*>)
Evaluated: StaticTearOff @ org-dartlang-testcase:///const_tear_off.dart:16:11 -> StaticTearOffConstant(A.fact)
Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:17:11 -> InstantiationConstant(A.fact<int*>)
Evaluated: RedirectingFactoryTearOff @ org-dartlang-testcase:///const_tear_off.dart:18:11 -> RedirectingFactoryTearOffConstant(A.redirect)
Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:19:11 -> InstantiationConstant(A.redirect<int*>)
Evaluated: ConstructorTearOff @ org-dartlang-testcase:///const_tear_off.dart:20:11 -> ConstructorTearOffConstant(A.)
Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:21:11 -> InstantiationConstant(A.<int*>)
Evaluated: StaticTearOff @ org-dartlang-testcase:///const_tear_off.dart:22:11 -> StaticTearOffConstant(A.fact)
Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:23:11 -> InstantiationConstant(A.fact<int*>)
Evaluated: RedirectingFactoryTearOff @ org-dartlang-testcase:///const_tear_off.dart:24:11 -> RedirectingFactoryTearOffConstant(A.redirect)
Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:25:11 -> InstantiationConstant(A.redirect<int*>)
Evaluated: StaticTearOff @ org-dartlang-testcase:///const_tear_off.dart:26:11 -> StaticTearOffConstant(_#C#new#tearOff)
Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:27:11 -> InstantiationConstant(A.<int*>)
Evaluated: StaticTearOff @ org-dartlang-testcase:///const_tear_off.dart:28:11 -> StaticTearOffConstant(_#C#fact#tearOff)
Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:29:11 -> InstantiationConstant(A.fact<int*>)
Evaluated: StaticTearOff @ org-dartlang-testcase:///const_tear_off.dart:30:11 -> StaticTearOffConstant(_#C#redirect#tearOff)
Evaluated: Instantiation @ org-dartlang-testcase:///const_tear_off.dart:31:11 -> InstantiationConstant(A.redirect<int*>)
Extra constant evaluation: evaluated: 24, effectively constant: 18
