mirror of https://github.com/webpack/webpack.git
fix: terminated state for `if/else` (#19404)
This commit is contained in:
parent
2470d8e74c
commit
b92cb0cf72
|
@ -2197,16 +2197,22 @@ class JavascriptParser extends Parser {
|
||||||
walkIfStatement(statement) {
|
walkIfStatement(statement) {
|
||||||
const result = this.hooks.statementIf.call(statement);
|
const result = this.hooks.statementIf.call(statement);
|
||||||
if (result === undefined) {
|
if (result === undefined) {
|
||||||
this.inExecutedPath(false, () => {
|
|
||||||
this.walkExpression(statement.test);
|
this.walkExpression(statement.test);
|
||||||
this.walkNestedStatement(statement.consequent);
|
this.walkNestedStatement(statement.consequent);
|
||||||
});
|
|
||||||
|
|
||||||
this.inExecutedPath(true, () => {
|
const consequentTerminated = this.scope.terminated;
|
||||||
|
this.scope.terminated = undefined;
|
||||||
|
|
||||||
if (statement.alternate) {
|
if (statement.alternate) {
|
||||||
this.walkNestedStatement(statement.alternate);
|
this.walkNestedStatement(statement.alternate);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
const alternateTerminated = this.scope.terminated;
|
||||||
|
|
||||||
|
this.scope.terminated =
|
||||||
|
consequentTerminated && alternateTerminated
|
||||||
|
? this.scope.terminated
|
||||||
|
: undefined;
|
||||||
} else {
|
} else {
|
||||||
this.inExecutedPath(true, () => {
|
this.inExecutedPath(true, () => {
|
||||||
if (result) {
|
if (result) {
|
||||||
|
|
|
@ -4788,7 +4788,7 @@ exports[`StatsTestCases should print correct stats for track-returned 1`] = `
|
||||||
./used48.js X bytes [built] [code generated]
|
./used48.js X bytes [built] [code generated]
|
||||||
./used35.js X bytes [built] [code generated]
|
./used35.js X bytes [built] [code generated]
|
||||||
./used10.js X bytes [built] [code generated]
|
./used10.js X bytes [built] [code generated]
|
||||||
+ 56 modules
|
+ 65 modules
|
||||||
webpack x.x.x compiled successfully in X ms"
|
webpack x.x.x compiled successfully in X ms"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
|
|
@ -306,7 +306,7 @@ it("should work correct for try catch and loops", () => {
|
||||||
require("./used15")
|
require("./used15")
|
||||||
}
|
}
|
||||||
|
|
||||||
// require("fail35");
|
require("fail35");
|
||||||
}
|
}
|
||||||
|
|
||||||
function test7() {
|
function test7() {
|
||||||
|
@ -826,7 +826,7 @@ it("should work correct for if #8", () => {
|
||||||
} else
|
} else
|
||||||
return;
|
return;
|
||||||
|
|
||||||
require("fail");
|
require("./used70");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should work correct for if #9", () => {
|
it("should work correct for if #9", () => {
|
||||||
|
@ -1082,7 +1082,7 @@ it("should work correct for if #22", () => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// require("fail");
|
require("fail");
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1192,6 +1192,139 @@ it("should work correct for if #29", () => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should work correct for if #30", () => {
|
||||||
|
if (rand()) {
|
||||||
|
rand();
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
rand();
|
||||||
|
}
|
||||||
|
|
||||||
|
require("./used71")
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should work correct for if #31", () => {
|
||||||
|
if (rand()) {
|
||||||
|
rand();
|
||||||
|
} else {
|
||||||
|
rand();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
require("./used72")
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should work correct for if #32", () => {
|
||||||
|
if (rand()) {
|
||||||
|
rand();
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
rand();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
require("fail");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should work correct for if #33", () => {
|
||||||
|
if (rand()) {
|
||||||
|
rand();
|
||||||
|
return;
|
||||||
|
} else if (rand()) {
|
||||||
|
rand()
|
||||||
|
} else {
|
||||||
|
rand();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
require("./used73");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should work correct for if #34", () => {
|
||||||
|
if (rand()) {
|
||||||
|
rand();
|
||||||
|
return;
|
||||||
|
} else if (rand()) {
|
||||||
|
rand();
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
rand();
|
||||||
|
}
|
||||||
|
|
||||||
|
require("./used74");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should work correct for if #35", () => {
|
||||||
|
if (rand()) {
|
||||||
|
rand();
|
||||||
|
} else if (rand()) {
|
||||||
|
rand();
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
rand();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
require("./used75");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should work correct for if #36", () => {
|
||||||
|
if (rand()) {
|
||||||
|
if (rand()) {
|
||||||
|
return;
|
||||||
|
} else if (rand()) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
require("fail");
|
||||||
|
} else if (rand()) {
|
||||||
|
rand();
|
||||||
|
} else {
|
||||||
|
rand();
|
||||||
|
}
|
||||||
|
|
||||||
|
require("./used76");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should work correct for if #37", () => {
|
||||||
|
if (rand()) {
|
||||||
|
rand();
|
||||||
|
} else if (rand()) {
|
||||||
|
if (rand()) {
|
||||||
|
return;
|
||||||
|
} else if (rand()) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
require("fail");
|
||||||
|
} else {
|
||||||
|
rand();
|
||||||
|
}
|
||||||
|
|
||||||
|
require("./used77");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should work correct for if #38", () => {
|
||||||
|
if (rand()) {
|
||||||
|
rand();
|
||||||
|
} else if (rand()) {
|
||||||
|
rand();
|
||||||
|
} else {
|
||||||
|
if (rand()) {
|
||||||
|
return;
|
||||||
|
} else if (rand()) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
require("fail");
|
||||||
|
}
|
||||||
|
|
||||||
|
require("./used78");
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
it("should not include unused assets", (done) => {
|
it("should not include unused assets", (done) => {
|
||||||
let a, b;
|
let a, b;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
validate(stats) {
|
validate(stats) {
|
||||||
expect(stats.compilation.modules.size).toBe(70);
|
expect(stats.compilation.modules.size).toBe(79);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
module.exports = 10;
|
|
@ -0,0 +1 @@
|
||||||
|
module.exports = 10;
|
|
@ -0,0 +1 @@
|
||||||
|
module.exports = 10;
|
|
@ -0,0 +1 @@
|
||||||
|
module.exports = 10;
|
|
@ -0,0 +1 @@
|
||||||
|
module.exports = 10;
|
|
@ -0,0 +1 @@
|
||||||
|
module.exports = 10;
|
|
@ -0,0 +1 @@
|
||||||
|
module.exports = 10;
|
|
@ -0,0 +1 @@
|
||||||
|
module.exports = 10;
|
|
@ -0,0 +1 @@
|
||||||
|
module.exports = 10;
|
Loading…
Reference in New Issue