anchor.diff:    TIteratorMovement = (imLeft, imNext, imRight);
     PKeyValuePairBacktrackNode = ^TKeyValuePairBacktrackNode;
     TKeyValuePairBacktrackNode = record
  +    NodeParent : PPKeyValuePairNode;
       Node : PKeyValuePairNode;
       NextMove : TIteratorMovement;
       Next : PKeyValuePairBacktrackNode;
  
positive.code:       end;
      end;
    if AFreeNodes and (AIterator.CurNode <> nil) then
      begin
        kvp := @AIterator.CurNode^.KVP;
        FreeKey(kvp^.Key, kvp^.KeySize);
        if kvp^.Value <> nil then
          FreeValue(kvp^.Value);
        {$IFDEF DEBUG}
        InvalidateKVPNode(AIterator.CurNode);
        {$ENDIF}
        trieAllocators.DeAlloc(AIterator.CurNode);
        AIterator.CurNode := nil;
      end;
  end;
  
  procedure THashTrie.RemoveNode(ParentNodePtr: PPKeyValuePairNode; Node:
      PKeyValuePairNode);
  var
    SmallestNode, SmallestNodeParent : PKeyValuePairNode;
  
negative.code: end;
  {$ENDIF}
  
  procedure THashTrie.NewBacktrackNode(var AIterator: THashTrieIterator; var
      Node: PKeyValuePairNode; NextMove: TIteratorMovement = imLeft);
  var
    BacktrackNode : PKeyValuePairBacktrackNode;
  begin
    BacktrackNode := FKeyValuePairBacktrackNodeAllocator.Alloc;
    BacktrackNode^.Node := Node;
    BacktrackNode^.NodeParent := @Node;
    BacktrackNode^.Next := AIterator.BackTrack;
    if AIterator.Backtrack <> nil then
      AIterator.Backtrack^.NextMove := NextMove;
  