From 343ea326c217b9c1dbaf098a2def96df2b0b818c Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Tue, 20 Jun 2017 02:14:05 +0800 Subject: ensure mangling works if catch reuses a scope variable (#2123) fixes #2120 --- lib/scope.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/scope.js b/lib/scope.js index 82a935a2..c147ce00 100644 --- a/lib/scope.js +++ b/lib/scope.js @@ -79,7 +79,7 @@ SymbolDef.prototype = { if (options.ie8 && sym instanceof AST_SymbolLambda) s = s.parent_scope; var def; - if (this.defun && (def = this.defun.variables.get(this.name))) { + if (def = this.redefined()) { this.mangled_name = def.mangled_name || def.name; } else this.mangled_name = s.next_mangled(options, this); @@ -87,6 +87,9 @@ SymbolDef.prototype = { cache.set(this.name, this.mangled_name); } } + }, + redefined: function() { + return this.defun && this.defun.variables.get(this.name); } }; @@ -206,6 +209,16 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){ node.reference(options); return true; } + // ensure mangling works if catch reuses a scope variable + var def; + if (node instanceof AST_SymbolCatch && (def = node.definition().redefined())) { + var s = node.scope; + while (s) { + push_uniq(s.enclosed, def); + if (s === def.scope) break; + s = s.parent_scope; + } + } }); self.walk(tw); -- cgit v1.2.3