Skip to content

Commit b9adfaa

Browse files
committed
rewrite code which uses unshift to push
1 parent cc459eb commit b9adfaa

3 files changed

Lines changed: 56 additions & 62 deletions

File tree

lib/Parser.js

Lines changed: 51 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -214,19 +214,10 @@ class Parser extends Tapable {
214214
}
215215
}
216216
if(expr.argument.type === "MemberExpression") {
217-
let expression = expr.argument;
218-
let exprName = [];
219-
while(expression.type === "MemberExpression" && !expression.computed) {
220-
exprName.unshift(this.scope.renames["$" + expression.property.name] || expression.property.name);
221-
expression = expression.object;
222-
}
223-
if(expression.type === "Identifier") {
224-
exprName.unshift(this.scope.renames["$" + expression.name] || expression.name);
225-
if(this.scope.definitions.indexOf(name) === -1) {
226-
exprName = exprName.join(".");
227-
res = this.applyPluginsBailResult1("evaluate typeof " + exprName, expr);
228-
if(res !== undefined) return res;
229-
}
217+
const exprName = this.getNameForExpression(expr.argument);
218+
if(exprName && exprName.free) {
219+
res = this.applyPluginsBailResult1("evaluate typeof " + exprName.name, expr);
220+
if(res !== undefined) return res;
230221
}
231222
}
232223
if(expr.argument.type === "FunctionExpression") {
@@ -275,24 +266,14 @@ class Parser extends Tapable {
275266
}
276267
});
277268
this.plugin("evaluate MemberExpression", function(expression) {
278-
let expr = expression;
279-
let exprName = [];
280-
while(expr.type === "MemberExpression" && expr.property.type === (expr.computed ? "Literal" : "Identifier")) {
281-
exprName.unshift(expr.property.name || expr.property.value);
282-
expr = expr.object;
283-
}
284-
if(expr.type === "Identifier") {
285-
const name = this.scope.renames["$" + expr.name] || expr.name;
286-
if(this.scope.definitions.indexOf(name) === -1) {
287-
exprName.unshift(name);
288-
exprName = exprName.join(".");
289-
if(this.scope.definitions.indexOf(expr.name) === -1) {
290-
const result = this.applyPluginsBailResult1("evaluate Identifier " + exprName, expression);
291-
if(result) return result;
292-
return new BasicEvaluatedExpression().setIdentifier(exprName).setRange(expression.range);
293-
} else {
294-
return this.applyPluginsBailResult1("evaluate defined Identifier " + exprName, expression);
295-
}
269+
let exprName = this.getNameForExpression(expression);
270+
if(exprName) {
271+
if(exprName.free) {
272+
const result = this.applyPluginsBailResult1("evaluate Identifier " + exprName.name, expression);
273+
if(result) return result;
274+
return new BasicEvaluatedExpression().setIdentifier(exprName.name).setRange(expression.range);
275+
} else {
276+
return this.applyPluginsBailResult1("evaluate defined Identifier " + exprName.name, expression);
296277
}
297278
}
298279
});
@@ -970,16 +951,9 @@ class Parser extends Tapable {
970951

971952
walkUnaryExpression(expression) {
972953
if(expression.operator === "typeof") {
973-
let expr = expression.argument;
974-
let exprName = [];
975-
while(expr.type === "MemberExpression" && expr.property.type === (expr.computed ? "Literal" : "Identifier")) {
976-
exprName.unshift(expr.property.name || expr.property.value);
977-
expr = expr.object;
978-
}
979-
if(expr.type === "Identifier" && this.scope.definitions.indexOf(expr.name) === -1) {
980-
exprName.unshift(this.scope.renames["$" + expr.name] || expr.name);
981-
exprName = exprName.join(".");
982-
const result = this.applyPluginsBailResult1("typeof " + exprName, expression);
954+
const exprName = this.getNameForExpression(expression.argument);
955+
if(exprName && exprName.free) {
956+
const result = this.applyPluginsBailResult1("typeof " + exprName.name, expression);
983957
if(result === true)
984958
return;
985959
}
@@ -1144,24 +1118,12 @@ class Parser extends Tapable {
11441118
}
11451119

11461120
walkMemberExpression(expression) {
1147-
let expr = expression;
1148-
let exprName = [];
1149-
while(expr.type === "MemberExpression" && expr.property.type === (expr.computed ? "Literal" : "Identifier")) {
1150-
exprName.unshift(expr.property.name || expr.property.value);
1151-
expr = expr.object;
1152-
}
1153-
if((expr.type === "Identifier" && this.scope.definitions.indexOf(expr.name) === -1) ||
1154-
(expr.type === "ThisExpression" && this.scope.renames.$this)) {
1155-
if(expr.type === "ThisExpression") {
1156-
exprName.unshift(this.scope.renames.$this);
1157-
} else {
1158-
exprName.unshift(this.scope.renames["$" + expr.name] || expr.name);
1159-
}
1160-
let result = this.applyPluginsBailResult1("expression " + exprName.join("."), expression);
1121+
const exprName = this.getNameForExpression(expression);
1122+
if(exprName && exprName.free) {
1123+
let result = this.applyPluginsBailResult1("expression " + exprName.name, expression);
11611124
if(result === true)
11621125
return;
1163-
exprName[exprName.length - 1] = "*";
1164-
result = this.applyPluginsBailResult1("expression " + exprName.join("."), expression);
1126+
result = this.applyPluginsBailResult1("expression " + exprName.nameGeneral, expression);
11651127
if(result === true)
11661128
return;
11671129
}
@@ -1430,6 +1392,38 @@ class Parser extends Tapable {
14301392
return options.reduce((o, i) => Object.assign(o, i), {});
14311393
}
14321394

1395+
getNameForExpression(expression) {
1396+
let expr = expression;
1397+
const exprName = [];
1398+
while(expr.type === "MemberExpression" && expr.property.type === (expr.computed ? "Literal" : "Identifier")) {
1399+
exprName.push(expr.computed ? expr.property.value : expr.property.name);
1400+
expr = expr.object;
1401+
}
1402+
let free;
1403+
if(expr.type === "Identifier") {
1404+
free = this.scope.definitions.indexOf(expr.name) === -1;
1405+
exprName.push(this.scope.renames["$" + expr.name] || expr.name);
1406+
} else if(expr.type === "ThisExpression" && this.scope.renames.$this) {
1407+
free = true;
1408+
exprName.push(this.scope.renames.$this);
1409+
} else if(expr.type === "ThisExpression") {
1410+
free = false;
1411+
exprName.push("this");
1412+
} else {
1413+
return null;
1414+
}
1415+
let prefix = "";
1416+
for(let i = exprName.length - 1; i >= 1; i--)
1417+
prefix += exprName[i] + ".";
1418+
const name = prefix + exprName[0];
1419+
const nameGeneral = prefix + "*";
1420+
return {
1421+
name,
1422+
nameGeneral,
1423+
free
1424+
};
1425+
}
1426+
14331427
}
14341428

14351429
Parser.ECMA_VERSION = ECMA_VERSION;

lib/RecordIdsPlugin.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ class RecordIdsPlugin {
4747
const p = block.parent;
4848
const idx = p.blocks.indexOf(block);
4949
const l = p.blocks.length - 1;
50-
ident.unshift(`${idx}/${l}`);
50+
ident.push(`${idx}/${l}`);
5151
block = block.parent;
5252
}
5353
if(!block.identifier) return null;
54-
ident.unshift(identifierUtils.makePathsRelative(compiler.context, block.identifier()));
55-
return ident.join(":");
54+
ident.push(identifierUtils.makePathsRelative(compiler.context, block.identifier()));
55+
return ident.reverse().join(":");
5656
}
5757
compilation.plugin("record-chunks", (chunks, records) => {
5858
records.nextFreeChunkId = compilation.nextFreeChunkId;

lib/Stats.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -687,9 +687,9 @@ class Stats {
687687
const path = [];
688688
let current = module;
689689
while(current.issuer) {
690-
path.unshift(current = current.issuer);
690+
path.push(current = current.issuer);
691691
}
692-
path.forEach(module => {
692+
path.reverse().forEach(module => {
693693
colors.normal("[");
694694
colors.normal(module.id);
695695
colors.normal("] ");

0 commit comments

Comments
 (0)