anchor.diff:      function GetValues: IImmutableList; virtual; abstract;
       function CompareKey(const Entry1, Entry2: TMapEntry): Integer; virtual; abstract;
       function CompareValue(const Entry1, Entry2: TMapEntry): Integer; virtual; abstract;
  +    function Invoke(const AName: string; const Arguments: TVarDataArray): Variant; virtual;
     public
       constructor Create(ACapacity: Integer = 16; Factor: Single = 0.75;
         Sync: Boolean = True; ReadWriteSync: Boolean = False); overload; virtual; abstract;
  
positive.code:     procedure Sort(CompareProc: TListCompareMethod); overload;
      procedure TrimExcess;
      property Item[Index: Integer]: Variant read Get write Put; default;
      property Capacity: Integer read GetCapacity write SetCapacity;
      property Count: Integer read GetCount write SetCount;
    end;
  {$IFDEF DELPHI7_UP}
    {$METHODINFO OFF}
  {$ENDIF}
  
    TListClass = class of TAbstractList;
  
  
negative.code: function VarIsObj(const Value: Variant; AClass: TClass): Boolean;
  var
    P: PVarData;
    VType: TVarType;
  begin
    P := FindVarData(Value);
    VType := P^.VType;
    Result := True;
    try
      if VType = varObject then
        Result := TObject(P^.VPointer) is AClass
      else if (VType <> varNull) and (VType <> varEmpty) then
        Result := False;
    except
      Result := False;
  