mirror of https://github.com/webpack/webpack.git
fixed detection of free vars while evaluating
This commit is contained in:
parent
a648f115fa
commit
27b23c0302
|
|
@ -167,21 +167,26 @@ Parser.prototype.initializeEvaluating = function() {
|
|||
this.plugin("evaluate UnaryExpression", function(expr) {
|
||||
if(expr.operator === "typeof") {
|
||||
if(expr.argument.type === "Identifier") {
|
||||
var res = this.applyPluginsBailResult("evaluate typeof " + expr.argument.name, expr);
|
||||
if(res !== undefined) return res;
|
||||
var name = this.scope.renames["$"+expr.argument.name] || expr.argument.name;
|
||||
if(this.scope.definitions.indexOf(name) === -1) {
|
||||
var res = this.applyPluginsBailResult("evaluate typeof " + name, expr);
|
||||
if(res !== undefined) return res;
|
||||
}
|
||||
}
|
||||
if(expr.argument.type === "MemberExpression") {
|
||||
var expression = expr.argument;
|
||||
var exprName = [];
|
||||
while(expression.type === "MemberExpression" && expression.property.type === "Identifier") {
|
||||
exprName.unshift(expression.property.name);
|
||||
exprName.unshift(this.scope.renames["$"+expression.property.name] || expression.property.name);
|
||||
expression = expression.object;
|
||||
}
|
||||
if(expression.type === "Identifier" && this.scope.definitions.indexOf(expression.name) === -1) {
|
||||
if(expression.type === "Identifier") {
|
||||
exprName.unshift(this.scope.renames["$"+expression.name] || expression.name);
|
||||
exprName = exprName.join(".");
|
||||
var res = this.applyPluginsBailResult("evaluate typeof " + exprName, expr);
|
||||
if(res !== undefined) return res;
|
||||
if(this.scope.definitions.indexOf(name) === -1) {
|
||||
exprName = exprName.join(".");
|
||||
var res = this.applyPluginsBailResult("evaluate typeof " + exprName, expr);
|
||||
if(res !== undefined) return res;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(expr.argument.type === "FunctionExpression") {
|
||||
|
|
@ -222,14 +227,17 @@ Parser.prototype.initializeEvaluating = function() {
|
|||
expr = expr.object;
|
||||
}
|
||||
if(expr.type === "Identifier") {
|
||||
exprName.unshift(this.scope.renames["$"+expr.name] || expr.name);
|
||||
exprName = exprName.join(".");
|
||||
if(this.scope.definitions.indexOf(expr.name) === -1) {
|
||||
var result = this.applyPluginsBailResult("evaluate Identifier " + exprName, expression);
|
||||
if(result) return result;
|
||||
return new BasicEvaluatedExpression().setIdentifier(exprName).setRange(expression.range);
|
||||
} else {
|
||||
return this.applyPluginsBailResult("evaluate defined Identifier " + exprName, expression);
|
||||
var name = this.scope.renames["$"+expr.name] || expr.name;
|
||||
if(this.scope.definitions.indexOf(name) === -1) {
|
||||
exprName.unshift(name);
|
||||
exprName = exprName.join(".");
|
||||
if(this.scope.definitions.indexOf(expr.name) === -1) {
|
||||
var result = this.applyPluginsBailResult("evaluate Identifier " + exprName, expression);
|
||||
if(result) return result;
|
||||
return new BasicEvaluatedExpression().setIdentifier(exprName).setRange(expression.range);
|
||||
} else {
|
||||
return this.applyPluginsBailResult("evaluate defined Identifier " + exprName, expression);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
var fn = function(module) {
|
||||
if (typeof module !== 'number') {
|
||||
throw new Error("module should be a number");
|
||||
}
|
||||
(typeof module).should.be.eql("number");
|
||||
};
|
||||
|
||||
it("should hide a free var by function argument", function() {
|
||||
fn(1);
|
||||
});
|
||||
Loading…
Reference in New Issue