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 method1 = self::Extension|method1;
  method tearoff method1 = self::Extension|get#method1;
  method method2 = self::Extension|method2;
  method tearoff method2 = self::Extension|get#method2;
  method method3 = self::Extension|method3;
  method tearoff method3 = self::Extension|get#method3;
  method method4 = self::Extension|method4;
  method tearoff method4 = self::Extension|get#method4;
}
static extension-member method Extension|method1(lowered final self::Class #this, {core::bool b = #C1, core::String s = #C2}) → void
  return null;
static extension-member method Extension|get#method1(lowered final self::Class #this) → ({b: core::bool, s: core::String}) → void
  return ({core::bool b = #C1, core::String s = #C2}) → void => self::Extension|method1(#this, b: b, s: s);
static extension-member method Extension|method2(lowered final self::Class #this, [core::bool b = #C1, core::String s = #C2]) → void
  return null;
static extension-member method Extension|get#method2(lowered final self::Class #this) → ([core::bool, core::String]) → void
  return ([core::bool b = #C1, core::String s = #C2]) → void => self::Extension|method2(#this, b, s);
static extension-member method Extension|method3(lowered final self::Class #this, core::int i, {core::bool b = #C1, core::String s = #C2}) → void {}
static extension-member method Extension|get#method3(lowered final self::Class #this) → (core::int, {b: core::bool, s: core::String}) → void
  return (core::int i, {core::bool b = #C1, core::String s = #C2}) → void => self::Extension|method3(#this, i, b: b, s: s);
static extension-member method Extension|method4(lowered final self::Class #this, core::int i, [core::bool b = #C1, core::String s = #C2]) → void {}
static extension-member method Extension|get#method4(lowered final self::Class #this) → (core::int, [core::bool, core::String]) → void
  return (core::int i, [core::bool b = #C1, core::String s = #C2]) → void => self::Extension|method4(#this, i, b, s);
static method main() → dynamic {
  self::Class c = new self::Class::•();
  self::Extension|method1(c);
  self::Extension|method1(c, s: "foo");
  self::Extension|method1(c, b: true);
  self::Extension|method1(c, b: true, s: "foo");
  self::Extension|method1(c, s: "foo", b: true);
  self::Extension|method2(c);
  self::Extension|method2(c, true);
  self::Extension|method2(c, true, "foo");
  self::Extension|method3(c, 42);
  self::Extension|method3(c, 42, s: "foo");
  self::Extension|method3(c, 42, b: true);
  self::Extension|method3(c, 42, b: true, s: "foo");
  self::Extension|method3(c, 42, s: "foo", b: true);
  self::Extension|method4(c, 42);
  self::Extension|method4(c, 42, true);
  self::Extension|method4(c, 42, true, "foo");
}

constants  {
  #C1 = false
  #C2 = ", "
}
