'use strict'; 
 | 
var toIndexedObject = require('../internals/to-indexed-object'); 
 | 
var addToUnscopables = require('../internals/add-to-unscopables'); 
 | 
var Iterators = require('../internals/iterators'); 
 | 
var InternalStateModule = require('../internals/internal-state'); 
 | 
var defineProperty = require('../internals/object-define-property').f; 
 | 
var defineIterator = require('../internals/iterator-define'); 
 | 
var createIterResultObject = require('../internals/create-iter-result-object'); 
 | 
var IS_PURE = require('../internals/is-pure'); 
 | 
var DESCRIPTORS = require('../internals/descriptors'); 
 | 
  
 | 
var ARRAY_ITERATOR = 'Array Iterator'; 
 | 
var setInternalState = InternalStateModule.set; 
 | 
var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); 
 | 
  
 | 
// `Array.prototype.entries` method 
 | 
// https://tc39.es/ecma262/#sec-array.prototype.entries 
 | 
// `Array.prototype.keys` method 
 | 
// https://tc39.es/ecma262/#sec-array.prototype.keys 
 | 
// `Array.prototype.values` method 
 | 
// https://tc39.es/ecma262/#sec-array.prototype.values 
 | 
// `Array.prototype[@@iterator]` method 
 | 
// https://tc39.es/ecma262/#sec-array.prototype-@@iterator 
 | 
// `CreateArrayIterator` internal method 
 | 
// https://tc39.es/ecma262/#sec-createarrayiterator 
 | 
module.exports = defineIterator(Array, 'Array', function (iterated, kind) { 
 | 
  setInternalState(this, { 
 | 
    type: ARRAY_ITERATOR, 
 | 
    target: toIndexedObject(iterated), // target 
 | 
    index: 0,                          // next index 
 | 
    kind: kind                         // kind 
 | 
  }); 
 | 
// `%ArrayIteratorPrototype%.next` method 
 | 
// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next 
 | 
}, function () { 
 | 
  var state = getInternalState(this); 
 | 
  var target = state.target; 
 | 
  var index = state.index++; 
 | 
  if (!target || index >= target.length) { 
 | 
    state.target = null; 
 | 
    return createIterResultObject(undefined, true); 
 | 
  } 
 | 
  switch (state.kind) { 
 | 
    case 'keys': return createIterResultObject(index, false); 
 | 
    case 'values': return createIterResultObject(target[index], false); 
 | 
  } return createIterResultObject([index, target[index]], false); 
 | 
}, 'values'); 
 | 
  
 | 
// argumentsList[@@iterator] is %ArrayProto_values% 
 | 
// https://tc39.es/ecma262/#sec-createunmappedargumentsobject 
 | 
// https://tc39.es/ecma262/#sec-createmappedargumentsobject 
 | 
var values = Iterators.Arguments = Iterators.Array; 
 | 
  
 | 
// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables 
 | 
addToUnscopables('keys'); 
 | 
addToUnscopables('values'); 
 | 
addToUnscopables('entries'); 
 | 
  
 | 
// V8 ~ Chrome 45- bug 
 | 
if (!IS_PURE && DESCRIPTORS && values.name !== 'values') try { 
 | 
  defineProperty(values, 'name', { value: 'values' }); 
 | 
} catch (error) { /* empty */ } 
 |