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

class X extends core::Object {
  synthetic constructor •() → self::X
    ;
  method _foo() → void async 
    ;
  method foo() → void
    ;
}
class Y extends core::Object implements self::X {
  synthetic constructor •() → self::Y
    ;
  method noSuchMethod(core::Invocation _) → void
    ;
  no-such-method-forwarder method _foo() → void
    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#_foo, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))){(core::Invocation) → void};
  no-such-method-forwarder method foo() → void
    return this.{self::Y::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 0, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))){(core::Invocation) → void};
}
static method main() → dynamic
  ;


Extra constant evaluation status:
Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:14:7 -> SymbolConstant(#_foo)
Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:14:7 -> ListConstant(const <Type*>[])
Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:14:7 -> ListConstant(const <dynamic>[])
Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:14:7 -> MapConstant(const <Symbol*, dynamic>{})
Evaluated: SymbolLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:14:7 -> SymbolConstant(#foo)
Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:14:7 -> ListConstant(const <Type*>[])
Evaluated: ListLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:14:7 -> ListConstant(const <dynamic>[])
Evaluated: MapLiteral @ org-dartlang-testcase:///no_such_method_forwarder.dart:14:7 -> MapConstant(const <Symbol*, dynamic>{})
Extra constant evaluation: evaluated: 16, effectively constant: 8
