From 92e59dac70b7dbd78430aa8852877d9a8aabcde0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C5=A0pan=C4=9Bl?= Date: Tue, 28 Mar 2017 10:03:04 +0200 Subject: [PATCH 1/2] Test case for #1702 - missing scope in references when used in "for". --- test/mocha/forReferences-issue1702.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 test/mocha/forReferences-issue1702.js diff --git a/test/mocha/forReferences-issue1702.js b/test/mocha/forReferences-issue1702.js new file mode 100644 index 00000000..49a23146 --- /dev/null +++ b/test/mocha/forReferences-issue1702.js @@ -0,0 +1,25 @@ +var uglify = require('../../'); +var assert = require("assert"); + +describe("For statement", function() { + it("For variable should list enclosing scope in its references (issue #17022)", function() { + var ast = uglify.parse("function f() { var a = 0; for (; a < 10; a++) {} }"); + ast.figure_out_scope(); + + var checkedAST_VarDef = false; + var checkWalker = new uglify.TreeWalker(function(node, descend) { + if (node instanceof uglify.AST_VarDef) { + checkedAST_VarDef = true; + // one reference should be in the AST_Defun scope - search for it + var foundDefun = false; + node.name.thedef.references.forEach(function (r) { + if (r instanceof uglify.AST_Defun) foundDefun = true; + }); + + assert(foundDefun, "Symbol not referenced in the AST_Defun scope"); + } + }); + ast.walk(checkWalker); + assert(checkedAST_VarDef, "AST_VarDef not found"); + }); +}); \ No newline at end of file From 35f150967aa388dee7d87c96a8a967d9c61b6ab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C5=A0pan=C4=9Bl?= Date: Tue, 28 Mar 2017 10:26:31 +0200 Subject: [PATCH 2/2] Fixed test bug (missing scope reference). --- test/mocha/forReferences-issue1702.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/mocha/forReferences-issue1702.js b/test/mocha/forReferences-issue1702.js index 49a23146..629f53a5 100644 --- a/test/mocha/forReferences-issue1702.js +++ b/test/mocha/forReferences-issue1702.js @@ -13,7 +13,7 @@ describe("For statement", function() { // one reference should be in the AST_Defun scope - search for it var foundDefun = false; node.name.thedef.references.forEach(function (r) { - if (r instanceof uglify.AST_Defun) foundDefun = true; + if (r.scope instanceof uglify.AST_Defun) foundDefun = true; }); assert(foundDefun, "Symbol not referenced in the AST_Defun scope");