library /*isNonNullableByDefault*/;
import self as self;
import "dart:test" as test;

import "dart:test";

static method main() → dynamic {
  test::Class::fact();
}

library /*isNonNullableByDefault*/;
import self as test;
import "dart:_internal" as _in;
import "dart:core" as core;

import "dart:_internal";

@#C1
class Class extends core::Object {
  final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
  const constructor _internal({core::bool defaultValue = #C2}) → test::Class
    : test::Class::defaultValue = defaultValue, super core::Object::•()
    ;
  @#C1
  static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C3}) → test::Class
    return new test::Class::_internal(defaultValue: defaultValue);
  @#C1
  static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
    return throw "unsupported";
}

constants  {
  #C1 = _in::_Patch {}
  #C2 = false
  #C3 = true
}
