anchor.diff:   end;
   
    NewState.Flags:=Flags or (NeedFlags shl sfDFANeedShift);
  - NewState.Instructions:=copy(QueueInstructionArray,0,n);
  - NewState.CountInstructions:=n;
  + if CountInstructions>0 then begin
  +  SetLength(NewState.Instructions,CountInstructions);
  +  Move(QueueInstructionArray[0],NewState.Instructions[0],CountInstructions*SizeOf(PFLREInstruction));
  +  NewState.CountInstructions:=CountInstructions;
  + end else begin
  +  NewState.Instructions:=nil;
  +  NewState.CountInstructions:=0;
  + end;
   
    result:=CacheState(@NewState);
   
  
positive.code:  end;
  
   // Dead state? If yes, ...
   if (n=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
    // Sort in longest match mode to reduce the number of distinct sets which must be stored
    CurrentItem:=@QueueInstructionArray[0];
    EndItem:=CurrentItem;
    inc(EndItem,n);
    while PtrUInt(pointer(CurrentItem))<PtrUInt(pointer(EndItem)) do begin
     MarkItem:=CurrentItem;
     Count:=0;
  
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;
  