anchor.diff:        FGuardian: IInterface;
         FPointers: array of TDisposablePointer;
         FLastIndex: Integer;
  +      {$IFNDEF DELPHI_SYDNEY_PLUS}
         class procedure Initialize(var ADisposables: TDisposables); static;
         class procedure Finalize(var ADisposables: TDisposables); static;
  +      {$ENDIF}
         procedure RegisterPointer(Ptr: Pointer; ADisposePolicy: TDisposePolicy);
         procedure UnregisterPointer(Ptr: Pointer);
       public
  
positive.code: class procedure TDisposables.Finalize(var ADisposables: TDisposables);
  var
    FirstException: Pointer;
    i: Integer;
  begin
    FirstException := nil;
  
    for i := ADisposables.FLastIndex downto 0 do
    try
      case ADisposables.FPointers[i].DisposePolicy of
  
negative.code:       procedure AddMem(const P: Pointer);
        procedure ReallocMem(var P: Pointer; Size: Integer);
        procedure RemoveMem(const P: Pointer);
        {$IFDEF DELPHI_SYDNEY_PLUS}
        class operator Initialize (out Dest: TDisposables);
        class operator Finalize (var Dest: TDisposables);
        {$ENDIF}
        /// <summary>A syntax sugar for the AddObject method.</summary>
        property Objects[const AnObject: TObject]: TObject read AddObject; default;
    end;
  