Support keep_fnames in compressor, and --keep-fnames. #552
authorMihai Bazon <mihai@bazon.net>
Mon, 5 Jan 2015 09:03:13 +0000 (11:03 +0200)
committerMihai Bazon <mihai@bazon.net>
Mon, 5 Jan 2015 09:03:13 +0000 (11:03 +0200)
Passing `--keep-fnames` will enable it both for compressor/mangler, so that
function names will not be dropped (when unused) nor mangled.

bin/uglifyjs
lib/compress.js

index a177cb6..44afd2f 100755 (executable)
@@ -65,6 +65,7 @@ You need to pass an argument to this option to specify the name that your module
     .describe("V", "Print version number and exit.")
     .describe("noerr", "Don't throw an error for unknown options in -c, -b or -m.")
     .describe("bare-returns", "Allow return outside of functions.  Useful when minifying CommonJS modules.")
+    .describe("keep-fnames", "Do not mangle/drop function names.  Useful for code relying on Function.prototype.name.")
 
     .alias("p", "prefix")
     .alias("o", "output")
@@ -160,6 +161,11 @@ if (ARGS.screw_ie8) {
     OUTPUT_OPTIONS.screw_ie8 = true;
 }
 
+if (ARGS.keep_fnames) {
+    if (COMPRESS) COMPRESS.keep_fnames = true;
+    if (MANGLE) MANGLE.keep_fnames = true;
+}
+
 if (BEAUTIFY)
     UglifyJS.merge(OUTPUT_OPTIONS, BEAUTIFY);
 
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;
             }