// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// Note that the optimizing compiler depends on the algorithm which
// returns a _GrowableObjectArray if length is null, otherwise returns
// fixed size array.
patch class ListImplementation<E> {
  /* patch */ factory List([int length = null]) {
    if (length === null) {
      return new _GrowableObjectArray<E>();
    } else {
      return new _ObjectArray<E>(length);
    }
  }

  /* patch */ static _from(Iterable other) {
    _GrowableObjectArray list = new _GrowableObjectArray();
    for (final e in other) {
      list.add(e);
    }
    return list;
  }
}
