Skip to content

Commit

Permalink
fix corner case in ie8 & rename (#3474)
Browse files Browse the repository at this point in the history
fixes #3473
  • Loading branch information
alexlamsl committed Oct 14, 2019
1 parent 736019b commit d3d1d11
Show file tree
Hide file tree
Showing 6 changed files with 118 additions and 5 deletions.
6 changes: 5 additions & 1 deletion lib/scope.js
Expand Up @@ -192,7 +192,11 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options) {
// pass 3: fix up any scoping issue with IE8
if (options.ie8) self.walk(new TreeWalker(function(node) {
if (node instanceof AST_SymbolCatch) {
redefine(node, node.thedef.defun);
var scope = node.thedef.defun;
if (scope.name instanceof AST_SymbolLambda && scope.name.name == node.name) {
scope = scope.parent_scope;
}
redefine(node, scope);
return true;
}
if (node instanceof AST_SymbolLambda) {
Expand Down
2 changes: 1 addition & 1 deletion test/compress/collapse_vars.js
Expand Up @@ -4388,7 +4388,7 @@ replace_all_var: {
}

replace_all_var_scope: {
rename = true;
rename = true
options = {
collapse_vars: true,
unused: true,
Expand Down
2 changes: 1 addition & 1 deletion test/compress/functions.js
Expand Up @@ -1150,7 +1150,7 @@ issue_2620_3: {
}

issue_2620_4: {
rename = true,
rename = true
options = {
dead_code: true,
evaluate: true,
Expand Down
108 changes: 108 additions & 0 deletions test/compress/ie8.js
Expand Up @@ -1081,3 +1081,111 @@ issue_3471_ie8: {
}
expect_stdout: true
}

issue_3473: {
rename = true
mangle = {
ie8: false,
toplevel: false,
}
input: {
var d = 42, a = 100, b = 10, c = 0;
(function b() {
try {
c++;
} catch (b) {}
})();
console.log(a, b, c);
}
expect: {
var d = 42, a = 100, b = 10, c = 0;
(function a() {
try {
c++;
} catch (a) {}
})();
console.log(a, b, c);
}
expect_stdout: "100 10 1"
}

issue_3473_ie8: {
rename = true
mangle = {
ie8: true,
toplevel: false,
}
input: {
var d = 42, a = 100, b = 10, c = 0;
(function b() {
try {
c++;
} catch (b) {}
})();
console.log(a, b, c);
}
expect: {
var d = 42, a = 100, b = 10, c = 0;
(function b() {
try {
c++;
} catch (b) {}
})();
console.log(a, b, c);
}
expect_stdout: "100 10 1"
}

issue_3473_toplevel: {
rename = true
mangle = {
ie8: false,
toplevel: true,
}
input: {
var d = 42, a = 100, b = 10, c = 0;
(function b() {
try {
c++;
} catch (b) {}
})();
console.log(a, b, c);
}
expect: {
var c = 42, o = 100, n = 10, t = 0;
(function c() {
try {
t++;
} catch (c) {}
})();
console.log(o, n, t);
}
expect_stdout: "100 10 1"
}

issue_3473_ie8_toplevel: {
rename = true
mangle = {
ie8: true,
toplevel: true,
}
input: {
var d = 42, a = 100, b = 10, c = 0;
(function b() {
try {
c++;
} catch (b) {}
})();
console.log(a, b, c);
}
expect: {
var c = 42, o = 100, n = 10, t = 0;
(function n() {
try {
t++;
} catch (n) {}
})();
console.log(o, n, t);
}
expect_stdout: "100 10 1"
}
1 change: 1 addition & 0 deletions test/exports.js
Expand Up @@ -8,6 +8,7 @@ exports["parse"] = parse;
exports["push_uniq"] = push_uniq;
exports["reserve_quoted_keys"] = reserve_quoted_keys;
exports["string_template"] = string_template;
exports["to_ascii"] = to_ascii;
exports["tokenizer"] = tokenizer;
exports["TreeTransformer"] = TreeTransformer;
exports["TreeWalker"] = TreeWalker;
4 changes: 2 additions & 2 deletions test/mocha/sourcemaps.js
@@ -1,7 +1,7 @@
var assert = require("assert");
var readFileSync = require("fs").readFileSync;
var SourceMapConsumer = require("source-map").SourceMapConsumer;
var UglifyJS = require("../..");
var UglifyJS = require("../node");

function read(path) {
return readFileSync(path, "utf8");
Expand Down Expand Up @@ -244,7 +244,7 @@ describe("sourcemaps", function() {
assert.strictEqual(map.sourcesContent.length, 1);
assert.strictEqual(map.sourcesContent[0], code);
var encoded = result.code.slice(result.code.lastIndexOf(",") + 1);
map = JSON.parse(new Buffer(encoded, "base64").toString());
map = JSON.parse(UglifyJS.to_ascii(encoded));
assert.strictEqual(map.sourcesContent.length, 1);
assert.strictEqual(map.sourcesContent[0], code);
result = UglifyJS.minify(result.code, {
Expand Down

0 comments on commit d3d1d11

Please sign in to comment.