Fix mangle with option keep_fnames=true for Safari.
authorkzc <zaxxon2011@gmail.com>
Wed, 13 Jul 2016 15:44:28 +0000 (11:44 -0400)
committerRichard van Velzen <rvanvelzen@experty.com>
Fri, 15 Jul 2016 11:18:14 +0000 (13:18 +0200)
Fixes: #1202

lib/scope.js
test/compress/issue-1202.js [new file with mode: 0644]

index 7ae8707..606a5a2 100644 (file)
@@ -314,9 +314,13 @@ AST_Function.DEFMETHOD("next_mangled", function(options, def){
     // a function expression's argument cannot shadow the function expression's name
 
     var tricky_def = def.orig[0] instanceof AST_SymbolFunarg && this.name && this.name.definition();
+
+    // the function's mangled_name is null when keep_fnames is true
+    var tricky_name = tricky_def ? tricky_def.mangled_name || tricky_def.name : null;
+
     while (true) {
         var name = AST_Lambda.prototype.next_mangled.call(this, options, def);
-        if (!(tricky_def && tricky_def.mangled_name == name))
+        if (!tricky_name || tricky_name != name)
             return name;
     }
 });
diff --git a/test/compress/issue-1202.js b/test/compress/issue-1202.js
new file mode 100644 (file)
index 0000000..136515f
--- /dev/null
@@ -0,0 +1,52 @@
+mangle_keep_fnames_false: {
+    options = {
+        keep_fnames : true,
+        keep_fargs  : true,
+    }
+    mangle = {
+        keep_fnames : false,
+    }
+    input: {
+        "use strict";
+        function total() {
+            return function n(a, b, c) {
+                return a + b + c;
+            };
+        }
+    }
+    expect: {
+        "use strict";
+        function total() {
+            return function t(n, r, u) {
+                return n + r + u;
+            };
+        }
+    }
+}
+
+mangle_keep_fnames_true: {
+    options = {
+        keep_fnames : true,
+        keep_fargs  : true,
+    }
+    mangle = {
+        keep_fnames : true,
+    }
+    input: {
+        "use strict";
+        function total() {
+            return function n(a, b, c) {
+                return a + b + c;
+            };
+        }
+    }
+    expect: {
+        "use strict";
+        function total() {
+            return function n(t, r, u) {
+                return t + r + u;
+            };
+        }
+    }
+}
+