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

class Sueta extends core::Object {
  synthetic constructor •() → self::Sueta
    : super core::Object::•()
    ;
  static method test(core::int positional, {core::int named1 = #C1, core::int named2 = #C1}) → void {}
}
extension SuetaExtension on self::Sueta {
  static method test = self::SuetaExtension|test;
}
static method main(core::List<core::String> arguments) → void {}
static method test(core::int positional, {core::int named1 = #C1, core::int named2 = #C1}) → void {}
static extension-member method SuetaExtension|test(core::int pos, {core::int named1 = #C1, core::int named2 = #C1}) → void {}
static method test1() → void {
  let final core::int #t1 = 0 in self::test(1, named1: #t1, named2: 0);
}
static method test2() → void {
  let final core::int #t2 = 0 in self::Sueta::test(1, named1: #t2, named2: 0);
}
static method test3() → void {
  let final core::int #t3 = 0 in self::SuetaExtension|test(1, named1: #t3, named2: 0);
}

constants  {
  #C1 = 0
}
