From: Alex Lam S.L Date: Wed, 3 Jan 2018 19:18:28 +0000 (+0800) Subject: apply `collapse_vars` to loop conditions (#2712) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=c598a12af956a939587059f0f4753a0631b5b372;p=UglifyJS.git apply `collapse_vars` to loop conditions (#2712) --- diff --git a/lib/compress.js b/lib/compress.js index fd59fb32..300bc61d 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -1171,10 +1171,14 @@ merge(Compressor.prototype, { extract_candidates(expr.alternative); } else if (expr instanceof AST_Definitions) { expr.definitions.forEach(extract_candidates); + } else if (expr instanceof AST_DWLoop) { + extract_candidates(expr.condition); } else if (expr instanceof AST_Exit) { if (expr.value) extract_candidates(expr.value); } else if (expr instanceof AST_For) { if (expr.init) extract_candidates(expr.init); + if (expr.condition) extract_candidates(expr.condition); + if (expr.step) extract_candidates(expr.step); } else if (expr instanceof AST_If) { extract_candidates(expr.condition); } else if (expr instanceof AST_Sequence) { @@ -1205,6 +1209,7 @@ merge(Compressor.prototype, { if (parent instanceof AST_Conditional) return node; if (parent instanceof AST_Exit) return node; if (parent instanceof AST_If) return node; + if (parent instanceof AST_IterationStatement) return node; if (parent instanceof AST_Sequence) return find_stop(parent, level + 1); if (parent instanceof AST_Switch) return node; if (parent instanceof AST_VarDef) return node; diff --git a/test/compress/functions.js b/test/compress/functions.js index f38977b3..b6b68982 100644 --- a/test/compress/functions.js +++ b/test/compress/functions.js @@ -1416,7 +1416,7 @@ issue_2630_5: { !function() { do { c *= 10; - } while (c += 3, (c = 2 + c) < 100); + } while ((c = 2 + (c += 3)) < 100); }(); console.log(c); }