library test;
import self as self;
import "dart:core" as core;

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