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 /* from org-dartlang-testcase:///private_method_tearoff_lib.dart */ _f() → void
    return this.{core::Object::noSuchMethod}(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._f.runtimeType}");
}

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