37 lines
771 B
JavaScript
37 lines
771 B
JavaScript
var util = require("../../util");
|
|
var t = require("../../types");
|
|
|
|
exports.Function = function (node, parent, file) {
|
|
if (!node.rest) return;
|
|
|
|
var rest = node.rest;
|
|
delete node.rest;
|
|
|
|
t.ensureBlock(node);
|
|
|
|
var argsId = t.identifier("arguments");
|
|
argsId._ignoreAliasFunctions = true;
|
|
|
|
var start = t.literal(node.params.length);
|
|
var key = file.generateUidIdentifier("key");
|
|
|
|
var arrKey = key;
|
|
if (node.params.length) {
|
|
arrKey = t.binaryExpression("-", arrKey, start);
|
|
}
|
|
|
|
node.body.body.unshift(
|
|
t.variableDeclaration("var", [
|
|
t.variableDeclarator(rest, t.arrayExpression([]))
|
|
]),
|
|
|
|
util.template("rest", {
|
|
ARGUMENTS: argsId,
|
|
ARRAY_KEY: arrKey,
|
|
START: start,
|
|
ARRAY: rest,
|
|
KEY: key
|
|
})
|
|
);
|
|
};
|