diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2017-06-16 03:21:38 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-16 03:21:38 +0800 |
commit | 33405bb24b9a5933badf146a9576953b8b456aad (patch) | |
tree | 14e2b0e79a3f27474b67945ca971e7978b1431a5 /lib/compress.js | |
parent | 57dc4fb32f04b167581f247d5a3d59986c0c2724 (diff) | |
download | tracifyjs-33405bb24b9a5933badf146a9576953b8b456aad.tar.gz tracifyjs-33405bb24b9a5933badf146a9576953b8b456aad.zip |
enforce `inline` scope restriction (#2106)
fixes #2105
Diffstat (limited to 'lib/compress.js')
-rw-r--r-- | lib/compress.js | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/lib/compress.js b/lib/compress.js index f5989341..e14e63ae 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -2944,18 +2944,18 @@ merge(Compressor.prototype, { OPT(AST_Call, function(self, compressor){ var exp = self.expression; - if (compressor.option("reduce_vars") && exp instanceof AST_SymbolRef) { - var fixed = exp.fixed_value(); - if (fixed instanceof AST_Function) exp = fixed; - } + var fn = exp; if (compressor.option("unused") - && exp instanceof AST_Function - && !exp.uses_arguments - && !exp.uses_eval) { + && (fn instanceof AST_Function + || compressor.option("reduce_vars") + && fn instanceof AST_SymbolRef + && (fn = fn.fixed_value()) instanceof AST_Function) + && !fn.uses_arguments + && !fn.uses_eval) { var pos = 0, last = 0; for (var i = 0, len = self.args.length; i < len; i++) { - var trim = i >= exp.argnames.length; - if (trim || exp.argnames[i].__unused) { + var trim = i >= fn.argnames.length; + if (trim || fn.argnames[i].__unused) { var node = self.args[i].drop_side_effect_free(compressor); if (node) { self.args[pos++] = node; @@ -3156,15 +3156,15 @@ merge(Compressor.prototype, { } } } - if (exp instanceof AST_Function) { - var stat = exp.body[0]; - if (compressor.option("inline") && stat instanceof AST_Return) { - var value = stat && stat.value; - if (!value || value.is_constant_expression()) { - var args = self.args.concat(value || make_node(AST_Undefined, self)); - return make_sequence(self, args).transform(compressor); - } + var stat = fn instanceof AST_Function && fn.body[0]; + if (compressor.option("inline") && stat instanceof AST_Return) { + var value = stat.value; + if (!value || value.is_constant_expression()) { + var args = self.args.concat(value || make_node(AST_Undefined, self)); + return make_sequence(self, args).transform(compressor); } + } + if (exp instanceof AST_Function) { if (compressor.option("inline") && !exp.name && exp.body.length == 1 |