瀏覽代碼

+ Support custom variants in VarIsClear
* TCustomVariantType.IsClear simply returns False (since its VType can never have values for standard variants)

git-svn-id: trunk@16457 -

sergei 14 年之前
父節點
當前提交
3b910d9eb2
共有 1 個文件被更改,包括 8 次插入11 次删除
  1. 8 11
      rtl/inc/variants.pp

+ 8 - 11
rtl/inc/variants.pp

@@ -2854,12 +2854,15 @@ function VarIsClear(const V: Variant): Boolean;
 
 Var
   VT : TVarType;
-
+  CustomType: TCustomVariantType;
 begin
   VT:=TVarData(V).vType and varTypeMask;
-  Result:=(VT=varEmpty) or
-          (((VT=varDispatch) or (VT=varUnknown))
-           and (TVarData(V).vDispatch=Nil));
+  if VT<CFirstUserType then
+    Result:=(VT=varEmpty) or
+            (((VT=varDispatch) or (VT=varUnknown))
+             and (TVarData(V).vDispatch=Nil))
+   else
+     Result:=FindCustomVariantType(VT,CustomType) and CustomType.IsClear(TVarData(V));
 end;
 
 
@@ -3878,14 +3881,8 @@ end;
 
 
 function TCustomVariantType.IsClear(const V: TVarData): Boolean;
-
-Var
-  VT : TVarType;
-  
 begin
-  VT:=V.vType and varTypeMask;
-  Result:=(VT=varEmpty) or (((VT=varDispatch) or (VT=varUnknown))
-                            and (TVarData(V).vDispatch=Nil));
+  result:=False;
 end;