aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/scope.js8
-rw-r--r--test/compress/let.js57
2 files changed, 62 insertions, 3 deletions
diff --git a/lib/scope.js b/lib/scope.js
index 689100cf..a241cc59 100644
--- a/lib/scope.js
+++ b/lib/scope.js
@@ -311,8 +311,9 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options) {
}
if (node instanceof AST_SymbolLambda) {
var def = node.thedef;
- redefine(node, node.scope.parent_scope.resolve());
- if (typeof node.thedef.init !== "undefined") {
+ if (!redefine(node, node.scope.parent_scope.resolve())) {
+ delete def.defun;
+ } else if (typeof node.thedef.init !== "undefined") {
node.thedef.init = false;
} else if (def.init) {
node.thedef.init = def.init;
@@ -332,7 +333,7 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options) {
var old_def = node.thedef;
if (!all(old_def.orig, function(sym) {
return !(sym instanceof AST_SymbolConst || sym instanceof AST_SymbolLet);
- })) return;
+ })) return false;
var new_def = scope.find_variable(name);
if (new_def) {
var redef = new_def.redefined();
@@ -352,6 +353,7 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options) {
node.reference(options);
});
if (new_def.undeclared) self.variables.set(name, new_def);
+ return true;
}
});
diff --git a/test/compress/let.js b/test/compress/let.js
index f52dcb50..7a9db169 100644
--- a/test/compress/let.js
+++ b/test/compress/let.js
@@ -1282,3 +1282,60 @@ issue_4438: {
expect_stdout: "PASS"
node_version: ">=4"
}
+
+issue_4531_1: {
+ mangle = {
+ ie8: true,
+ toplevel: true,
+ }
+ input: {
+ "use strict";
+ var a;
+ console.log(function a() {
+ let a;
+ var b;
+ }());
+ }
+ expect: {
+ "use strict";
+ var o;
+ console.log(function o() {
+ let o;
+ var t;
+ }());
+ }
+ expect_stdout: "undefined"
+ node_version: ">=4"
+}
+
+issue_4531_2: {
+ options = {
+ evaluate: true,
+ ie8: true,
+ toplevel: true,
+ }
+ mangle = {
+ ie8: true,
+ toplevel: true,
+ }
+ input: {
+ "use strict";
+ var a = console;
+ console.log(typeof a, function a() {
+ let { [console]: a } = 0 && a;
+ var b = console;
+ while (!b);
+ }());
+ }
+ expect: {
+ "use strict";
+ var o = console;
+ console.log(typeof o, function o() {
+ let { [console]: o } = 0;
+ var e = console;
+ while (!e);
+ }());
+ }
+ expect_stdout: "object undefined"
+ node_version: ">=6"
+}