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

import "dart:async";

typedef Exactly<invariant T extends core::Object? = dynamic> = (T%) → T%;
extension _extension#0<T extends core::Object? = dynamic> on T% {
  method checkStaticType = self::_extension#0|checkStaticType;
  tearoff checkStaticType = self::_extension#0|get#checkStaticType;
}
static method id<T extends core::Object? = dynamic>(self::id::T% value) → self::id::T%
  return value;
static method main() → dynamic async {
  FutureOr<core::int>x = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int};
  FutureOr<core::int>y = let final core::int #t1 = 1.{core::num::+}(self::id<core::int>(1)){(core::num) → core::int} in block {
    self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t1);
  } =>#t1;
  FutureOr<core::int>z = let final core::int #t2 = 1.{core::num::+}(self::contextType<core::int>(1)){(core::num) → core::int} in block {
    self::_extension#0|checkStaticType<core::int, (core::int) → core::int>(#t2);
  } =>#t2;
}
static method _extension#0|checkStaticType<T extends core::Object? = dynamic, R extends (self::_extension#0|checkStaticType::T%) → self::_extension#0|checkStaticType::T% = (dynamic) → dynamic>(lowered final self::_extension#0|checkStaticType::T% #this) → void {}
static method _extension#0|get#checkStaticType<T extends core::Object? = dynamic>(lowered final self::_extension#0|get#checkStaticType::T% #this) → <R extends (self::_extension#0|get#checkStaticType::T%) → self::_extension#0|get#checkStaticType::T% = (dynamic) → dynamic>() → void
  return <R extends (self::_extension#0|get#checkStaticType::T%) → self::_extension#0|get#checkStaticType::T% = (dynamic) → dynamic>() → void => self::_extension#0|checkStaticType<self::_extension#0|get#checkStaticType::T%, R>(#this);
static method contextType<T extends core::Object? = dynamic>(core::Object? o) → self::contextType::T%
  return o as{ForNonNullableByDefault} self::contextType::T%;
