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

abstract class C<E extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::E*>*
    : super core::Object::•()
    ;
  method sort([(self::C::E*, self::C::E*) →* core::int* compare = #C1]) → void {
    self::C::sort2<self::C::E*>(this, let final (self::C::E*, self::C::E*) →* core::int* #t1 = compare in #t1.==(null) ?{(self::C::E*, self::C::E*) →* core::int*} #C2 : #t1);
  }
  static method _compareAny(dynamic a, dynamic b) → core::int* {
    throw "unimplemented";
  }
  static method sort2<E extends core::Object* = dynamic>(self::C<self::C::sort2::E*>* a, (self::C::sort2::E*, self::C::sort2::E*) →* core::int* compare) → void {
    throw "unimplemented";
  }
}
static method main() → dynamic {}

constants  {
  #C1 = null
  #C2 = tearoff self::C::_compareAny
}
