anchor.diff:   end;
   
    // Dead state? If yes, ...
  - if (n=0) and (Flags=0) then begin
  + if (CountInstructions=0) and (Flags=0) then begin
     // ... drop it and take the dead state as the next state
     result:=DefaultStates[dskDead];
     exit;
    end;
   
  - if MatchMode=mmLongestMatch then begin
  + if (MatchMode=mmLongestMatch) and (CountInstructions>0) then begin
     // Sort in longest match mode to reduce the number of distinct sets which must be stored
     CurrentItem:=@QueueInstructionArray[0];
  -  EndItem:=CurrentItem;
  -  inc(EndItem,n);
  +  EndItem:=@QueueInstructionArray[CountInstructions];
     while PtrUInt(pointer(CurrentItem))<PtrUInt(pointer(EndItem)) do begin
      MarkItem:=CurrentItem;
      Count:=0;
  
positive.code:  end;
  
   NewState.Flags:=Flags or (NeedFlags shl sfDFANeedShift);
   NewState.Instructions:=copy(QueueInstructionArray,0,n);
   NewState.CountInstructions:=n;
  
   result:=CacheState(@NewState);
  
  
negative.code:       exit;
       end;
      end;{}
      if (CountInstructions+1)>length(QueueInstructionArray) then begin
       SetLength(QueueInstructionArray,(CountInstructions+1)*2);
      end;
      QueueInstructionArray[CountInstructions]:=Instruction;
      inc(CountInstructions);
      if (Instruction^.IDandOpcode and $ff)=opZEROWIDTH then begin
       NeedFlags:=NeedFlags or longword(Instruction^.Value);
      end;
  