1// Copyright 2015 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5(function(global, utils) { 6 7'use strict'; 8 9// ------------------------------------------------------------------- 10// Imports 11var InternalArray = utils.InternalArray; 12var MakeTypeError; 13 14utils.Import(function(from) { 15 MakeTypeError = from.MakeTypeError; 16}); 17 18// ------------------------------------------------------------------- 19 20function SpreadArguments() { 21 var count = %_ArgumentsLength(); 22 var args = new InternalArray(); 23 24 for (var i = 0; i < count; ++i) { 25 var array = %_Arguments(i); 26 var length = array.length; 27 for (var j = 0; j < length; ++j) { 28 args.push(array[j]); 29 } 30 } 31 32 return args; 33} 34 35 36function SpreadIterable(collection) { 37 if (IS_NULL_OR_UNDEFINED(collection)) { 38 throw MakeTypeError(kNotIterable, collection); 39 } 40 41 var args = new InternalArray(); 42 for (var value of collection) { 43 args.push(value); 44 } 45 return args; 46} 47 48// ---------------------------------------------------------------------------- 49// Exports 50 51%InstallToContext([ 52 "spread_arguments", SpreadArguments, 53 "spread_iterable", SpreadIterable, 54]); 55 56}) 57