diff options
author | alexlamsl <alexlamsl@gmail.com> | 2017-02-18 19:22:24 +0800 |
---|---|---|
committer | alexlamsl <alexlamsl@gmail.com> | 2017-02-21 13:29:58 +0800 |
commit | 974247c8c0e57901ef776e86784c8c9a1b87b5de (patch) | |
tree | 308ab620fca91f6eb2389674ed048fa43cb8b9b0 | |
parent | a0f4fd390a0a1af80964aab9754bf5358db575e2 (diff) | |
download | tracifyjs-974247c8c0e57901ef776e86784c8c9a1b87b5de.tar.gz tracifyjs-974247c8c0e57901ef776e86784c8c9a1b87b5de.zip |
evaluate AST_SymbolRef as parameter
fix invalid boolean conversion now exposed in `make_node_from_constant()`
closes #1477
-rw-r--r-- | lib/compress.js | 15 | ||||
-rw-r--r-- | test/compress/evaluate.js | 47 |
2 files changed, 56 insertions, 6 deletions
diff --git a/lib/compress.js b/lib/compress.js index 72afe92a..a60ba1a1 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -234,7 +234,7 @@ merge(Compressor.prototype, { case "string": return make_node(AST_String, orig, { value: val - }).optimize(compressor); + }); case "number": if (isNaN(val)) { return make_node(AST_NaN, orig); @@ -247,17 +247,17 @@ merge(Compressor.prototype, { }); } - return make_node(AST_Number, orig, { value: val }).optimize(compressor); + return make_node(AST_Number, orig, { value: val }); case "boolean": - return make_node(val ? AST_True : AST_False, orig).optimize(compressor); + return make_node(val ? AST_True : AST_False, orig).transform(compressor); case "undefined": - return make_node(AST_Undefined, orig).optimize(compressor); + return make_node(AST_Undefined, orig).transform(compressor); default: if (val === null) { - return make_node(AST_Null, orig, { value: null }).optimize(compressor); + return make_node(AST_Null, orig, { value: null }); } if (val instanceof RegExp) { - return make_node(AST_RegExp, orig, { value: val }).optimize(compressor); + return make_node(AST_RegExp, orig, { value: val }); } throw new Error(string_template("Can't handle constant of type: {type}", { type: typeof val @@ -2179,6 +2179,9 @@ merge(Compressor.prototype, { }); OPT(AST_Call, function(self, compressor){ + self.args = self.args.map(function(arg) { + return arg.evaluate(compressor)[0]; + }); if (compressor.option("unsafe")) { var exp = self.expression; if (exp instanceof AST_SymbolRef && exp.undeclared()) { diff --git a/test/compress/evaluate.js b/test/compress/evaluate.js index 0ff157dc..f88bc538 100644 --- a/test/compress/evaluate.js +++ b/test/compress/evaluate.js @@ -598,3 +598,50 @@ unsafe_prototype_function: { var h = "" + ({toString: 0}); } } + +call_args: { + options = { + evaluate: true, + } + input: { + const a = 1; + console.log(a); + +function(a) { + return a; + }(a); + } + expect: { + const a = 1; + console.log(1); + +function(a) { + return a; + }(1); + } +} + +in_boolean_context: { + options = { + booleans: true, + evaluate: true, + } + input: { + !42; + !"foo"; + ![1, 2]; + !/foo/; + !b(42); + !b("foo"); + !b([1, 2]); + !b(/foo/); + } + expect: { + !1; + !1; + !1; + !1; + !b(42); + !b("foo"); + !b([1, 2]); + !b(/foo/); + } +} |