anchor.diff:     WorkQueue.Mark;
     end else begin
      WorkQueue.AddNew(DFAState^.IndirectInstructions[Index]);
  +  end;
  + end;
  +end;
  +
  +procedure TFLREDFA.AddToWorkQueue(const WorkQueue:TFLREDFAWorkQueue;ID:longint;Flags:longword);
  +var StackPointer:longint;
  +    Instruction:PFLREInstruction;
  +begin
  + QueueStack[0]:=ID;
  + StackPointer:=1;
  + while StackPointer>0 do begin
  +  dec(StackPointer);
  +  ID:=QueueStack[StackPointer];
  +  if ID=Mark then begin
  +   WorkQueue.Mark;
  +  end else if (ID<>0) and not WorkQueue.Contains(ID) then begin
  +   WorkQueue.AddNew(ID);
  +   if Reversed then begin
  +    Instruction:=@Instance.BackwardInstructions[ID];
  +   end else begin
  +    Instruction:=@Instance.ForwardInstructions[ID];
  +   end;
  +   case Instruction^.IDandOpcode and $ff of
  +    opSINGLECHAR,opCHAR,opANY,opMATCH:begin
  +     // Just save onto the queue
  +    end;
  +    opJMP,opSAVE,opMULTIMATCH,opLOOKBEHINDNEGATIVE,opLOOKBEHINDPOSITIVE,opLOOKAHEADNEGATIVE,opLOOKAHEADPOSITIVE,opBACKREFERENCE,opBACKREFERENCEIGNORECASE:begin
  +     // No-ops at DFA
  +     QueueStack[StackPointer]:=Instruction^.Next^.IDandOpcode shr 8;
  +     inc(StackPointer);
  +    end;
  +    opSPLIT,opSPLITMATCH:begin
  +     QueueStack[StackPointer]:=Instruction^.OtherNext^.IDandOpcode shr 8;
  +     inc(StackPointer);
  +     if (WorkQueue.QueueMaxMark>0) and IsUnanchored and (ID<>0) then begin
  +      QueueStack[StackPointer]:=Mark;
  +      inc(StackPointer);
  +     end;
  +     QueueStack[StackPointer]:=Instruction^.Next^.IDandOpcode shr 8;
  +     inc(StackPointer);
  +    end;
  +    opZEROWIDTH:begin
  +     if (longword(Instruction^.Value) and not Flags)=0 then begin
  +      QueueStack[StackPointer]:=Instruction^.Next^.IDandOpcode shr 8;
  +      inc(StackPointer);
  +     end;
  +    end;
  +   end;
     end;
    end;
   end;
  
positive.code: 
         function WorkQueueToCachedState(const WorkQueue:TFLREDFAWorkQueue;Flags:longword):PFLREDFAState;
         procedure StateToWorkQueue(const DFAState:PFLREDFAState;const WorkQueue:TFLREDFAWorkQueue);
  
         procedure FullAddInstructionThread(const State:PFLREDFAState;Instruction:PFLREInstruction;const Flags:longword);
         function FullProcessNextState(State:PFLREDFAState;const Position:longint;const CurrentChar:longword;const Reversed:boolean):PFLREDFAState;
  
negative.code:    end;
    end;
   end else begin
    ThreadLocalStorageInstance.DFA.IsUnanchored:=UnanchoredStart;
    case ThreadLocalStorageInstance.DFA.SearchMatchFull(StartPosition,UntilExcludingPosition,MatchEnd,UnanchoredStart) of
     DFAMatch:begin
      if UnanchoredStart then begin
  