anchor.diff:             Optimized:=false;
              repeat
               DoContinue:=false;
  -            NodeList:=TList.Create;
  -            try
  +            NodeList:=CreateOrClearList(NodeList);
  +            begin
                ParseNodes(NodeList,Node,ntALT);
  -             NewNodeList:=TList.Create;
  -             try
  -              Visited:=TList.Create;
  -              try
  +             NewNodeList:=CreateOrClearList(NewNodeList);
  +             begin
  +              Visited:=CreateOrClearNodeHashSet(Visited);
  +              begin
                  for NodeIndex:=NodeList.Count-1 downto 0 do begin
                   SeedNode:=NodeList[NodeIndex];
  -                if Visited.IndexOf(SeedNode)<0 then begin
  +                if not Visited.Contains(SeedNode) then begin
                    Visited.Add(SeedNode);
  -                 TempNodeList:=TList.Create;
  -                 try
  +                 TempNodeList:=CreateOrClearList(TempNodeList);
  +                 begin
                     TempNodeList.Add(SeedNode);
                     l:=SeedNode;
                     while assigned(l) and (l^.NodeType=ntCAT) do begin
  
positive.code:             DoContinue:=true;
              HasOptimizations:=true;
             end;
            finally
             FreeAndNil(NodeList);
            end;
            if DoContinue then begin
             continue;
  
negative.code:  SetLength(ParallelNFAStack,Instance.CountForwardInstructions*2);
  
   FreeStates:=nil;
   AllStates:=TFLREPointerList.Create;
  
  end;
  
  