fix corner case in ie8 & mangle (#4196)

fixes #4195
This commit is contained in:
Alex Lam S.L
2020-10-12 05:43:26 +01:00
committed by GitHub
parent 74ff6ce261
commit 9b7a13c8c7
2 changed files with 35 additions and 6 deletions

View File

@@ -68,8 +68,8 @@ SymbolDef.prototype = {
if (this.global && cache && cache.has(this.name)) { if (this.global && cache && cache.has(this.name)) {
this.mangled_name = cache.get(this.name); this.mangled_name = cache.get(this.name);
} else if (!this.mangled_name && !this.unmangleable(options)) { } else if (!this.mangled_name && !this.unmangleable(options)) {
var def; var def = this.redefined();
if (def = this.redefined()) { if (def) {
this.mangled_name = def.mangled_name || def.name; this.mangled_name = def.mangled_name || def.name;
} else { } else {
this.mangled_name = next_mangled_name(this.scope, options, this); this.mangled_name = next_mangled_name(this.scope, options, this);
@@ -84,8 +84,8 @@ SymbolDef.prototype = {
if (!scope) return; if (!scope) return;
var def = scope.variables.get(this.name); var def = scope.variables.get(this.name);
if (!def && scope instanceof AST_Toplevel) def = scope.globals.get(this.name); if (!def && scope instanceof AST_Toplevel) def = scope.globals.get(this.name);
if (def === this) return; if (!def || def === this) return;
return def; return def.redefined() || def;
}, },
unmangleable: function(options) { unmangleable: function(options) {
return this.global && !options.toplevel return this.global && !options.toplevel
@@ -274,8 +274,8 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options) {
var old_def = node.thedef; var old_def = node.thedef;
var new_def = scope.find_variable(name); var new_def = scope.find_variable(name);
if (new_def) { if (new_def) {
var redef; var redef = new_def.redefined();
while (redef = new_def.redefined()) new_def = redef; if (redef) new_def = redef;
} else { } else {
new_def = self.globals.get(name); new_def = self.globals.get(name);
} }

View File

@@ -747,3 +747,32 @@ issue_4193: {
} }
expect_stdout: true expect_stdout: true
} }
issue_4195: {
mangle = {
ie8: true,
}
input: {
console.log(function f(a) {
(function a() {
{
const b = f, a = 0;
b;
}
})();
a && f;
}());
}
expect: {
console.log(function f(o) {
(function o() {
{
const n = f, o = 0;
n;
}
})();
o && f;
}());
}
expect_stdout: "undefined"
}