anchor.diff:          (combinator1 == Combinator.nextSibling ||
               combinator1 == Combinator.followingSibling)) {
         result.addFirst([
  -        [compound2, combinator2]
  +        [compound1, combinator1]
         ]);
  -      components1..add(compound1)..add(Combinator.child);
  +      components2..add(compound2)..add(Combinator.child);
       } else if (combinator1 == combinator2) {
         var unified = unifyCompound(compound1.components, compound2.components);
         if (unified == null) return null;
  
positive.code:   }
  
    var combinators1 = <Combinator>[];
    while (components1.last is Combinator) {
      combinators1.add(components1.removeLast() as Combinator);
    }
  
    var combinators2 = <Combinator>[];
    while (components2.last is Combinator) {
      combinators2.add(components2.removeLast() as Combinator);
    }
  
  
negative.code:     ]);
      return _mergeFinalCombinators(components1, components2, result);
    } else {
      if (combinator2 == Combinator.child &&
          components1.isNotEmpty &&
          (components1.last as CompoundSelector)
  