From c5f82ba6de6606c638817a57e1f4c924b4caed25 Mon Sep 17 00:00:00 2001 From: florian Date: Sun, 30 Oct 2005 23:12:08 +0000 Subject: [PATCH] + (ole)variant<->error type conversion + DynArraySetLength + DynArrayFromVariant git-svn-id: trunk@1608 - --- rtl/inc/dynarr.inc | 6 ++++ rtl/inc/dynarrh.inc | 2 ++ rtl/inc/variant.inc | 85 +++++++++++++++++++++++++------------------- rtl/inc/varianth.inc | 4 +++ 4 files changed, 61 insertions(+), 36 deletions(-) diff --git a/rtl/inc/dynarr.inc b/rtl/inc/dynarr.inc index cb3e11be2e..eaf4963f2d 100644 --- a/rtl/inc/dynarr.inc +++ b/rtl/inc/dynarr.inc @@ -140,6 +140,7 @@ procedure fpc_dynarray_incr_ref(p : pointer);[Public,Alias:'FPC_DYNARRAY_INCR_RE { provide local access to dynarr_decr_ref for dynarr_setlength } procedure fpc_dynarray_incr_ref(p : pointer); [external name 'FPC_DYNARRAY_INCR_REF']; + { provide local access to dynarr_setlength } procedure int_dynarray_setlength(var p : pointer;pti : pointer; dimcount : dword;dims : pdynarrayindex);[external name 'FPC_DYNARR_SETLENGTH']; @@ -337,3 +338,8 @@ function fpc_dynarray_copy(psrc : pointer;ti : pointer; end; +procedure DynArraySetLength(var a: Pointer; typeInfo: Pointer; dimCnt: SizeInt; lengthVec: PSizeInt); + begin + int_dynarray_setlength(a,typeInfo,dimCnt,lengthVec); + end; + diff --git a/rtl/inc/dynarrh.inc b/rtl/inc/dynarrh.inc index e794ed02fc..a332a44dfe 100644 --- a/rtl/inc/dynarrh.inc +++ b/rtl/inc/dynarrh.inc @@ -28,3 +28,5 @@ type eletype : pdynarraytypeinfo; vartype : longint; end; + +procedure DynArraySetLength(var a: Pointer; typeInfo: Pointer; dimCnt: SizeInt; lengthVec: PSizeInt); diff --git a/rtl/inc/variant.inc b/rtl/inc/variant.inc index 9810333dfd..5b0b1b9193 100644 --- a/rtl/inc/variant.inc +++ b/rtl/inc/variant.inc @@ -150,21 +150,18 @@ function fpc_interface_to_variant(const i : iinterface) : variant;compilerproc; { Integer } operator :=(const source : byte) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif} - begin Variantmanager.varfromInt(Dest,Source,1); end; operator :=(const source : shortint) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif} - begin Variantmanager.varfromInt(Dest,Source,-1); end; operator :=(const source : word) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif} - begin Variantmanager.varfromInt(Dest,Source,2); end; @@ -304,6 +301,12 @@ operator :=(const source : tdatetime) dest : variant;{$ifdef SYSTEMINLINE}inline VariantManager.VarFromTDateTime(Dest,Source); end; + +operator :=(const source : error) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif} + begin + Variantmanager.varfromInt(Dest,Source,-sizeof(error)); + end; + {********************************************************************** from Variant assignments **********************************************************************} @@ -318,38 +321,33 @@ end; operator :=(const source : variant) dest : shortint;{$ifdef SYSTEMINLINE}inline;{$endif} - -begin - dest:=variantmanager.vartoint(source); -end; + begin + dest:=variantmanager.vartoint(source); + end; operator :=(const source : variant) dest : word;{$ifdef SYSTEMINLINE}inline;{$endif} - -begin - dest:=variantmanager.vartoint(source); -end; + begin + dest:=variantmanager.vartoint(source); + end; operator :=(const source : variant) dest : smallint;{$ifdef SYSTEMINLINE}inline;{$endif} - -begin - dest:=variantmanager.vartoint(source); -end; + begin + dest:=variantmanager.vartoint(source); + end; operator :=(const source : variant) dest : dword;{$ifdef SYSTEMINLINE}inline;{$endif} - -begin - dest:=variantmanager.vartoint(source); -end; + begin + dest:=variantmanager.vartoint(source); + end; operator :=(const source : variant) dest : longint;{$ifdef SYSTEMINLINE}inline;{$endif} - -begin - dest:=variantmanager.vartoint(source); -end; + begin + dest:=variantmanager.vartoint(source); + end; operator :=(const source : variant) dest : qword;{$ifdef SYSTEMINLINE}inline;{$endif} @@ -471,15 +469,15 @@ end; { Misc. } operator :=(const source : variant) dest : currency;{$ifdef SYSTEMINLINE}inline;{$endif} -begin - dest:=variantmanager.vartocurr(source); -end; + begin + dest:=variantmanager.vartocurr(source); + end; operator :=(const source : variant) dest : tdatetime;{$ifdef SYSTEMINLINE}inline;{$endif} -begin - dest:=variantmanager.vartotdatetime(source); -end; + begin + dest:=variantmanager.vartotdatetime(source); + end; operator :=(const source : olevariant) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif} @@ -493,6 +491,11 @@ operator :=(const source : variant) dest : olevariant;{$ifdef SYSTEMINLINE}inlin variantmanager.olevarfromvar(dest,source); end; + +operator :=(const source : variant) dest : error;{$ifdef SYSTEMINLINE}inline;{$endif} + begin + dest:=variantmanager.vartoint(source); + end; {********************************************************************** Operators **********************************************************************} @@ -781,6 +784,11 @@ operator :=(const source : olevariant) dest : tdatetime;{$ifdef SYSTEMINLINE}inl end; +operator :=(const source : olevariant) dest : error;{$ifdef SYSTEMINLINE}inline;{$endif} + begin + dest:=variantmanager.vartoint(variant(tvardata(source))); + end; + {********************************************************************** to OLEVariant assignments **********************************************************************} @@ -793,43 +801,43 @@ operator :=(const source : byte) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{ operator :=(const source : shortint) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif} begin - variantmanager.olevarfromint(dest,source,1); + variantmanager.olevarfromint(dest,source,-1); end; operator :=(const source : word) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif} begin - variantmanager.olevarfromint(dest,source,1); + variantmanager.olevarfromint(dest,source,2); end; operator :=(const source : smallint) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif} begin - variantmanager.olevarfromint(dest,source,1); + variantmanager.olevarfromint(dest,source,-2); end; operator :=(const source : dword) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif} begin - variantmanager.olevarfromint(dest,source,1); + variantmanager.olevarfromint(dest,source,4); end; operator :=(const source : longint) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif} begin - variantmanager.olevarfromint(dest,source,1); + variantmanager.olevarfromint(dest,source,-4); end; operator :=(const source : qword) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif} begin - variantmanager.olevarfromint(dest,source,1); + variantmanager.olevarfromint(dest,source,8); end; operator :=(const source : int64) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif} begin - variantmanager.olevarfromint(dest,source,1); + variantmanager.olevarfromint(dest,source,-8); end; { Boolean } @@ -928,6 +936,11 @@ operator :=(const source : tdatetime) dest : olevariant;{$ifdef SYSTEMINLINE}inl variantmanager.varfromtdatetime(variant(tvardata(dest)),source); end; + +operator :=(const source : error) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif} + begin + variantmanager.olevarfromint(dest,source,-sizeof(error)); + end; {********************************************************************** Variant manager functions **********************************************************************} diff --git a/rtl/inc/varianth.inc b/rtl/inc/varianth.inc index 7a3ac4bef9..47438535a8 100644 --- a/rtl/inc/varianth.inc +++ b/rtl/inc/varianth.inc @@ -247,6 +247,7 @@ operator :=(const source : comp) dest : variant;{$ifdef SYSTEMINLINE}inline;{$en { Misc. } operator :=(const source : currency) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif} operator :=(const source : tdatetime) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif} +operator :=(const source : error) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif} {********************************************************************** from Variant assignments @@ -296,6 +297,7 @@ operator :=(const source : variant) dest : olevariant;{$ifdef SYSTEMINLINE}inlin { Misc. } operator :=(const source : variant) dest : currency;{$ifdef SYSTEMINLINE}inline;{$endif} operator :=(const source : variant) dest : tdatetime;{$ifdef SYSTEMINLINE}inline;{$endif} +operator :=(const source : variant) dest : error;{$ifdef SYSTEMINLINE}inline;{$endif} {********************************************************************** Operators @@ -370,6 +372,7 @@ operator :=(const source : olevariant) dest : comp;{$ifdef SYSTEMINLINE}inline;{ { Misc. } operator :=(const source : olevariant) dest : currency;{$ifdef SYSTEMINLINE}inline;{$endif} operator :=(const source : olevariant) dest : tdatetime;{$ifdef SYSTEMINLINE}inline;{$endif} +operator :=(const source : olevariant) dest : error;{$ifdef SYSTEMINLINE}inline;{$endif} {********************************************************************** to OLEVariant assignments @@ -416,6 +419,7 @@ operator :=(const source : comp) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{ { Misc. } operator :=(const source : currency) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif} operator :=(const source : tdatetime) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif} +operator :=(const source : error) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif} {********************************************************************** OLEVariant Operators