aboutsummaryrefslogtreecommitdiff
path: root/lib/scope.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/scope.js')
-rw-r--r--lib/scope.js30
1 files changed, 12 insertions, 18 deletions
diff --git a/lib/scope.js b/lib/scope.js
index c6a85592..503c1890 100644
--- a/lib/scope.js
+++ b/lib/scope.js
@@ -62,15 +62,16 @@ SymbolDef.prototype = {
|| (!(options && options.eval) && (this.scope.uses_eval || this.scope.uses_with));
},
mangle: function(options) {
- if (!this.mangled_name && !this.unmangleable(options))
- this.mangled_name = this.scope.next_mangled(options);
+ if (!this.mangled_name && !this.unmangleable(options)) {
+ var s = this.scope;
+ if (this.orig[0] instanceof AST_SymbolLambda && !options.screw_ie)
+ s = s.parent_scope;
+ this.mangled_name = s.next_mangled(options);
+ }
}
};
-AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
- options = defaults(options, {
- screw_ie: false
- });
+AST_Toplevel.DEFMETHOD("figure_out_scope", function(){
// This does what ast_add_scope did in UglifyJS v1.
//
// Part of it could be done at parse time, but it would complicate
@@ -124,15 +125,7 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
node.init_scope_vars();
}
if (node instanceof AST_SymbolLambda) {
- if (options.screw_ie) {
- scope.def_function(node);
- } else {
- // https://github.com/mishoo/UglifyJS2/issues/24 — MSIE
- // leaks function expression names into the containing
- // scope. Don't like this fix but seems we can't do any
- // better. IE: please die. Please!
- (node.scope = scope.parent_scope).def_function(node);
- }
+ scope.def_function(node);
}
else if (node instanceof AST_SymbolDefun) {
// Careful here, the scope where this should be defined is
@@ -284,14 +277,14 @@ AST_Scope.DEFMETHOD("def_variable", function(symbol){
});
AST_Scope.DEFMETHOD("next_mangled", function(options){
- var ext = this.enclosed, n = ext.length;
+ var ext = this.enclosed;
out: while (true) {
var m = base54(++this.cname);
if (!is_identifier(m)) continue; // skip over "do"
// we must ensure that the mangled name does not shadow a name
// from some parent scope that is referenced in this or in
// inner scopes.
- for (var i = n; --i >= 0;) {
+ for (var i = ext.length; --i >= 0;) {
var sym = ext[i];
var name = sym.mangled_name || (sym.unmangleable(options) && sym.name);
if (m == name) continue out;
@@ -349,7 +342,8 @@ AST_Toplevel.DEFMETHOD("_default_mangler_options", function(options){
except : [],
eval : false,
sort : false,
- toplevel : false
+ toplevel : false,
+ screw_ie : false
});
});