library test;
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 (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
}
