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

class C<E extends core::Object = dynamic> 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 = dynamic>(self::C<self::foo::E> c, (self::foo::E, self::foo::E) → core::int cmp) → void {}
static method main() → dynamic {}
