in benchmark/old.js [887:938]
function generateFunctionParams(node) {
var i, iz, result, hasDefault;
hasDefault = false;
if (node.type === Syntax.ArrowFunctionExpression &&
!node.rest && (!node.defaults || node.defaults.length === 0) &&
node.params.length === 1 && node.params[0].type === Syntax.Identifier) {
// arg => { } case
result = [generateIdentifier(node.params[0])];
} else {
result = ['('];
if (node.defaults) {
hasDefault = true;
}
for (i = 0, iz = node.params.length; i < iz; ++i) {
if (hasDefault && node.defaults[i]) {
// Handle default values.
result.push(generateAssignment(node.params[i], node.defaults[i], '=', {
precedence: Precedence.Assignment,
allowIn: true,
allowCall: true
}));
} else {
result.push(generatePattern(node.params[i], {
precedence: Precedence.Assignment,
allowIn: true,
allowCall: true
}));
}
if (i + 1 < iz) {
result.push(',' + space);
}
}
if (node.rest) {
if (node.params.length) {
result.push(',' + space);
}
result.push('...');
result.push(generateIdentifier(node.rest, {
precedence: Precedence.Assignment,
allowIn: true,
allowCall: true
}));
}
result.push(')');
}
return result;
}