don't shadow default parameter scope iife and instead just apply the this and arguments - fixes #1128
This commit is contained in:
@@ -1,10 +1,33 @@
|
||||
import traverse from "../../traversal";
|
||||
import * as t from "../../types";
|
||||
|
||||
export default function (node) {
|
||||
var container = t.functionExpression(null, [], node.body, node.generator, node.async);
|
||||
container.shadow = true;
|
||||
var visitor = {
|
||||
enter(node, parent, scope, state) {
|
||||
if (this.isThisExpression() || this.isReferencedIdentifier({ name: "arguments" })) {
|
||||
state.found = true;
|
||||
this.stop();
|
||||
}
|
||||
|
||||
var call = t.callExpression(container, []);
|
||||
if (this.isFunction()) {
|
||||
this.skip();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export default function (node, scope) {
|
||||
var container = t.functionExpression(null, [], node.body, node.generator, node.async);
|
||||
|
||||
var callee = container;
|
||||
var args = [];
|
||||
|
||||
var state = { found: false };
|
||||
scope.traverse(node, visitor, state);
|
||||
if (state.found) {
|
||||
callee = t.memberExpression(container, t.identifier("apply"));
|
||||
args = [t.thisExpression(), t.identifier("arguments")];
|
||||
}
|
||||
|
||||
var call = t.callExpression(callee, args);
|
||||
if (node.generator) call = t.yieldExpression(call, true);
|
||||
|
||||
return t.returnStatement(call);
|
||||
|
||||
@@ -92,7 +92,7 @@ exports.Function = function (node, parent, scope, file) {
|
||||
node.params = node.params.slice(0, lastNonDefaultParam);
|
||||
|
||||
if (state.iife) {
|
||||
body.push(callDelegate(node));
|
||||
body.push(callDelegate(node, scope));
|
||||
node.body = t.blockStatement(body);
|
||||
} else {
|
||||
node.body.body = body.concat(node.body.body);
|
||||
|
||||
Reference in New Issue
Block a user