// Unhandled errors:
//
// pkg/front_end/testcases/implicit_new.dart:18:18: Error: Method not found: 'Bar'.
//   var y = prefix.Bar();
//                  ^^^
//
// pkg/front_end/testcases/implicit_new.dart:19:10: Error: Method not found: 'Bar'.
//   prefix.Bar();
//          ^^^

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

class Foo extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  operator +(dynamic other) → dynamic
    return null;
}
class Bar extends core::Object {
  constructor named() → void
    : super core::Object::•()
    ;
  operator +(dynamic other) → dynamic
    return null;
}
class IndexTester extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  operator [](dynamic _) → dynamic
    return null;
  operator []=(dynamic _a, dynamic _b) → void {}
}
static method testNSM() → dynamic {
  dynamic y = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
}
static method f(dynamic x) → dynamic
  return x;
static method main() → dynamic {
  self::Foo x = new self::Foo::•();
  x = new self::Foo::•();
  self::Bar z = new self::Bar::named();
  z = new self::Bar::named();
  self::f(new self::Foo::•());
  self::f(new self::Foo::•());
  self::f(new self::Bar::named());
  self::f(new self::Bar::named());
  core::List<core::Object> l = <core::Object>[new self::Foo::•(), new self::Bar::named()];
  l = <core::Object>[new self::Foo::•(), new self::Bar::named()];
  core::Map<core::String, core::Object> m = <core::String, core::Object>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
  m = <core::String, core::Object>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
  self::IndexTester i = new self::IndexTester::•();
  i.{self::IndexTester::[]}(new self::Foo::•());
  i.{self::IndexTester::[]}(new self::Foo::•());
  i.{self::IndexTester::[]}(new self::Bar::named());
  i.{self::IndexTester::[]}(new self::Bar::named());
  i.{self::IndexTester::[]=}(new self::Foo::•(), null);
  i.{self::IndexTester::[]=}(new self::Foo::•(), null);
  i.{self::IndexTester::[]=}(new self::Bar::named(), null);
  i.{self::IndexTester::[]=}(new self::Bar::named(), null);
  new self::Foo::•().{self::Foo::+}(new self::Bar::named());
  new self::Foo::•().{self::Foo::+}(new self::Bar::named());
  new self::Bar::named().{self::Bar::+}(new self::Foo::•());
  new self::Bar::named().{self::Bar::+}(new self::Foo::•());
}
