aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2019-10-15 07:27:02 +0800
committerGitHub <noreply@github.com>2019-10-15 07:27:02 +0800
commitd3d1d11926de43fc1ec74ae3a4d24a884d80d91f (patch)
tree6db0bdae1d0b3805a75d7f69533e5f3ca29fe8c8
parent736019b767548268044e665bd6cde4b5e34c0bd3 (diff)
downloadtracifyjs-d3d1d11926de43fc1ec74ae3a4d24a884d80d91f.tar.gz
tracifyjs-d3d1d11926de43fc1ec74ae3a4d24a884d80d91f.zip
fix corner case in `ie8` & `rename` (#3474)
fixes #3473
-rw-r--r--lib/scope.js6
-rw-r--r--test/compress/collapse_vars.js2
-rw-r--r--test/compress/functions.js2
-rw-r--r--test/compress/ie8.js108
-rw-r--r--test/exports.js1
-rw-r--r--test/mocha/sourcemaps.js4
6 files changed, 118 insertions, 5 deletions
diff --git a/lib/scope.js b/lib/scope.js
index 83df3fde..1b570515 100644
--- a/lib/scope.js
+++ b/lib/scope.js
@@ -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) {
diff --git a/test/compress/collapse_vars.js b/test/compress/collapse_vars.js
index 090f3cf8..2381333a 100644
--- a/test/compress/collapse_vars.js
+++ b/test/compress/collapse_vars.js
@@ -4388,7 +4388,7 @@ replace_all_var: {
}
replace_all_var_scope: {
- rename = true;
+ rename = true
options = {
collapse_vars: true,
unused: true,
diff --git a/test/compress/functions.js b/test/compress/functions.js
index f01a02e8..92a0f99c 100644
--- a/test/compress/functions.js
+++ b/test/compress/functions.js
@@ -1150,7 +1150,7 @@ issue_2620_3: {
}
issue_2620_4: {
- rename = true,
+ rename = true
options = {
dead_code: true,
evaluate: true,
diff --git a/test/compress/ie8.js b/test/compress/ie8.js
index 94b83de6..9fc2becd 100644
--- a/test/compress/ie8.js
+++ b/test/compress/ie8.js
@@ -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"
+}
diff --git a/test/exports.js b/test/exports.js
index 65a7362f..cb76d7e0 100644
--- a/test/exports.js
+++ b/test/exports.js
@@ -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;
diff --git a/test/mocha/sourcemaps.js b/test/mocha/sourcemaps.js
index aff2b009..8457c865 100644
--- a/test/mocha/sourcemaps.js
+++ b/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");
@@ -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, {