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 11 var InternalArray = utils.InternalArray; 12 var MakeTypeError; 13 14 utils.Import(function(from) { 15 MakeTypeError = from.MakeTypeError; 16 }); 17 18 // ------------------------------------------------------------------- 19 20 function 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 36 function 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