diff --git a/packages/babel-traverse/src/path/evaluation.js b/packages/babel-traverse/src/path/evaluation.js index f8cc17a12e..67c96f6869 100644 --- a/packages/babel-traverse/src/path/evaluation.js +++ b/packages/babel-traverse/src/path/evaluation.js @@ -99,11 +99,14 @@ export function evaluate(): { confident: boolean; value: any } { if (expr) str += String(evaluate(expr)); } - if (confident) return str; + if (!confident) return; + return str; } if (path.isConditionalExpression()) { - if (evaluate(path.get("test"))) { + let testResult = evaluate(path.get("test")); + if (!confident) return; + if (testResult) { return evaluate(path.get("consequent")); } else { return evaluate(path.get("alternate")); @@ -162,6 +165,7 @@ export function evaluate(): { confident: boolean; value: any } { } let arg = evaluate(argument); + if (!confident) return; switch (node.operator) { case "!": return !arg; case "+": return +arg; @@ -218,7 +222,9 @@ export function evaluate(): { confident: boolean; value: any } { if (path.isBinaryExpression()) { let left = evaluate(path.get("left")); + if (!confident) return; let right = evaluate(path.get("right")); + if (!confident) return; switch (node.operator) { case "-": return left - right; diff --git a/packages/babel-traverse/test/evaluation.js b/packages/babel-traverse/test/evaluation.js index ad7549e05d..ea19ab262d 100644 --- a/packages/babel-traverse/test/evaluation.js +++ b/packages/babel-traverse/test/evaluation.js @@ -19,7 +19,7 @@ suite("evaluation", function () { test("it should work with null", function () { assert.strictEqual( getPath("false || a.length === 0;").get("body")[0].evaluateTruthy(), - false + undefined ); }); });