diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2018-01-11 21:18:08 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-11 21:18:08 +0800 |
commit | 23ec484806e1ed1cc7c2580abbd3ff050367b358 (patch) | |
tree | 9a6dbee6adc1b0c13f8d0ef0e44511027cfbe5cf /lib/compress.js | |
parent | f1e1bb419ab642763c43dec95e07165f477a43be (diff) | |
download | tracifyjs-23ec484806e1ed1cc7c2580abbd3ff050367b358.tar.gz tracifyjs-23ec484806e1ed1cc7c2580abbd3ff050367b358.zip |
fix corner case in #2763 (#2766)
Diffstat (limited to 'lib/compress.js')
-rw-r--r-- | lib/compress.js | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/lib/compress.js b/lib/compress.js index b093832c..86873176 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -1698,6 +1698,8 @@ merge(Compressor.prototype, { function join_object_assignments(defn, body) { if (!(defn instanceof AST_Definitions)) return; + var def = defn.definitions[defn.definitions.length - 1]; + if (!(def.value instanceof AST_Object)) return; var exprs; if (body instanceof AST_Assign) { exprs = [ body ]; @@ -1705,17 +1707,14 @@ merge(Compressor.prototype, { exprs = body.expressions.slice(); } if (!exprs) return; + var trimmed = false; do { var node = exprs[0]; if (!(node instanceof AST_Assign)) break; if (!(node.left instanceof AST_PropAccess)) break; var sym = node.left.expression; if (!(sym instanceof AST_SymbolRef)) break; - var def = find_if(function(def) { - return def.name.name == sym.name - && def.value instanceof AST_Object; - }, defn.definitions); - if (!def) break; + if (def.name.name != sym.name) break; if (!node.right.is_constant_expression(scope)) break; var prop = node.left.property; if (prop instanceof AST_Node) { @@ -1727,8 +1726,9 @@ merge(Compressor.prototype, { value: node.right })); exprs.shift(); + trimmed = true; } while (exprs.length); - return exprs; + return trimmed && exprs; } function join_consecutive_vars(statements, compressor) { @@ -1766,14 +1766,11 @@ merge(Compressor.prototype, { } else if (stat instanceof AST_SimpleStatement) { var exprs = join_object_assignments(prev, stat.body); if (exprs) { - if (exprs.length > 0) { - stat.body = make_sequence(stat.body, exprs); - statements[++j] = stat; - } CHANGED = true; - } else { - statements[++j] = stat; + if (!exprs.length) continue; + stat.body = make_sequence(stat.body, exprs); } + statements[++j] = stat; } else { statements[++j] = stat; } |