docs: function tighten(statements, block_type) {
                  statements = MAP(statements, walk);
  
                  statements = statements.reduce(function(a, stat){
                          if (stat[0] == "block") {
                                  if (stat[1]) {
                                          a.push.apply(a, stat[1]);
                                  }
                          } else {
                                  a.push(stat);
                          }
                          return a;
                  }, []);
  
                  statements = (function(a, prev){
                          statements.forEach(function(cur){
                                  if (prev && ((cur[0] == "var" && prev[0] == "var") ||
                                               (cur[0] == "const" && prev[0] == "const"))) {
                                          prev[1] = prev[1].concat(cur[1]);
                                  } else {
                                          a.push(cur);
                                          prev = cur;
                                  }
                          });
                          return a;
                  })([]);
  
                  if (options.dead_code) statements = (function(a, has_quit){
                          statements.forEach(function(st){
                                  if (has_quit) {
                                          if (st[0] == "function" || st[0] == "defun") {
                                                  a.push(st);
                                          }
                                          else if (st[0] == "var" || st[0] == "const") {
                                                  if (!options.no_warnings)
                                                          warn("Variables declared in unreachable code");
                                                  st[1] = MAP(st[1], function(def){
                                                          if (def[1] && !options.no_warnings)
                                                                  warn_unreachable([ "assign", true, [ "name", def[0] ], def[1] ]);
                                                          return [ def[0] ];
                                                  });
                                                  a.push(st);
                                          }
                                          else if (!options.no_warnings)
                                                  warn_unreachable(st);
                                  }
                                  else {
                                          a.push(st);
                                          if (member(st[0], [ "return", "throw", "break", "continue" ]))
                                                  has_quit = true;
                                  }
                          });
                          return a;
                  })([]);
  
                  if (options.make_seqs) statements = (function(a, prev) {
                          statements.forEach(function(cur){
                                  if (prev && prev[0] == "stat" && cur[0] == "stat") {
                                          prev[1] = [ "seq", prev[1], cur[1] ];
                                  } else {
                                          a.push(cur);
                                          prev = cur;
                                  }
                          });
                          if (a.length >= 2
                              && a[a.length-2][0] == "stat"
                              && (a[a.length-1][0] == "return" || a[a.length-1][0] == "throw")
                              && a[a.length-1][1])
                          {
                                  a.splice(a.length - 2, 2,
                                           [ a[a.length-1][0],
                                             [ "seq", a[a.length-2][1], a[a.length-1][1] ]]);
                          }
                          return a;
                  })([]);
  
                  // this increases jQuery by 1K.  Probably not such a good idea after all..
                  // part of this is done in prepare_ifs anyway.
                  // if (block_type == "lambda") statements = (function(i, a, stat){
                  //         while (i < statements.length) {
                  //                 stat = statements[i++];
                  //                 if (stat[0] == "if" && !stat[3]) {
                  //                         if (stat[2][0] == "return" && stat[2][1] == null) {
                  //                                 a.push(make_if(negate(stat[1]), [ "block", statements.slice(i) ]));
                  //                                 break;
                  //                         }
                  //                         var last = last_stat(stat[2]);
                  //                         if (last[0] == "return" && last[1] == null) {
                  //                                 a.push(make_if(stat[1], [ "block", stat[2][1].slice(0, -1) ], [ "block", statements.slice(i) ]));
                  //                                 break;
                  //                         }
                  //                 }
                  //                 a.push(stat);
                  //         }
                  //         return a;
                  // })(0, []);
  
                  return statements;
          }