text: var optimizeProperties = require('../properties/optimizer');
  
  var stringifyBody = require('../stringifier/one-time').body;
  var stringifySelectors = require('../stringifier/one-time').selectors;
  var cleanUpSelectors = require('./clean-up').selectors;
  var isSpecial = require('./is-special');
  
  function mergeAdjacent(tokens, options, validator) {
    var lastToken = [null, [], []];
    var adjacentSpace = options.compatibility.selectors.adjacentSpace;
  
    for (var i = 0, l = tokens.length; i < l; i++) {
      var token = tokens[i];
  
      if (token[0] != 'selector') {
        lastToken = [null, [], []];
        continue;
      }
  
      if (lastToken[0] == 'selector' && stringifySelectors(token[1]) == stringifySelectors(lastToken[1])) {
        var joinAt = [lastToken[2].length];
        Array.prototype.push.apply(lastToken[2], token[2]);
        optimizeProperties(token[1], lastToken[2], joinAt, true, options, validator);
        token[2] = [];
      } else if (lastToken[0] == 'selector' && stringifyBody(token[2]) == stringifyBody(lastToken[2]) &&
          !isSpecial(options, stringifySelectors(token[1])) && !isSpecial(options, stringifySelectors(lastToken[1]))) {
        lastToken[1] = cleanUpSelectors(lastToken[1].concat(token[1]), false, adjacentSpace);
        token[2] = [];
      } else {
        lastToken = token;
      }
    }
  }
  
  module.exports = mergeAdjacent;
  