library;
//
// Problems in library:
//
// pkg/front_end/testcases/regress/issue_34610.dart:5:16: Error: Expected '{' before this.
// class A { get A.named => null; get bar => 1; }
//                ^
//
// pkg/front_end/testcases/regress/issue_34610.dart:5:15: Error: A class member can't have the same name as the enclosing class.
// class A { get A.named => null; get bar => 1; }
//               ^
//
// pkg/front_end/testcases/regress/issue_34610.dart:5:16: Error: Expected a class member, but got '.'.
// class A { get A.named => null; get bar => 1; }
//                ^
//
// pkg/front_end/testcases/regress/issue_34610.dart:5:17: 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: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; }
//           ^
//
import self as self;
import "dart:core" as core;

class A extends core::Object {
  synthetic constructor •() → self::A
    ;
  get A() → dynamic
    ;
  method named() → dynamic
    ;
  get bar() → dynamic
    ;
}
class B extends core::Object {
  constructor named() → self::B
    ;
  get bar() → dynamic
    ;
}
class C extends core::Object {
  constructor named() → self::C
    ;
  get bar() → dynamic
    ;
}
static method main() → dynamic
  ;
