@@ -214,7 +214,13 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options) {
|
|||||||
function redefine(node, scope) {
|
function redefine(node, scope) {
|
||||||
var name = node.name;
|
var name = node.name;
|
||||||
var old_def = node.thedef;
|
var old_def = node.thedef;
|
||||||
var new_def = scope.find_variable(name) || self.globals.get(name) || scope.def_variable(node);
|
var new_def = scope.find_variable(name);
|
||||||
|
if (new_def) {
|
||||||
|
var redef;
|
||||||
|
while (redef = new_def.redefined()) new_def = redef;
|
||||||
|
} else {
|
||||||
|
new_def = self.globals.get(name) || scope.def_variable(node);
|
||||||
|
}
|
||||||
old_def.orig.concat(old_def.references).forEach(function(node) {
|
old_def.orig.concat(old_def.references).forEach(function(node) {
|
||||||
node.thedef = new_def;
|
node.thedef = new_def;
|
||||||
node.reference(options);
|
node.reference(options);
|
||||||
|
|||||||
@@ -1959,3 +1959,383 @@ issue_3493_ie8: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "PASS"
|
expect_stdout: "PASS"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_3523: {
|
||||||
|
mangle = {
|
||||||
|
ie8: false,
|
||||||
|
toplevel: false,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = 0, b, c = "FAIL";
|
||||||
|
(function() {
|
||||||
|
var f, g, h, i, j, k, l, m, n, o, p, q, r, s;
|
||||||
|
})();
|
||||||
|
try {
|
||||||
|
throw 0;
|
||||||
|
} catch (t) {
|
||||||
|
(function() {
|
||||||
|
(function t() {
|
||||||
|
c = "PASS";
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
(function e() {
|
||||||
|
try {} catch (t) {}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = 0, b, c = "FAIL";
|
||||||
|
(function() {
|
||||||
|
var c, n, t, o, a, r, f, i, u, h, l, v, y, A;
|
||||||
|
})();
|
||||||
|
try {
|
||||||
|
throw 0;
|
||||||
|
} catch (n) {
|
||||||
|
(function() {
|
||||||
|
(function n() {
|
||||||
|
c = "PASS";
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
(function c() {
|
||||||
|
try {} catch (c) {}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
}
|
||||||
|
|
||||||
|
issue_3523_ie8: {
|
||||||
|
mangle = {
|
||||||
|
ie8: true,
|
||||||
|
toplevel: false,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = 0, b, c = "FAIL";
|
||||||
|
(function() {
|
||||||
|
var f, g, h, i, j, k, l, m, n, o, p, q, r, s;
|
||||||
|
})();
|
||||||
|
try {
|
||||||
|
throw 0;
|
||||||
|
} catch (t) {
|
||||||
|
(function() {
|
||||||
|
(function t() {
|
||||||
|
c = "PASS";
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
(function e() {
|
||||||
|
try {} catch (t) {}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = 0, b, c = "FAIL";
|
||||||
|
(function() {
|
||||||
|
var c, t, n, o, a, r, f, i, u, h, e, l, v, y;
|
||||||
|
})();
|
||||||
|
try {
|
||||||
|
throw 0;
|
||||||
|
} catch (t) {
|
||||||
|
(function() {
|
||||||
|
(function t() {
|
||||||
|
c = "PASS";
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
(function e() {
|
||||||
|
try {} catch (t) {}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
}
|
||||||
|
|
||||||
|
issue_3523_toplevel: {
|
||||||
|
mangle = {
|
||||||
|
ie8: false,
|
||||||
|
toplevel: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = 0, b, c = "FAIL";
|
||||||
|
(function() {
|
||||||
|
var f, g, h, i, j, k, l, m, n, o, p, q, r, s;
|
||||||
|
})();
|
||||||
|
try {
|
||||||
|
throw 0;
|
||||||
|
} catch (t) {
|
||||||
|
(function() {
|
||||||
|
(function t() {
|
||||||
|
c = "PASS";
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
(function e() {
|
||||||
|
try {} catch (t) {}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var c = 0, n, t = "FAIL";
|
||||||
|
(function() {
|
||||||
|
var c, n, t, o, r, a, f, i, u, h, l, v, y, A;
|
||||||
|
})();
|
||||||
|
try {
|
||||||
|
throw 0;
|
||||||
|
} catch (c) {
|
||||||
|
(function() {
|
||||||
|
(function c() {
|
||||||
|
t = "PASS";
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
(function c() {
|
||||||
|
try {} catch (c) {}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
console.log(t);
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
}
|
||||||
|
|
||||||
|
issue_3523_ie8_toplevel: {
|
||||||
|
mangle = {
|
||||||
|
ie8: true,
|
||||||
|
toplevel: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = 0, b, c = "FAIL";
|
||||||
|
(function() {
|
||||||
|
var f, g, h, i, j, k, l, m, n, o, p, q, r, s;
|
||||||
|
})();
|
||||||
|
try {
|
||||||
|
throw 0;
|
||||||
|
} catch (t) {
|
||||||
|
(function() {
|
||||||
|
(function t() {
|
||||||
|
c = "PASS";
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
(function e() {
|
||||||
|
try {} catch (t) {}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var c = 0, n, t = "FAIL";
|
||||||
|
(function() {
|
||||||
|
var c, n, t, o, r, a, f, i, u, h, l, v, y, A;
|
||||||
|
})();
|
||||||
|
try {
|
||||||
|
throw 0;
|
||||||
|
} catch (o) {
|
||||||
|
(function() {
|
||||||
|
(function o() {
|
||||||
|
t = "PASS";
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
(function r() {
|
||||||
|
try {} catch (o) {}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
console.log(t);
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
}
|
||||||
|
|
||||||
|
issue_3523_rename: {
|
||||||
|
rename = true
|
||||||
|
mangle = {
|
||||||
|
ie8: false,
|
||||||
|
toplevel: false,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = 0, b, c = "FAIL";
|
||||||
|
(function() {
|
||||||
|
var d, e, f, g, h, i, j, k, l, m, o, p, q, r;
|
||||||
|
})();
|
||||||
|
try {
|
||||||
|
throw 0;
|
||||||
|
} catch (e) {
|
||||||
|
(function() {
|
||||||
|
(function e() {
|
||||||
|
c = "PASS";
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
(function d() {
|
||||||
|
try {
|
||||||
|
} catch (e) {
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = 0, b, c = "FAIL";
|
||||||
|
(function() {
|
||||||
|
var c, n, t, o, a, r, f, i, u, h, l, v, y, A;
|
||||||
|
})();
|
||||||
|
try {
|
||||||
|
throw 0;
|
||||||
|
} catch (n) {
|
||||||
|
(function() {
|
||||||
|
(function n() {
|
||||||
|
c = "PASS";
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
(function c() {
|
||||||
|
try {} catch (c) {}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
}
|
||||||
|
|
||||||
|
issue_3523_rename_ie8: {
|
||||||
|
rename = true
|
||||||
|
mangle = {
|
||||||
|
ie8: true,
|
||||||
|
toplevel: false,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = 0, b, c = "FAIL";
|
||||||
|
(function() {
|
||||||
|
var d, e, f, g, h, i, j, k, l, m, o, p, q, r;
|
||||||
|
})();
|
||||||
|
try {
|
||||||
|
throw 0;
|
||||||
|
} catch (e) {
|
||||||
|
(function() {
|
||||||
|
(function e() {
|
||||||
|
c = "PASS";
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
(function d() {
|
||||||
|
try {
|
||||||
|
} catch (e) {
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = 0, b, c = "FAIL";
|
||||||
|
(function() {
|
||||||
|
var c, n, t, o, a, r, f, i, u, e, h, l, v, y;
|
||||||
|
})();
|
||||||
|
try {
|
||||||
|
throw 0;
|
||||||
|
} catch (e) {
|
||||||
|
(function() {
|
||||||
|
(function n() {
|
||||||
|
c = "PASS";
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
(function d() {
|
||||||
|
try {} catch (e) {}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
}
|
||||||
|
|
||||||
|
issue_3523_rename_toplevel: {
|
||||||
|
rename = true
|
||||||
|
mangle = {
|
||||||
|
ie8: false,
|
||||||
|
toplevel: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = 0, b, c = "FAIL";
|
||||||
|
(function() {
|
||||||
|
var d, e, f, g, h, i, j, k, l, m, o, p, q, r;
|
||||||
|
})();
|
||||||
|
try {
|
||||||
|
throw 0;
|
||||||
|
} catch (e) {
|
||||||
|
(function() {
|
||||||
|
(function e() {
|
||||||
|
c = "PASS";
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
(function d() {
|
||||||
|
try {
|
||||||
|
} catch (e) {
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var c = 0, n, t = "FAIL";
|
||||||
|
(function() {
|
||||||
|
var c, n, t, o, r, a, f, i, u, h, l, v, y, A;
|
||||||
|
})();
|
||||||
|
try {
|
||||||
|
throw 0;
|
||||||
|
} catch (c) {
|
||||||
|
(function() {
|
||||||
|
(function c() {
|
||||||
|
t = "PASS";
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
(function c() {
|
||||||
|
try {} catch (c) {}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
console.log(t);
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
}
|
||||||
|
|
||||||
|
issue_3523_rename_ie8_toplevel: {
|
||||||
|
rename = true
|
||||||
|
mangle = {
|
||||||
|
ie8: true,
|
||||||
|
toplevel: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = 0, b, c = "FAIL";
|
||||||
|
(function() {
|
||||||
|
var d, e, f, g, h, i, j, k, l, m, o, p, q, r;
|
||||||
|
})();
|
||||||
|
try {
|
||||||
|
throw 0;
|
||||||
|
} catch (e) {
|
||||||
|
(function() {
|
||||||
|
(function e() {
|
||||||
|
c = "PASS";
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
(function d() {
|
||||||
|
try {
|
||||||
|
} catch (e) {
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
console.log(c);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var c = 0, n, t = "FAIL";
|
||||||
|
(function() {
|
||||||
|
var c, n, t, o, r, a, f, i, u, h, l, v, y, A;
|
||||||
|
})();
|
||||||
|
try {
|
||||||
|
throw 0;
|
||||||
|
} catch (o) {
|
||||||
|
(function() {
|
||||||
|
(function o() {
|
||||||
|
t = "PASS";
|
||||||
|
})();
|
||||||
|
})();
|
||||||
|
(function r() {
|
||||||
|
try {} catch (o) {}
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
console.log(t);
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user