// Formatted problems:
//
// pkg/front_end/testcases/rasta/issue_000044.dart:7:8: Error: Expected a function body or '=>'.
// Try adding {}.
// a b(c) = d;
//        ^
//
// pkg/front_end/testcases/rasta/issue_000044.dart:14:29: Error: Only factory constructor can specify '=' redirection.
// Try making this a factory constructor, or remove the redirection.
//   C.missingFactoryKeyword() = C.constant;
//                             ^
//
// pkg/front_end/testcases/rasta/issue_000044.dart:21:28: Error: Only factory constructor can specify '=' redirection.
// Try making this a factory constructor, or remove the redirection.
//   C notEvenAConstructor(a) = h;
//                            ^
//
// pkg/front_end/testcases/rasta/issue_000044.dart:7:1: Warning: Type 'a' not found.
// a b(c) = d;
// ^
//
// pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Warning: Couldn't find constructor 'h'.
//   C notEvenAConstructor(a) = h;
//                              ^

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

class C extends core::Object {
  static field dynamic _redirecting# = <dynamic>[self::C::good];
  const constructor constant() → self::C
    ;
  constructor missingFactoryKeyword() → self::C
    ;
  static factory good() → self::C
    let dynamic #redirecting_factory = self::C::constant in invalid-expression;
  method notEvenAConstructor(dynamic a) → self::C
    ;
}
static method b(dynamic c) → invalid-type
  ;
static method main() → dynamic
  ;
