| 'use strict'; | 
| var $ = require('../internals/export'); | 
| var fails = require('../internals/fails'); | 
| var isArray = require('../internals/is-array'); | 
| var isObject = require('../internals/is-object'); | 
| var toObject = require('../internals/to-object'); | 
| var lengthOfArrayLike = require('../internals/length-of-array-like'); | 
| var doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer'); | 
| var createProperty = require('../internals/create-property'); | 
| var arraySpeciesCreate = require('../internals/array-species-create'); | 
| var arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support'); | 
| var wellKnownSymbol = require('../internals/well-known-symbol'); | 
| var V8_VERSION = require('../internals/environment-v8-version'); | 
|   | 
| var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable'); | 
|   | 
| // We can't use this feature detection in V8 since it causes | 
| // deoptimization and serious performance degradation | 
| // https://github.com/zloirock/core-js/issues/679 | 
| var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () { | 
|   var array = []; | 
|   array[IS_CONCAT_SPREADABLE] = false; | 
|   return array.concat()[0] !== array; | 
| }); | 
|   | 
| var isConcatSpreadable = function (O) { | 
|   if (!isObject(O)) return false; | 
|   var spreadable = O[IS_CONCAT_SPREADABLE]; | 
|   return spreadable !== undefined ? !!spreadable : isArray(O); | 
| }; | 
|   | 
| var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport('concat'); | 
|   | 
| // `Array.prototype.concat` method | 
| // https://tc39.es/ecma262/#sec-array.prototype.concat | 
| // with adding support of @@isConcatSpreadable and @@species | 
| $({ target: 'Array', proto: true, arity: 1, forced: FORCED }, { | 
|   // eslint-disable-next-line no-unused-vars -- required for `.length` | 
|   concat: function concat(arg) { | 
|     var O = toObject(this); | 
|     var A = arraySpeciesCreate(O, 0); | 
|     var n = 0; | 
|     var i, k, length, len, E; | 
|     for (i = -1, length = arguments.length; i < length; i++) { | 
|       E = i === -1 ? O : arguments[i]; | 
|       if (isConcatSpreadable(E)) { | 
|         len = lengthOfArrayLike(E); | 
|         doesNotExceedSafeInteger(n + len); | 
|         for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]); | 
|       } else { | 
|         doesNotExceedSafeInteger(n + 1); | 
|         createProperty(A, n++, E); | 
|       } | 
|     } | 
|     A.length = n; | 
|     return A; | 
|   } | 
| }); |