From c595b84032b3083b87a976c8387010bf6074ad93 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Fri, 31 Mar 2017 02:57:47 +0800 Subject: fix catch symbol mangling (#1734) Only need to look up the immediate non-block/catch scope for the same-name special case. fixes #1733 --- lib/scope.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'lib/scope.js') diff --git a/lib/scope.js b/lib/scope.js index 025d4ca3..df0a7e00 100644 --- a/lib/scope.js +++ b/lib/scope.js @@ -79,9 +79,7 @@ SymbolDef.prototype = { if (!options.screw_ie8 && sym instanceof AST_SymbolLambda) s = s.parent_scope; var def; - if (options.screw_ie8 - && sym instanceof AST_SymbolCatch - && (def = s.parent_scope.find_variable(sym))) { + if (this.defun && (def = this.defun.variables.get(this.name))) { this.mangled_name = def.mangled_name || def.name; } else this.mangled_name = s.next_mangled(options, this); @@ -171,7 +169,7 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){ } } else if (node instanceof AST_SymbolCatch) { - scope.def_variable(node); + scope.def_variable(node).defun = defun; } else if (node instanceof AST_LabelRef) { var sym = labels.get(node.name); @@ -227,7 +225,7 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){ if (node instanceof AST_SymbolCatch) { var name = node.name; var refs = node.thedef.references; - var scope = node.thedef.scope.parent_scope; + var scope = node.thedef.defun; var def = scope.find_variable(name) || self.globals.get(name) || scope.def_variable(node); refs.forEach(function(ref) { ref.thedef = def; -- cgit v1.2.3