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

class I extends core::Object {
  synthetic constructor •() → self::I
    : super core::Object::•()
    ;
}
class A extends core::Object implements self::I {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
}
extension /* unnamed */ _extension#0 on self::A {
  get member = self::_extension#0|get#member;
}
extension /* unnamed */ _extension#1 on self::I {
  get member = self::_extension#1|get#member;
}
static extension-member method _extension#0|get#member(lowered final self::A #this) → core::int
  return 87;
static extension-member method _extension#1|get#member(lowered final self::I #this) → core::int
  return 42;
static method method(self::A a) → dynamic
  return block {
    core::int #t1;
    final synthesized self::A #0#0 = a;
    #L1:
    {
      {
        hoisted core::int member;
        if(true) {
          member = self::_extension#1|get#member(#0#0);
          #t1 = member;
          break #L1;
        }
      }
    }
  } =>#t1;
static method main() → dynamic {
  self::expect(42, self::method(new self::A::•()));
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
    throw "Expected ${expected}, actual ${actual}";
}
