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

class C<E extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::E%>
    : super core::Object::•()
    ;
  method barA([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
    self::foo<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t1 = cmp in #t1 == null ?{(self::C::E%, self::C::E%) → core::int} #C2 : #t1{(self::C::E%, self::C::E%) → core::int});
  }
  method barB([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
    self::foo<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t2 = cmp in #t2 == null ?{(self::C::E%, self::C::E%) → core::int} #C2 as{ForNonNullableByDefault} (self::C::E%, self::C::E%) → core::int : #t2{(self::C::E%, self::C::E%) → core::int});
  }
  method barC([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
    (self::C::E%, self::C::E%) → core::int v = #C2;
    self::foo<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t3 = cmp in #t3 == null ?{(self::C::E%, self::C::E%) → core::int} v : #t3{(self::C::E%, self::C::E%) → core::int});
  }
  method barD([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
    self::foo<self::C::E%>(this, let final (self::C::E%, self::C::E%) →? core::int #t4 = cmp in #t4 == null ?{(self::C::E%, self::C::E%) → core::int} #C2 : #t4{(self::C::E%, self::C::E%) → core::int});
  }
  method barE([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
    self::foo<self::C::E%>(this, cmp == null ?{(self::C::E%, self::C::E%) → core::int} #C2 : cmp{(self::C::E%, self::C::E%) → core::int});
  }
  method barF([(self::C::E%, self::C::E%) →? core::int cmp = #C1]) → void {
    self::foo<self::C::E%>(this, !(cmp == null) ?{(self::C::E%, self::C::E%) → core::int} cmp{(self::C::E%, self::C::E%) → core::int} : #C2);
  }
  static method _default(dynamic a, dynamic b) → core::int {
    return 1.{core::int::unary-}(){() → core::int};
  }
}
static method foo<E extends core::Object? = dynamic>(self::C<self::foo::E%> c, (self::foo::E%, self::foo::E%) → core::int cmp) → void {}
static method main() → dynamic {}

constants  {
  #C1 = null
  #C2 = static-tearoff self::C::_default
}
