Add a "keep_fnames" option to the compressor to retain function expression names
authorRichard van Velzen <rvanvelzen1@gmail.com>
Sun, 4 Jan 2015 19:14:38 +0000 (20:14 +0100)
committerRichard van Velzen <rvanvelzen1@gmail.com>
Sun, 4 Jan 2015 19:14:38 +0000 (20:14 +0100)
See #552. This is useful for stack traces.

lib/compress.js
test/compress/drop-unused.js

index 2c95099..345d8ad 100644 (file)
@@ -62,6 +62,7 @@ function Compressor(options, false_by_default) {
         unused        : !false_by_default,
         hoist_funs    : !false_by_default,
         keep_fargs    : false,
+        keep_fnames   : false,
         hoist_vars    : false,
         if_return     : !false_by_default,
         join_vars     : !false_by_default,
@@ -1666,7 +1667,7 @@ merge(Compressor.prototype, {
 
     OPT(AST_Function, function(self, compressor){
         self = AST_Lambda.prototype.optimize.call(self, compressor);
-        if (compressor.option("unused")) {
+        if (compressor.option("unused") && !compressor.option("keep_fnames")) {
             if (self.name && self.name.unreferenced()) {
                 self.name = null;
             }
index 89bf008..de4b222 100644 (file)
@@ -163,3 +163,17 @@ used_var_in_catch: {
         }
     }
 }
+
+keep_fnames: {
+    options = { unused: true, keep_fnames: true };
+    input: {
+        function foo() {
+            return function bar(baz) {};
+        }
+    }
+    expect: {
+        function foo() {
+            return function bar() {};
+        }
+    }
+}
\ No newline at end of file