library;
import self as self;
import "dart:core" as core;
import "private_method_tearoff_lib.dart" as pri;

import "org-dartlang-testcase:///private_method_tearoff_lib.dart";

class Foo extends core::Object implements pri::Bar {
  synthetic constructor •() → self::Foo
    : super core::Object::•()
    ;
  no-such-method-forwarder method _f() → void
    return throw{for-error-handling} core::NoSuchMethodError::withInvocation(this, new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol, dynamic>(#C4)));
}
class Baz extends self::Foo {
  synthetic constructor •() → self::Baz
    : super self::Foo::•()
    ;
}
static method main() → dynamic {
  pri::baz(new self::Foo::•());
}

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

class Bar extends core::Object {
  synthetic constructor •() → pri::Bar
    : super core::Object::•()
    ;
  method _f() → void {}
}
static method baz(pri::Bar bar) → void {
  core::print("${bar.{pri::Bar::_f}{() → void}.{core::Object::runtimeType}{core::Type}}");
}

constants  {
  #C1 = #org-dartlang-testcase:///private_method_tearoff.dart::_f
  #C2 = <core::Type>[]
  #C3 = <dynamic>[]
  #C4 = <core::Symbol, dynamic>{}
}
