diff --git a/lib/scope.js b/lib/scope.js index a118aa8b..dadc589e 100644 --- a/lib/scope.js +++ b/lib/scope.js @@ -550,24 +550,23 @@ AST_Toplevel.DEFMETHOD("mangle_names", function(options){ node.variables.each(collect); return; } + if (node.is_block_scope()) { + node.block_scope.variables.each(collect); + return; + } if (node instanceof AST_Label) { var name; do name = base54(++lname); while (!is_identifier(name)); node.mangled_name = name; return true; } - var mangle_with_block_scope = - (!options.ie8 && node instanceof AST_SymbolCatch) || - node instanceof AST_SymbolBlockDeclaration; - if (mangle_with_block_scope && options.reserved.indexOf(node.name) < 0) { + if (!options.ie8 && node instanceof AST_SymbolCatch) { to_mangle.push(node.definition()); return; } }); this.walk(tw); - to_mangle.forEach(function(def){ - def.mangle(options); - }); + to_mangle.forEach(function(def){ def.mangle(options) }); function collect(symbol) { if (!member(symbol.name, options.reserved)) { diff --git a/test/compress/harmony.js b/test/compress/harmony.js index c094ff54..477d8918 100644 --- a/test/compress/harmony.js +++ b/test/compress/harmony.js @@ -1212,3 +1212,36 @@ issue_2676: { (class {}).a = 42; } } + +issue_2762: { + mangle = {} + input: { + var bar = 1, T = true; + (function() { + if (T) { + const a = function() { + var foo = bar; + console.log(foo, a.prop, b.prop); + }; + a.prop = 2; + const b = { prop: 3 }; + a(); + } + })(); + } + expect: { + var bar = 1, T = true; + (function() { + if (T) { + const o = function() { + var p = bar; + console.log(p, o.prop, r.prop); + }; + o.prop = 2; + const r = { prop: 3 }; + o(); + } + })(); + } + expect_stdout: "1 2 3" +}