rest-parameter-spread-call-optimization.js (999B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 // Ensure the spread-call optimization doesn't break when a destructuring rest 6 // parameter is used. 7 8 function spreadTarget() { return arguments.length; } 9 10 function spreadOpt(...[r]){ return spreadTarget(...r); } 11 assertEq(spreadOpt([]), 0); 12 assertEq(spreadOpt([10]), 1); 13 assertEq(spreadOpt([10, 20]), 2); 14 assertEq(spreadOpt([10, 20, 30]), 3); 15 16 function spreadOpt2(...[...r]){ return spreadTarget(...r); } 17 assertEq(spreadOpt2(), 0); 18 assertEq(spreadOpt2(10), 1); 19 assertEq(spreadOpt2(10, 20), 2); 20 assertEq(spreadOpt2(10, 20, 30), 3); 21 22 function spreadOpt3(r, ...[]){ return spreadTarget(...r); } 23 assertEq(spreadOpt3([]), 0); 24 assertEq(spreadOpt3([10]), 1); 25 assertEq(spreadOpt3([10, 20]), 2); 26 assertEq(spreadOpt3([10, 20, 30]), 3); 27 28 if (typeof reportCompare === "function") 29 reportCompare(0, 0);