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

class Class extends core::Object {
  synthetic constructor •() → self::Class*
    : super core::Object::•()
    ;
}
extension Extension on self::Class* {
  method method0 = self::Extension|method0;
  tearoff method0 = self::Extension|get#method0;
  method method1 = self::Extension|method1;
  tearoff method1 = self::Extension|get#method1;
  method method2 = self::Extension|method2;
  tearoff method2 = self::Extension|get#method2;
  method method3 = self::Extension|method3;
  tearoff method3 = self::Extension|get#method3;
  static method staticMethod = self::Extension|staticMethod;
}
static method Extension|method0(final self::Class* #this, [dynamic a = #C1]) → dynamic
  return a;
static method Extension|get#method0(final self::Class* #this) → ([dynamic]) →* dynamic
  return ([dynamic a = #C1]) → dynamic => self::Extension|method0(#this, a);
static method Extension|method1(final self::Class* #this, [dynamic a = #C2]) → dynamic
  return a;
static method Extension|get#method1(final self::Class* #this) → ([dynamic]) →* dynamic
  return ([dynamic a = #C2]) → dynamic => self::Extension|method1(#this, a);
static method Extension|method2(final self::Class* #this, {dynamic b = #C3}) → dynamic
  return b;
static method Extension|get#method2(final self::Class* #this) → ({b: dynamic}) →* dynamic
  return ({dynamic b = #C3}) → dynamic => self::Extension|method2(#this, b: b);
static method Extension|method3(final self::Class* #this, {dynamic c = #C4}) → dynamic
  return c.call();
static method Extension|get#method3(final self::Class* #this) → ({c: dynamic}) →* dynamic
  return ({dynamic c = #C4}) → dynamic => self::Extension|method3(#this, c: c);
static method Extension|staticMethod() → dynamic
  return 123;
static method main() → dynamic {
  self::Class* c = new self::Class::•();
  ([dynamic]) →* dynamic tearOff0 = self::Extension|get#method0(c);
  self::expect(0, tearOff0.call(0));
  self::expect(null, tearOff0.call());
  ([dynamic]) →* dynamic tearOff1 = self::Extension|get#method1(c);
  self::expect(0, tearOff1.call(0));
  self::expect(42, tearOff1.call());
  ({b: dynamic}) →* dynamic tearOff2 = self::Extension|get#method2(c);
  self::expect(0, tearOff2.call(b: 0));
  self::expect(87, tearOff2.call());
  ({c: dynamic}) →* dynamic tearOff3 = self::Extension|get#method3(c);
  self::expect(0, tearOff3.call(c: () → core::int* => 0));
  self::expect(123, tearOff3.call());
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!expected.{core::Object::==}(actual)) {
    throw "Mismatch: expected=${expected}, actual=${actual}";
  }
}

constants  {
  #C1 = null
  #C2 = 42
  #C3 = 87
  #C4 = tearoff self::Extension|staticMethod
}
