variants, varutils: another portion of misc fixes:

* Handle Variant to ShortString conversions entirely in variants unit, removed VarUtils.VariantToShortString
+ support varUString in DoVarClearComplex
* fixed missing result assignment in TCustomVariantType.VarDataIsEmptyParam
* TCustomVariantType.UnaryOp and BinaryOp now 'implemented', they raise EVariantInvalidOp

git-svn-id: trunk@16529 -
This commit is contained in:
sergei 2010-12-10 03:38:21 +00:00
parent ae028b1e1d
commit ae7018cf85
3 changed files with 21 additions and 23 deletions

View File

@ -707,14 +707,11 @@ end;
procedure sysvartopstr (var s; const v : Variant);
var
tmp: AnsiString;
begin
if VarType(v) = varNull then
if NullStrictConvert then
VarCastError(varNull, varString)
else
ShortString(s) := NullAsStringValue
else
ShortString(s) := VariantToShortString(TVarData(V));
sysvartolstr(tmp, v);
ShortString(s) := tmp;
end;
@ -2132,10 +2129,17 @@ begin
with v do
if vType < varInt64 then
VarResultCheck(VariantClear(v))
else if vType = varString then begin
AnsiString(vString) := '';
vType := varEmpty
end else if vType = varAny then
else if vType = varString then
begin
AnsiString(vString) := '';
vType := varEmpty;
end
else if vType = varUString then
begin
UnicodeString(vString) := '';
vType := varEmpty;
end
else if vType = varAny then
ClearAnyProc(v)
else if vType and varArray <> 0 then
DoVarClearArray(v)
@ -3667,9 +3671,9 @@ function TCustomVariantType._Release: Integer; {$IFNDEF WINDOWS}cdecl{$ELSE}stdc
{$warnings off}
procedure TCustomVariantType.SimplisticClear(var V: TVarData);
begin
NotSupported('TCustomVariantType.SimplisticClear');
end;
begin
VarDataInit(V);
end;
procedure TCustomVariantType.SimplisticCopy(var Dest: TVarData; const Source: TVarData; const Indirect: Boolean = False);
@ -3811,7 +3815,7 @@ end;
function TCustomVariantType.VarDataIsEmptyParam(const V: TVarData): Boolean;
begin
VarIsEmptyParam(Variant(V));
Result:=VarIsEmptyParam(Variant(V));
end;
@ -3955,14 +3959,14 @@ end;
procedure TCustomVariantType.BinaryOp(var Left: TVarData; const Right: TVarData; const Operation: TVarOp);
begin
NotSupported('TCustomVariantType.BinaryOp');
RaiseInvalidOp;
end;
procedure TCustomVariantType.UnaryOp(var Right: TVarData; const Operation: TVarOp);
begin
NotSupported('TCustomVariantType.UnaryOp');
RaiseInvalidOp;
end;

View File

@ -1422,11 +1422,6 @@ begin
end;
Function VariantToShortString(const VargSrc : TVarData) : ShortString;
begin
Result:=VariantToAnsiString(VargSrc);
end;
{ ---------------------------------------------------------------------
Some debug routines
---------------------------------------------------------------------}

View File

@ -71,7 +71,6 @@ function VariantToInt64(const VargSrc : TVarData ) : Int64;
function VariantToQWord(const VargSrc : TVarData ) : Qword;
function VariantToWideString(const VargSrc : TVarData) : WideString;
function VariantToAnsiString(const VargSrc : TVarData) : AnsiString;
function VariantToShortString(const VargSrc : TVarData) : ShortString;
{Debug routines }
procedure DumpVariant(const VSrc : Variant);