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

static field (core::int) → core::int implicitInstantiation = #C2;
static const field (core::int) → core::int implicitConstInstantiation = #C2;
static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
  return t;
static method create<T extends core::Object? = dynamic>() → (self::create::T%) → self::create::T%
  return #C1<self::create::T%>;
static method main() → dynamic {
  self::expect(true, core::identical(self::implicitInstantiation, self::implicitInstantiation));
  self::expect(true, core::identical(self::implicitInstantiation, #C2));
  self::expect(false, core::identical(self::implicitInstantiation, self::create<core::int>()));
  self::expect(true, core::identical(#C2, self::implicitInstantiation));
  self::expect(true, core::identical(#C2, #C2));
  self::expect(false, core::identical(#C2, self::create<core::int>()));
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
    throw "Expected ${expected}, actual ${actual}";
}

constants  {
  #C1 = tearoff self::id
  #C2 = partial-instantiation self::id <core::int*>
}

Extra constant evaluation status:
Evaluated: StaticInvocation @ org-dartlang-testcase:///identical_instantiated_function_tearoffs.dart:19:13 -> BoolConstant(true)
Extra constant evaluation: evaluated: 29, effectively constant: 1
