anchor.diff:      FastAddInstructionThread(@NewState,Instruction^.Next);
      end;
      opMATCH:begin
  -    if not ((MatchMode in [mmLongestMatch,mmFullMatch,mmMultiMatch]) or Reversed) then begin
  +    if not (MatchMode in [mmLongestMatch,mmFullMatch,mmMultiMatch]) then begin
        // We can stop processing the instruction list queue here since we found a match (for the PCRE leftmost first valid match behaviour)
        break;
       end;
  
positive.code:         ((MatchMode<>mmFirstMatch) or ((Index=0) and IsInstructionGreedy(Instruction))) and
          ((MatchMode<>mmLongestMatch) or not SawMark) and
          ((Flags and sfDFAMatchWins)<>0) then begin
        // ToDo: Full match state optimization
       end;
      end;
      QueueInstructionArray[n]:=Instruction;
      inc(n);
  
negative.code:     end;
      opJMP,opSAVE,opMULTIMATCH,opLOOKBEHINDNEGATIVE,opLOOKBEHINDPOSITIVE,opLOOKAHEADNEGATIVE,opLOOKAHEADPOSITIVE,opBACKREFERENCE,opBACKREFERENCEIGNORECASE:begin
       // No-ops at DFA
       if (StackPointer+1)>length(QueueStack) then begin
        SetLength(QueueStack,(StackPointer+1)*2);
       end;
       QueueStack[StackPointer]:=Instruction^.Next;
       inc(StackPointer);
      end;
      opSPLIT,opSPLITMATCH:begin
       if (StackPointer+3)>length(QueueStack) then begin
        SetLength(QueueStack,(StackPointer+3)*2);
       end;
       QueueStack[StackPointer]:=Instruction^.OtherNext;
       inc(StackPointer);
       if NeedMark and IsUnanchored and assigned(Instruction) then begin
        QueueStack[StackPointer]:=Mark;
        inc(StackPointer);
       end;
  