anchor.diff:      procedure PutAll(const ConstArray: array of const); overload; virtual; abstract;
       function ToList(ListClass: TListClass; Sync: Boolean = True;
         ReadWriteSync: Boolean = False): IList; virtual; abstract;
  +    function ToArrayList(Sync: Boolean = True;
  +      ReadWriteSync: Boolean = False): IArrayList; virtual; abstract;
  +    procedure TrimExcess; virtual; abstract;
       property Count: Integer read GetCount;
       property Key[const AValue: Variant]: Variant read GetKey;
       property Value[const AKey: Variant]: Variant read GetValue write PutValue; default;
  
positive.code:   for I := 0 to Count - 1 do
      if (VarIsOrdinal(FKeys[I])) and (FKeys[I] >= 0)
        and (FKeys[I] <= MaxListSize) then Result.Put(FKeys[I], FValues[I]);
  end;
  
  function THashMap.GetKeys: IImmutableList;
  
negative.code: end;
  
  function THashMap.ToArrayList(Sync: Boolean; ReadWriteSync: Boolean
    ): IArrayList;
  var
    I: Integer;
  begin
  