[ConstPlugin] fix bug introduced by evaluation of && and ||
This commit is contained in:
parent
dd5e502c2d
commit
13d1dabd93
|
@ -279,7 +279,15 @@ class ConstPlugin {
|
|||
(expression.operator === "||" && !bool);
|
||||
|
||||
if (param.isBoolean() || keepRight) {
|
||||
const dep = new ConstDependency(`${bool}`, param.range);
|
||||
// for case like
|
||||
//
|
||||
// return'development'===process.env.NODE_ENV&&'foo'
|
||||
//
|
||||
// we need a space before the bool to prevent result like
|
||||
//
|
||||
// returnfalse&&'foo'
|
||||
//
|
||||
const dep = new ConstDependency(` ${bool}`, param.range);
|
||||
dep.loc = expression.loc;
|
||||
parser.state.current.addDependency(dep);
|
||||
} else {
|
||||
|
|
|
@ -11,12 +11,15 @@ it("should evaluate logical expression", function() {
|
|||
var value4 = typeof require !== "function" && require("fail");
|
||||
var value5 = "hello" && (() => "value5")();
|
||||
var value6 = "" || (() => "value6")();
|
||||
var value7 = (function () { return'value7'===typeof 'value7'&&'value7'})();
|
||||
|
||||
expect(value1).toBe("hello");
|
||||
expect(value2).toBe(true);
|
||||
expect(value3).toBe("");
|
||||
expect(value4).toBe(false);
|
||||
expect(value5).toBe("value5");
|
||||
expect(value6).toBe("value6");
|
||||
expect(value7).toBe(false);
|
||||
});
|
||||
|
||||
if("shouldn't evaluate expression", function() {
|
||||
|
|
Loading…
Reference in New Issue