library /*isNonNullableByDefault*/;
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;
  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;
  method method4 = self::Extension|method4;
  tearoff method4 = self::Extension|get#method4;
}
static method Extension|method1(lowered final self::Class #this, {core::bool b = #C1, core::String s = #C2}) → void
  return null;
static 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 method Extension|method2(lowered final self::Class #this, [core::bool b = #C1, core::String s = #C2]) → void
  return null;
static 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 method Extension|method3(lowered final self::Class #this, core::int i, {core::bool b = #C1, core::String s = #C2}) → void {}
static 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 method Extension|method4(lowered final self::Class #this, core::int i, [core::bool b = #C1, core::String s = #C2]) → void {}
static 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 = ", "
}
