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() → void
    : super core::Object::•()
    ;
  constructor missingFactoryKeyword() → void
    : super core::Object::•()
    invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:14:31: Error: Can't return from a constructor.\n  C.missingFactoryKeyword() = C.constant;\n                              ^";
  static factory good() → self::C
    let dynamic #redirecting_factory = self::C::constant in invalid-expression;
  method notEvenAConstructor(dynamic a) → self::C
    invalid-statement;
}
static method b(dynamic c) → invalid-type
  return throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#d, 33, null, <dynamic>[].toList(growable: false), <dynamic, dynamic>{}));
static method main() → dynamic {
  self::C c = null;
  core::print(const self::C::constant());
  core::print(invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:27:15: Error: Not a const constructor.\n  print(const C.missingFactoryKeyword());\n              ^");
  core::print(const self::C::constant());
  core::print(new self::C::constant().notEvenAConstructor(null));
}
