benchmarks/scenarios/ember.js
function copy(obj, deep) {
    // fast paths
    if ('object' !== typeof obj || obj === null) {
      return obj; // can't copy primitives
    }

    if (_emberRuntimeMixinsCopyable.default && _emberRuntimeMixinsCopyable.default.detect(obj)) {
      return obj.copy(deep);
    }

    return _copy(obj, deep, deep ? [] : null, deep ? [] : null);
  }
function copy(obj, deep) {
    // fast paths
    if ('object' !== typeof obj || obj === null) {
      return obj; // can't copy primitives
    }

    if (_emberRuntimeMixinsCopyable.default && _emberRuntimeMixinsCopyable.default.detect(obj)) {
      return obj.copy(deep);
    }

    return _copy(obj, deep, deep ? [] : null, deep ? [] : null);
  }
function copy ( obj , deep ) { // fast paths if ( 'object' !== typeof obj || obj === null ) { return obj ; // can't copy primitives } if ( _emberRuntimeMixinsCopyable . default && _emberRuntimeMixinsCopyable . default . detect ( obj ) ) { return obj . copy ( deep ) ; } return _copy ( obj , deep , deep ? [ ] : null , deep ? [ ] : null ) ; }
Creates a shallow copy of the passed object. A deep copy of the object is
returned if the optional `deep` argument is `true`.

If the passed object implements the `Ember.Copyable` interface, then this
function will delegate to the object's `copy()` method and return the
result. See `Ember.Copyable` for further details.

For primitive values (which are immutable in JavaScript), the passed object
is simply returned.

@method copy
@for Ember
@param {Object} obj The object to clone
@param {Boolean} [deep=false] If true, a deep copy of the object is made.
@return {Object} The copied object
@public
Creates a shallow copy of the passed object . A deep copy of the object is returned if the optional deep argument is true .