anchor.diff:  
   function VarToMap(const Value: Variant): IMap;
   begin
  -  if FindVarData(Value)^.VType = varUnknown then
  +  if VarIsEmpty(Value) or VarIsNull(Value) then
  +    Result := nil
  +  else if FindVarData(Value)^.VType = varUnknown then
       Supports(IInterface(Value), IMap, Result)
     else if VarIsObj(Value, TAbstractMap) then
       VarToObj(Value, TAbstractMap, Result)
  
positive.code: end;
  
  function VarIsIntf(const Value: Variant): Boolean;
  begin
    Result := (FindVarData(Value)^.VType = varUnknown);
  end;
  
  function VarIsIntf(const Value: Variant; const IID: TGUID): Boolean;
  begin
    Result := (FindVarData(Value)^.VType = varUnknown) and
              Supports(IInterface(Value), IID);
  end;
  
  function VarToIntf(const Value: Variant; const IID: TGUID; out AIntf): Boolean;
  begin
    if FindVarData(Value)^.VType = varUnknown then
      Result := Supports(IInterface(Value), IID, AIntf)
    else
      Result := false;
  
negative.code:     P := FindVarData(Value);
      if P^.VType = varObject then
        Result := TObject(P^.VPointer) is AClass
      else if (P^.VType <> varNull) and (P^.VType <> varEmpty) then
        Result := False;
    except
      Result := False;
  