improve `unsafe_Func` (#2171)
authorAlex Lam S.L <alexlamsl@gmail.com>
Tue, 27 Jun 2017 15:53:42 +0000 (23:53 +0800)
committerGitHub <noreply@github.com>
Tue, 27 Jun 2017 15:53:42 +0000 (23:53 +0800)
- minimise disturbance to `compute_char_frequency()`
- remove extraneous quotation marks

lib/compress.js
test/compress/functions.js

index 0f00d09..352be28 100644 (file)
@@ -3120,7 +3120,7 @@ merge(Compressor.prototype, {
                 //   https://github.com/mishoo/UglifyJS2/issues/203
                 // if the code argument is a constant, then we can minify it.
                 try {
-                    var code = "NaN(function(" + self.args.slice(0, -1).map(function(arg) {
+                    var code = "n(function(" + self.args.slice(0, -1).map(function(arg) {
                         return arg.value;
                     }).join(",") + "){" + self.args[self.args.length - 1].value + "})";
                     var ast = parse(code);
@@ -3140,18 +3140,18 @@ merge(Compressor.prototype, {
                             return true;
                         }
                     }));
-                    var args = fun.argnames.map(function(arg, i) {
-                        return make_node(AST_String, self.args[i], {
-                            value: arg.print_to_string()
-                        });
-                    });
                     var code = OutputStream();
                     AST_BlockStatement.prototype._codegen.call(fun, fun, code);
-                    code = code.toString().replace(/^\{|\}$/g, "");
-                    args.push(make_node(AST_String, self.args[self.args.length - 1], {
-                        value: code
-                    }));
-                    self.args = args;
+                    self.args = [
+                        make_node(AST_String, self, {
+                            value: fun.argnames.map(function(arg) {
+                                return arg.print_to_string();
+                            }).join(",")
+                        }),
+                        make_node(AST_String, self.args[self.args.length - 1], {
+                            value: code.get().replace(/^\{|\}$/g, "")
+                        })
+                    ];
                     return self;
                 } catch (ex) {
                     if (ex instanceof JS_Parse_Error) {
index b5def8e..c8efc12 100644 (file)
@@ -265,7 +265,7 @@ issue_203: {
     }
     expect: {
         var m = {};
-        var fn = Function("n", "o", "o.exports=42");
+        var fn = Function("n,o", "o.exports=42");
         fn(null, m, m.exports);
         console.log(m.exports);
     }