Allow sequences maximum length to be user configurable.
authorkzc <zaxxon2011@gmail.com>
Sun, 26 Jun 2016 21:16:02 +0000 (17:16 -0400)
committerRichard van Velzen <rvanvelzen@experty.com>
Fri, 1 Jul 2016 07:41:31 +0000 (09:41 +0200)
README.md
lib/compress.js

index 792767d..287c481 100644 (file)
--- a/README.md
+++ b/README.md
@@ -291,7 +291,12 @@ you can pass a comma-separated list of options.  Options are in the form
 `foo=bar`, or just `foo` (the latter implies a boolean option that you want
 to set `true`; it's effectively a shortcut for `foo=true`).
 
-- `sequences` -- join consecutive simple statements using the comma operator
+- `sequences` (default: true) -- join consecutive simple statements using the
+  comma operator.  May be set to a positive integer to specify the maximum number
+  of consecutive comma sequences that will be generated. If this option is set to
+  `true` then the default sequences limit is `2000`. Set option to `false` or `0`
+  to disable. On rare occasions the default sequences limit leads to very slow
+  compress times in which case a value of `20` or less is recommended.
 
 - `properties` -- rewrite property access using the dot notation, for
   example `foo["bar"] → foo.bar`
index 22d6bf1..6a534c3 100644 (file)
@@ -79,6 +79,8 @@ function Compressor(options, false_by_default) {
         global_defs   : {},
         passes        : 1,
     }, true);
+    var sequences = this.options["sequences"];
+    this.sequences_limit = sequences == 1 ? 2000 : sequences | 0;
     this.warnings_produced = {};
 };
 
@@ -266,7 +268,7 @@ merge(Compressor.prototype, {
             if (compressor.option("if_return")) {
                 statements = handle_if_return(statements, compressor);
             }
-            if (compressor.option("sequences")) {
+            if (compressor.sequences_limit > 0) {
                 statements = sequencesize(statements, compressor);
             }
             if (compressor.option("join_vars")) {
@@ -721,7 +723,7 @@ merge(Compressor.prototype, {
                 seq = [];
             };
             statements.forEach(function(stat){
-                if (stat instanceof AST_SimpleStatement && seqLength(seq) < 2000) {
+                if (stat instanceof AST_SimpleStatement && seqLength(seq) < compressor.sequences_limit) {
                     seq.push(stat.body);
                 } else {
                     push_seq();