From 7e020272c11a15fe86a1fc90087c6914a829cbd3 Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Mon, 21 Nov 2016 04:44:56 +0100 Subject: [PATCH] Fix path.evaluate for references before declarations (#4875) --- packages/babel-traverse/src/path/evaluation.js | 4 ++++ packages/babel-traverse/test/evaluation.js | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/packages/babel-traverse/src/path/evaluation.js b/packages/babel-traverse/src/path/evaluation.js index ef478103b1fb..3b41b188c6ce 100644 --- a/packages/babel-traverse/src/path/evaluation.js +++ b/packages/babel-traverse/src/path/evaluation.js @@ -173,6 +173,10 @@ export function evaluate(): { confident: boolean; value: any } { return deopt(binding.path); } + if (binding && path.node.start < binding.path.node.end) { + return deopt(binding.path); + } + if (binding && binding.hasValue) { return binding.value; } else { diff --git a/packages/babel-traverse/test/evaluation.js b/packages/babel-traverse/test/evaluation.js index 97dc0c3df9dd..956d656eb3d3 100644 --- a/packages/babel-traverse/test/evaluation.js +++ b/packages/babel-traverse/test/evaluation.js @@ -86,4 +86,16 @@ describe("evaluation", function () { false ); }); + + it("should deopt ids that are referenced before the bindings", function () { + assert.strictEqual( + getPath("let x = y + 5; let y = 5;").get("body.0.declarations.0.init").evaluate().confident, + false + ); + assert.strictEqual( + getPath("if (typeof x === 'undefined') var x = {}") + .get("body.0.test").evaluate().confident, + false + ); + }); });