library;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/dynamic_object_call.dart:21:22: Error: 'hashCode' isn't a function or method and can't be invoked.
//   var v5 = c.hashCode();
//                      ^^^^...
//
// pkg/front_end/testcases/nnbd/dynamic_object_call.dart:23:27: Error: The argument type 'String' can't be assigned to the parameter type 'Invocation'.
//  - 'Invocation' is from 'dart:core'.
//   var v6 = c.noSuchMethod("foo");
//                           ^
//
import self as self;
import "dart:core" as core;

class Class extends core::Object {
  synthetic constructor •() → self::Class
    : super core::Object::•()
    ;
  @#C1
  method noSuchMethod(core::Object o, {core::String foo = #C2}) → dynamic
    return 42;
  @#C1
  method toString({core::String foo = #C2}) → core::String
    return "foo";
}
static method main() → dynamic {}
static method test() → dynamic {
  dynamic c = new self::Class::•();
  core::String v1 = c.{core::Object::toString}{<object>}.(){() → core::String};
  dynamic v2 = c{dynamic}.toString(foo: 42);
  () → core::String v3 = c.{core::Object::toString}{<object>}.{() → core::String};
  core::int v4 = c.{core::Object::hashCode}{<object>}.{core::int};
  dynamic v5 = invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:21:22: Error: 'hashCode' isn't a function or method and can't be invoked.
  var v5 = c.hashCode();
                     ^^^^..." in c.{core::Object::hashCode}{<object>}.{core::int}{<unresolved>}.call();
  dynamic v6 = c.{core::Object::noSuchMethod}{<object>}.(invalid-expression "pkg/front_end/testcases/nnbd/dynamic_object_call.dart:23:27: Error: The argument type 'String' can't be assigned to the parameter type 'Invocation'.
 - 'Invocation' is from 'dart:core'.
  var v6 = c.noSuchMethod(\"foo\");
                          ^" in "foo" as{TypeError} core::Invocation){(core::Invocation) → dynamic};
  dynamic v7 = c{dynamic}.noSuchMethod("foo", foo: 42);
  (core::Invocation) → dynamic v8 = c.{core::Object::noSuchMethod}{<object>}.{(core::Invocation) → dynamic};
}

constants  {
  #C1 = core::_Override {}
  #C2 = ""
}
