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

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
}
class B extends core::Object {
  synthetic constructor •() → self::B
    : super core::Object::•()
    ;
}
extension /* unnamed */ _extension#0 on self::A {
  method foo = self::_extension#0|foo;
  method tearoff foo = self::_extension#0|get#foo;
}
static extension-member method _extension#0|foo(lowered final self::A #this, self::A a, self::B b) → void {}
static extension-member method _extension#0|get#foo(lowered final self::A #this) → (self::A, self::B) → void
  return (self::A a, self::B b) → void => self::_extension#0|foo(#this, a, b);
static method main() → void {
  dynamic a = new self::A::•();
  dynamic b = new self::B::•();
  self::_extension#0|foo(new self::A::•(), a as{TypeError,ForDynamic} self::A, b as{TypeError,ForDynamic} self::B);
}
