diff --git a/packages/babel-traverse/src/path/evaluation.js b/packages/babel-traverse/src/path/evaluation.js index 6f63987b2a..5e89b1a2dd 100644 --- a/packages/babel-traverse/src/path/evaluation.js +++ b/packages/babel-traverse/src/path/evaluation.js @@ -90,8 +90,10 @@ export function evaluate(): { confident: boolean; value: any } { seen.set(node, item); let val = _evaluate(path); - item.resolved = true; - item.value = value; + if (confident) { + item.resolved = true; + item.value = val; + } return val; } } diff --git a/packages/babel-traverse/test/evaluation.js b/packages/babel-traverse/test/evaluation.js index ecc8c6eba7..be0d5c0f1b 100644 --- a/packages/babel-traverse/test/evaluation.js +++ b/packages/babel-traverse/test/evaluation.js @@ -37,4 +37,18 @@ suite("evaluation", function () { false ); }); + + test("should work with repeated, indeterminate identifiers", function () { + assert.strictEqual( + getPath("var num = foo(); (num > 0 && num < 100);").get("body")[1].evaluateTruthy(), + undefined + ); + }); + + test("should work with repeated, determinate identifiers", function () { + assert.strictEqual( + getPath("var num = 5; (num > 0 && num < 100);").get("body")[1].evaluateTruthy(), + true + ); + }); });