library;
import self as self;

import "dart:test";

static method main() → dynamic {}

library;
import self as self2;
import "dart:_internal" as _in;
import "dart:core" as core;

import "dart:_internal";

@/* from org-dartlang-testcase:///patch_lib.dart */ #C1
@/* from org-dartlang-testcase:///patch_lib.dart */ #C4
class Array<T extends core::Object? = dynamic> extends core::Object {
  @#C1
  static const factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%> /* redirection-target: self2::_ArraySize::•<self2::Array::•::T%>*/
    return new self2::_ArraySize::•<self2::Array::•::T%>(foo);
}
class _ArraySize<T extends core::Object? = dynamic> extends core::Object implements self2::Array<self2::_ArraySize::T%> /*hasConstConstructor*/  { // from org-dartlang-testcase:///patch_lib.dart
  final field core::int foo;
  const constructor •(initializing-formal core::int foo) → self2::_ArraySize<self2::_ArraySize::T%>
    : self2::_ArraySize::foo = foo, super core::Object::•()
    ;
}

constants  {
  #C1 = _in::_Patch {}
  #C2 = "vm:entry-point"
  #C3 = null
  #C4 = core::pragma {name:#C2, options:#C3}
}
