* several variant init./final. stuff fixed

This commit is contained in:
florian 2005-01-15 18:47:26 +00:00
parent fe4cb5e126
commit 99ebd46010
4 changed files with 37 additions and 43 deletions

View File

@ -139,7 +139,7 @@ begin
recordrtti(data,typeinfo,@int_initialize); recordrtti(data,typeinfo,@int_initialize);
{$ifdef HASVARIANT} {$ifdef HASVARIANT}
tkVariant: tkVariant:
variant_init(Variant(PVarData(Data)^)); variant_init(PVarData(Data)^);
{$endif HASVARIANT} {$endif HASVARIANT}
end; end;
end; end;
@ -176,7 +176,7 @@ begin
fpc_dynarray_decr_ref(PPointer(Data)^,TypeInfo); fpc_dynarray_decr_ref(PPointer(Data)^,TypeInfo);
{$ifdef HASVARIANT} {$ifdef HASVARIANT}
tkVariant: tkVariant:
variant_clear(Variant(PVarData(Data)^)) variant_clear(PVarData(Data)^);
{$endif HASVARIANT} {$endif HASVARIANT}
end; end;
end; end;
@ -204,7 +204,7 @@ begin
{$endif HASINTF} {$endif HASINTF}
{$ifdef HASVARIANT} {$ifdef HASVARIANT}
tkVariant: tkVariant:
variant_addref(PVariant(Data)^); variant_addref(pvardata(Data)^);
{$endif HASVARIANT} {$endif HASVARIANT}
end; end;
end; end;
@ -237,7 +237,7 @@ begin
{$endif HASINTF} {$endif HASINTF}
{$ifdef HASVARIANT} {$ifdef HASVARIANT}
tkVariant: tkVariant:
variant_clear(PVariant(Data)^); variant_clear(pvardata(data)^);
{$endif HASVARIANT} {$endif HASVARIANT}
end; end;
end; end;
@ -251,11 +251,12 @@ procedure fpc_finalize_array(data,typeinfo : pointer;count,size : longint); [Pub
int_finalize(data+size*i,typeinfo); int_finalize(data+size*i,typeinfo);
end; end;
{ {
$Log$ $Log$
Revision 1.20 2005-01-08 20:43:44 florian Revision 1.21 2005-01-15 18:47:26 florian
* several variant init./final. stuff fixed
Revision 1.20 2005/01/08 20:43:44 florian
+ init/cleaning code for variants added + init/cleaning code for variants added
Revision 1.19 2004/11/02 15:52:04 florian Revision 1.19 2004/11/02 15:52:04 florian

View File

@ -41,7 +41,7 @@ begin
end; end;
procedure variant_init(var v : variant);[Public,Alias:'FPC_VARIANT_INIT']; procedure variant_init(var v : tvardata);[Public,Alias:'FPC_VARIANT_INIT'];
begin begin
{ calling the variant manager here is a problem because the static/global variants { calling the variant manager here is a problem because the static/global variants
are initialized while the variant manager isn't assigned } are initialized while the variant manager isn't assigned }
@ -49,15 +49,17 @@ procedure variant_init(var v : variant);[Public,Alias:'FPC_VARIANT_INIT'];
end; end;
procedure variant_clear(var v : variant);[Public,Alias:'FPC_VARIANT_CLEAR']; procedure variant_clear(var v : tvardata);[Public,Alias:'FPC_VARIANT_CLEAR'];
begin begin
variantmanager.varclear(v); if assigned(VarClearProc) then
VarClearProc(v)
end; end;
procedure variant_addref(var v : variant);[Public,Alias:'FPC_VARIANT_ADDREF']; procedure variant_addref(var v : tvardata);[Public,Alias:'FPC_VARIANT_ADDREF'];
begin begin
variantmanager.varaddref(v); if assigned(VarAddRefProc) then
VarAddRefProc(v);
end; end;
@ -113,7 +115,6 @@ function fpc_interface_to_variant(const i : iinterface) : variant;compilerproc;
operator :=(const source : byte) dest : variant; operator :=(const source : byte) dest : variant;
begin begin
Variant_Init(Dest);
Variantmanager.varfromInt(Dest,Source,1); Variantmanager.varfromInt(Dest,Source,1);
end; end;
@ -121,7 +122,6 @@ end;
operator :=(const source : shortint) dest : variant; operator :=(const source : shortint) dest : variant;
begin begin
Variant_Init(Dest);
Variantmanager.varfromInt(Dest,Source,-1); Variantmanager.varfromInt(Dest,Source,-1);
end; end;
@ -129,56 +129,43 @@ end;
operator :=(const source : word) dest : variant; operator :=(const source : word) dest : variant;
begin begin
Variant_Init(Dest);
Variantmanager.varfromInt(Dest,Source,2); Variantmanager.varfromInt(Dest,Source,2);
end; end;
operator :=(const source : smallint) dest : variant; operator :=(const source : smallint) dest : variant;
begin begin
Variant_Init(Dest);
Variantmanager.varfromInt(Dest,Source,-2); Variantmanager.varfromInt(Dest,Source,-2);
end; end;
operator :=(const source : dword) dest : variant; operator :=(const source : dword) dest : variant;
begin begin
Variant_Init(Dest);
Variantmanager.varfromInt(Dest,Source,4); Variantmanager.varfromInt(Dest,Source,4);
end; end;
operator :=(const source : longint) dest : variant; operator :=(const source : longint) dest : variant;
begin begin
// Variant_Init(Dest);
Variantmanager.varfromInt(Dest,Source,-4); Variantmanager.varfromInt(Dest,Source,-4);
end; end;
operator :=(const source : qword) dest : variant; operator :=(const source : qword) dest : variant;
begin begin
Variant_Init(Dest);
Variantmanager.varfromWord64(Dest,Source); Variantmanager.varfromWord64(Dest,Source);
end; end;
operator :=(const source : int64) dest : variant; operator :=(const source : int64) dest : variant;
begin begin
Variant_Init(Dest);
Variantmanager.varfromInt64(Dest,Source); Variantmanager.varfromInt64(Dest,Source);
end; end;
{ Boolean } { Boolean }
operator :=(const source : boolean) dest : variant; operator :=(const source : boolean) dest : variant;
begin begin
Variant_Init(Dest);
Variantmanager.varfromBool(Dest,Source); Variantmanager.varfromBool(Dest,Source);
end; end;
@ -186,7 +173,6 @@ end;
operator :=(const source : wordbool) dest : variant; operator :=(const source : wordbool) dest : variant;
begin begin
Variant_Init(Dest);
Variantmanager.varfromBool(Dest,Boolean(Source)); Variantmanager.varfromBool(Dest,Boolean(Source));
end; end;
@ -194,7 +180,6 @@ end;
operator :=(const source : longbool) dest : variant; operator :=(const source : longbool) dest : variant;
begin begin
Variant_Init(Dest);
Variantmanager.varfromBool(Dest,Boolean(Source)); Variantmanager.varfromBool(Dest,Boolean(Source));
end; end;
@ -204,7 +189,6 @@ end;
operator :=(const source : char) dest : variant; operator :=(const source : char) dest : variant;
begin begin
Variant_Init(Dest);
VariantManager.VarFromPStr(Dest,Source); VariantManager.VarFromPStr(Dest,Source);
end; end;
@ -212,7 +196,6 @@ end;
operator :=(const source : widechar) dest : variant; operator :=(const source : widechar) dest : variant;
begin begin
Variant_Init(Dest);
VariantManager.VarFromWStr(Dest,Source); VariantManager.VarFromWStr(Dest,Source);
end; end;
@ -221,7 +204,6 @@ end;
operator :=(const source : shortstring) dest : variant; operator :=(const source : shortstring) dest : variant;
begin begin
Variant_Init(Dest);
VariantManager.VarFromPStr(Dest,Source); VariantManager.VarFromPStr(Dest,Source);
end; end;
@ -229,7 +211,6 @@ end;
operator :=(const source : ansistring) dest : variant; operator :=(const source : ansistring) dest : variant;
begin begin
Variant_Init(Dest);
VariantManager.VarFromLStr(Dest,Source); VariantManager.VarFromLStr(Dest,Source);
end; end;
@ -237,7 +218,6 @@ end;
operator :=(const source : widestring) dest : variant; operator :=(const source : widestring) dest : variant;
begin begin
Variant_Init(Dest);
VariantManager.VarFromWStr(Dest,Source); VariantManager.VarFromWStr(Dest,Source);
end; end;
@ -246,7 +226,6 @@ end;
{$ifdef SUPPORT_SINGLE} {$ifdef SUPPORT_SINGLE}
operator :=(const source : single) dest : variant; operator :=(const source : single) dest : variant;
begin begin
Variant_Init(Dest);
VariantManager.VarFromReal(Dest,Source); VariantManager.VarFromReal(Dest,Source);
end; end;
{$endif SUPPORT_SINGLE} {$endif SUPPORT_SINGLE}
@ -255,7 +234,6 @@ end;
{$ifdef SUPPORT_DOUBLE} {$ifdef SUPPORT_DOUBLE}
operator :=(const source : double) dest : variant; operator :=(const source : double) dest : variant;
begin begin
Variant_Init(Dest);
VariantManager.VarFromReal(Dest,Source); VariantManager.VarFromReal(Dest,Source);
end; end;
{$endif SUPPORT_DOUBLE} {$endif SUPPORT_DOUBLE}
@ -264,7 +242,6 @@ end;
{$ifdef SUPPORT_EXTENDED} {$ifdef SUPPORT_EXTENDED}
operator :=(const source : extended) dest : variant; operator :=(const source : extended) dest : variant;
begin begin
Variant_Init(Dest);
VariantManager.VarFromReal(Dest,Source); VariantManager.VarFromReal(Dest,Source);
end; end;
{$endif SUPPORT_EXTENDED} {$endif SUPPORT_EXTENDED}
@ -273,7 +250,6 @@ end;
{$ifdef SUPPORT_COMP} {$ifdef SUPPORT_COMP}
Operator :=(const source : comp) dest : variant; Operator :=(const source : comp) dest : variant;
begin begin
Variant_Init(Dest);
VariantManager.VarFromReal(Dest,Source); VariantManager.VarFromReal(Dest,Source);
end; end;
{$endif SUPPORT_COMP} {$endif SUPPORT_COMP}
@ -622,7 +598,10 @@ procedure initvariantmanager;
{ {
$Log$ $Log$
Revision 1.21 2005-01-08 20:43:44 florian Revision 1.22 2005-01-15 18:47:26 florian
* several variant init./final. stuff fixed
Revision 1.21 2005/01/08 20:43:44 florian
+ init/cleaning code for variants added + init/cleaning code for variants added
Revision 1.20 2005/01/07 21:15:46 florian Revision 1.20 2005/01/07 21:15:46 florian

View File

@ -186,6 +186,13 @@ procedure GetVariantManager(var VarMgr: TVariantManager);
procedure SetVariantManager(const VarMgr: TVariantManager); procedure SetVariantManager(const VarMgr: TVariantManager);
function IsVariantManagerSet: Boolean; function IsVariantManagerSet: Boolean;
const
VarClearProc : procedure(var v : TVarData) = nil;
VarAddRefProc : procedure(var v : TVarData) = nil;
VarCopyProc : procedure(var d : TVarData;const s : TVarData) = nil;
VarToLStrProc : procedure(var d : AnsiString;const s : TVarData) = nil;
VarToWStrProc : procedure(var d : WideString;const s : TVarData) = nil;
var var
VarDispProc : pointer; VarDispProc : pointer;
DispCallByIDProc : pointer; DispCallByIDProc : pointer;
@ -311,7 +318,10 @@ operator <=(const op1,op2 : variant) dest : boolean;
{ {
$Log$ $Log$
Revision 1.16 2003-12-22 23:07:52 peter Revision 1.17 2005-01-15 18:47:26 florian
* several variant init./final. stuff fixed
Revision 1.16 2003/12/22 23:07:52 peter
* fixed type of verror * fixed type of verror
Revision 1.15 2003/12/10 01:36:39 florian Revision 1.15 2003/12/10 01:36:39 florian

View File

@ -69,7 +69,8 @@ begin
case VType of case VType of
varEmpty, varNull, varSmallint, varInteger, varSingle, varDouble, varEmpty, varNull, varSmallint, varInteger, varSingle, varDouble,
varCurrency, varDate, varError, varBoolean, varByte,VarShortInt, varCurrency, varDate, varError, varBoolean, varByte,VarShortInt,
varInt64, VarLongWord,VarQWord:; varInt64, VarLongWord,VarQWord:
;
varOleStr: varOleStr:
WideString(Pointer(VOleStr)):=''; WideString(Pointer(VOleStr)):='';
varDispatch, varDispatch,
@ -709,7 +710,10 @@ end;
{$endif HASVARIANT} {$endif HASVARIANT}
{ {
$Log$ $Log$
Revision 1.12 2005-01-08 16:19:42 florian Revision 1.13 2005-01-15 18:47:26 florian
* several variant init./final. stuff fixed
Revision 1.12 2005/01/08 16:19:42 florian
* made some variants stuff more readable * made some variants stuff more readable
Revision 1.11 2004/04/28 20:48:20 peter Revision 1.11 2004/04/28 20:48:20 peter