anchor.diff:        ReadWriteSync: Boolean = False): IList;
       property Count: Integer read GetCount;
       property Key[const AValue: Variant]: Variant read GetKey;
  -    property Value[const AKey: Variant]: Variant read Get write Put; default;
  +    property Value[const AKey: Variant]: Variant read GetValue write PutValue; default;
       property Keys: IImmutableList read GetKeys;
       property Values: IImmutableList read GetValues;
     end;
  +
  +  { TAbstractMap }
   
     TAbstractMap = class(TInterfacedObject, IMap)
     private
       FLock: TCriticalSection;
       FReadWriteLock: TMultiReadExclusiveWriteSynchronizer;
  +    function GetValue(const AKey: Variant): Variant;
  +    procedure PutValue(const AKey: Variant; AValue: Variant);
     protected
       procedure Assign(const Source: IMap); virtual; abstract;
       function GetCount: Integer; virtual; abstract;
       function GetKeys: IImmutableList; virtual; abstract;
       function GetValues: IImmutableList; virtual; abstract;
       function GetKey(const AValue: Variant): Variant; virtual; abstract;
  -    function Get(const AKey: Variant): Variant; overload; virtual; abstract;
  -    procedure Put(const AKey, AValue: Variant); virtual; abstract;
     public
       constructor Create(ACapacity: Integer = 16; Factor: Single = 0.75;
         Sync: Boolean = True; ReadWriteSync: Boolean = False); overload; virtual; abstract;
  +    constructor Create(ACapacity: Integer; Sync: Boolean;
  +      ReadWriteSync: Boolean = False); overload; virtual;
       constructor Create(Sync: Boolean;
  +      ReadWriteSync: Boolean = False); overload; virtual;
  +    constructor Create(const AList: IImmutableList; Sync: Boolean = True;
  +      ReadWriteSync: Boolean = False); overload; virtual;
  +    constructor Create(const AMap: IMap; Sync: Boolean = True;
  +      ReadWriteSync: Boolean = False); overload; virtual;
  +    constructor Create(const Container: Variant; Sync: Boolean = True;
  +      ReadWriteSync: Boolean = False); overload; virtual;
  +    constructor Create(const ConstArray: array of const; Sync: Boolean = True;
         ReadWriteSync: Boolean = False); overload; virtual;
   {$IFDEF BCB}
       constructor Create0; virtual;
  
positive.code:   Create(ConstArray);
  end;
  
  constructor TAbstractList.CreateL2(const AList: IList; Sync: Boolean);
  begin
    Create(AList, Sync);
  end;
  
negative.code: 
  { TSmartObject }
  
  constructor TSmartObject.Create(AObject: TObject);
  var
    V: NativeInt;
  