Skip to content

Commit 41e42e8

Browse files
committed
fixed renaming in IIFEs and Assignments
fixed webpack#551, fixed webpack#494
1 parent f273544 commit 41e42e8

File tree

3 files changed

+25
-16
lines changed

3 files changed

+25
-16
lines changed

lib/Parser.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -562,11 +562,13 @@ Parser.prototype.walkLogicalExpression = function walkLeftRightExpression(expres
562562

563563
Parser.prototype.walkAssignmentExpression = function walkAssignmentExpression(expression) {
564564
var renameIdentifier = this.getRenameIdentifier(expression.right);
565-
if(expression.left.type === "Identifier" && renameIdentifier && !this.applyPluginsBailResult("rename " + renameIdentifier, expression.right)) {
565+
if(expression.left.type === "Identifier" && renameIdentifier && this.applyPluginsBailResult("can-rename " + renameIdentifier, expression.right)) {
566566
// renaming "a = b;"
567-
this.scope.renames["$"+expression.left.name] = renameIdentifier;
568-
var idx = this.scope.definitions.indexOf(expression.left.name);
569-
if(idx >= 0) this.scope.definitions.splice(idx, 1);
567+
if(!this.applyPluginsBailResult("rename " + renameIdentifier, expression.right)) {
568+
this.scope.renames["$"+expression.left.name] = renameIdentifier;
569+
var idx = this.scope.definitions.indexOf(expression.left.name);
570+
if(idx >= 0) this.scope.definitions.splice(idx, 1);
571+
}
570572
} else if(expression.left.type === "Identifier") {
571573
if(!this.applyPluginsBailResult("assigned " + expression.left.name, expression)) {
572574
this.walkExpression(expression.right);
@@ -608,13 +610,11 @@ Parser.prototype.walkCallExpression = function walkCallExpression(expression) {
608610
var params = functionExpression.params;
609611
var args = args.map(function(arg, idx) {
610612
var renameIdentifier = this.getRenameIdentifier(arg);
611-
if(!renameIdentifier) {
612-
this.walkExpression(arg);
613-
return;
614-
} else if(this.applyPluginsBailResult("rename " + renameIdentifier, arg)) {
615-
return;
613+
if(renameIdentifier && this.applyPluginsBailResult("can-rename " + renameIdentifier, arg)) {
614+
if(!this.applyPluginsBailResult("rename " + renameIdentifier, arg))
615+
return renameIdentifier;
616616
}
617-
return renameIdentifier;
617+
this.walkExpression(arg);
618618
}, this);
619619
this.inScope(params.filter(function(identifier, idx) {
620620
return !args[idx];
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
it("should replace a free var in a IIFE", function() {
2+
(function(md) {
3+
md.should.be.type("function");
4+
}(module.deprecate));
5+
});

test/cases/parsing/issue-551/index.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
var window = {};
22

33
it("should be able to set the public path", function() {
4+
global.xyz = "xyz";
5+
__webpack_public_path__ = global.xyz;
6+
__webpack_require__.p.should.be.eql("xyz");
7+
48
window.something = "something";
59
__webpack_public_path__ = window.something;
6-
__webpack_public_path__.should.be.eql("something");
7-
10+
__webpack_require__.p.should.be.eql("something");
11+
812
__webpack_public_path__ = "abc";
9-
__webpack_public_path__.should.be.eql("abc");
10-
13+
__webpack_require__.p.should.be.eql("abc");
14+
1115
__webpack_public_path__ = func();
12-
__webpack_public_path__.should.be.eql("func");
13-
16+
__webpack_require__.p.should.be.eql("func");
17+
1418
function func() {
1519
return "func";
1620
}

0 commit comments

Comments
 (0)