library;
//
// Problems in library:
//
// pkg/front_end/testcases/regress/issue_34610.dart:5:15: Error: A method declaration needs an explicit list of parameters.
// Try adding a parameter list to the method declaration.
// class A { get A.named => null; get bar => 1; }
//               ^
//
// pkg/front_end/testcases/regress/issue_34610.dart:5:11: Error: Constructors can't be a getter.
// Try removing 'get'.
// class A { get A.named => null; get bar => 1; }
//           ^^^
//
// pkg/front_end/testcases/regress/issue_34610.dart:7:11: Error: A method declaration needs an explicit list of parameters.
// Try adding a parameter list to the method declaration.
// class B { B.named : super(); get bar => 1; }
//           ^
//
// pkg/front_end/testcases/regress/issue_34610.dart:9:11: Error: A method declaration needs an explicit list of parameters.
// Try adding a parameter list to the method declaration.
// class C { C.named => null; get bar => 1; }
//           ^
//
// pkg/front_end/testcases/regress/issue_34610.dart:5:26: Error: Constructors can't have a return type.
// Try removing the return type.
// class A { get A.named => null; get bar => 1; }
//                          ^
//
// pkg/front_end/testcases/regress/issue_34610.dart:9:22: Error: Constructors can't have a return type.
// Try removing the return type.
// class C { C.named => null; get bar => 1; }
//                      ^
//
import self as self;
import "dart:core" as core;

class A extends core::Object {
  constructor named() → self::A*
    : super core::Object::•()
    invalid-expression "pkg/front_end/testcases/regress/issue_34610.dart:5:26: Error: Constructors can't have a return type.
Try removing the return type.
class A { get A.named => null; get bar => 1; }
                         ^";
  get bar() → dynamic
    return 1;
}
class B extends core::Object {
  constructor named() → self::B*
    : super core::Object::•()
    ;
  get bar() → dynamic
    return 1;
}
class C extends core::Object {
  constructor named() → self::C*
    : super core::Object::•()
    invalid-expression "pkg/front_end/testcases/regress/issue_34610.dart:9:22: Error: Constructors can't have a return type.
Try removing the return type.
class C { C.named => null; get bar => 1; }
                     ^";
  get bar() → dynamic
    return 1;
}
static method main() → dynamic {
  try {
    core::print(new self::A::named().{self::A::bar});
    throw "expected exception";
  }
  on dynamic catch(final dynamic e) {
  }
  core::print(new self::B::named().{self::B::bar});
  try {
    core::print(new self::C::named().{self::C::bar});
    throw "expected exception";
  }
  on dynamic catch(final dynamic e) {
  }
}
