anchor.diff:  end;
   
   function VarIsList(const Value: Variant): Boolean;
  -begin
  -  Result := (FindVarData(Value)^.VType = varUnknown) and
  -            Supports(IInterface(Value), IList) or
  +var
  +  P: PVarData;
  +begin
  +  P := FindVarData(Value);
  +  Result := (P^.VType = varUnknown) and
  +            Supports(IInterface(P^.VUnknown), IList) or
               VarIsObj(Value, TAbstractList);
   end;
   
   function VarToList(const Value: Variant): IList;
  -begin
  -  if VarIsEmpty(Value) or VarIsNull(Value) then
  +var
  +  P: PVarData;
  +  VType: TVarType;
  +begin
  +  P := FindVarData(Value);
  +  VType := P^.VType;
  +  if (VType = varEmpty) or (VType = varNull) then
       Result := nil
  -  else if FindVarData(Value)^.VType = varUnknown then
  -    Supports(IInterface(Value), IList, Result)
  +  else if VType = varUnknown then
  +    Supports(IInterface(P^.VUnknown), IList, Result)
     else if VarIsObj(Value, TAbstractList) then
       VarToObj(Value, TAbstractList, Result)
     else
  
positive.code: 
    { TAbstractMap }
  
  {$IFDEF DELPHI7_UP}
    {$METHODINFO ON}
  {$ENDIF}
    TAbstractMap = class(TInterfacedObject, IMap)
    private
      FLock: TCriticalSection;
      FReadWriteLock: TMultiReadExclusiveWriteSynchronizer;
  
negative.code:   end;
    Obj := GetInstance(V);
    Result := True;
    if SameText(Name, 'Free') and (Length(Arguments) = 0) then
      Obj.Free
    else if Supports(Obj.ClassType, IInvokeableVarObject) then begin
      Supports(Obj, IInvokeableVarObject, Intf);
  