Browse Source

+ (ole)variant<->error type conversion
+ DynArraySetLength
+ DynArrayFromVariant

git-svn-id: trunk@1608 -

florian 20 years ago
parent
commit
c5f82ba6de
4 changed files with 61 additions and 36 deletions
  1. 6 0
      rtl/inc/dynarr.inc
  2. 2 0
      rtl/inc/dynarrh.inc
  3. 49 36
      rtl/inc/variant.inc
  4. 4 0
      rtl/inc/varianth.inc

+ 6 - 0
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 }
 { provide local access to dynarr_decr_ref for dynarr_setlength }
 procedure fpc_dynarray_incr_ref(p : pointer); [external name 'FPC_DYNARRAY_INCR_REF'];
 procedure fpc_dynarray_incr_ref(p : pointer); [external name 'FPC_DYNARRAY_INCR_REF'];
 
 
+
 { provide local access to dynarr_setlength }
 { provide local access to dynarr_setlength }
 procedure int_dynarray_setlength(var p : pointer;pti : pointer;
 procedure int_dynarray_setlength(var p : pointer;pti : pointer;
   dimcount : dword;dims : pdynarrayindex);[external name 'FPC_DYNARR_SETLENGTH'];
   dimcount : dword;dims : pdynarrayindex);[external name 'FPC_DYNARR_SETLENGTH'];
@@ -337,3 +338,8 @@ function fpc_dynarray_copy(psrc : pointer;ti : pointer;
   end;
   end;
 
 
 
 
+procedure DynArraySetLength(var a: Pointer; typeInfo: Pointer; dimCnt: SizeInt; lengthVec: PSizeInt);
+  begin
+    int_dynarray_setlength(a,typeInfo,dimCnt,lengthVec);
+  end;
+

+ 2 - 0
rtl/inc/dynarrh.inc

@@ -28,3 +28,5 @@ type
     eletype : pdynarraytypeinfo;
     eletype : pdynarraytypeinfo;
     vartype : longint;
     vartype : longint;
   end;
   end;
+  
+procedure DynArraySetLength(var a: Pointer; typeInfo: Pointer; dimCnt: SizeInt; lengthVec: PSizeInt);

+ 49 - 36
rtl/inc/variant.inc

@@ -150,21 +150,18 @@ function fpc_interface_to_variant(const i : iinterface) : variant;compilerproc;
 { Integer }
 { Integer }
 
 
 operator :=(const source : byte) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
 operator :=(const source : byte) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
-
 begin
 begin
   Variantmanager.varfromInt(Dest,Source,1);
   Variantmanager.varfromInt(Dest,Source,1);
 end;
 end;
 
 
 
 
 operator :=(const source : shortint) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
 operator :=(const source : shortint) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
-
 begin
 begin
   Variantmanager.varfromInt(Dest,Source,-1);
   Variantmanager.varfromInt(Dest,Source,-1);
 end;
 end;
 
 
 
 
 operator :=(const source : word) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
 operator :=(const source : word) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
-
 begin
 begin
   Variantmanager.varfromInt(Dest,Source,2);
   Variantmanager.varfromInt(Dest,Source,2);
 end;
 end;
@@ -304,6 +301,12 @@ operator :=(const source : tdatetime) dest : variant;{$ifdef SYSTEMINLINE}inline
     VariantManager.VarFromTDateTime(Dest,Source);
     VariantManager.VarFromTDateTime(Dest,Source);
   end;
   end;
 
 
+
+operator :=(const source : error) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
+  begin
+    Variantmanager.varfromInt(Dest,Source,-sizeof(error));
+  end;
+  
 {**********************************************************************
 {**********************************************************************
                        from Variant assignments
                        from Variant assignments
  **********************************************************************}
  **********************************************************************}
@@ -318,38 +321,33 @@ end;
 
 
 
 
 operator :=(const source : variant) dest : shortint;{$ifdef SYSTEMINLINE}inline;{$endif}
 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}
 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}
 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}
 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}
 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}
 operator :=(const source : variant) dest : qword;{$ifdef SYSTEMINLINE}inline;{$endif}
@@ -471,15 +469,15 @@ end;
 
 
 { Misc. }
 { Misc. }
 operator :=(const source : variant) dest : currency;{$ifdef SYSTEMINLINE}inline;{$endif}
 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}
 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}
 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);
     variantmanager.olevarfromvar(dest,source);
   end;
   end;
 
 
+
+operator :=(const source : variant) dest : error;{$ifdef SYSTEMINLINE}inline;{$endif}
+  begin
+    dest:=variantmanager.vartoint(source);
+  end;
 {**********************************************************************
 {**********************************************************************
                                Operators
                                Operators
  **********************************************************************}
  **********************************************************************}
@@ -781,6 +784,11 @@ operator :=(const source : olevariant) dest : tdatetime;{$ifdef SYSTEMINLINE}inl
   end;
   end;
 
 
 
 
+operator :=(const source : olevariant) dest : error;{$ifdef SYSTEMINLINE}inline;{$endif}
+  begin
+    dest:=variantmanager.vartoint(variant(tvardata(source)));
+  end;
+
 {**********************************************************************
 {**********************************************************************
                           to OLEVariant assignments
                           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}
 operator :=(const source : shortint) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
   begin
-    variantmanager.olevarfromint(dest,source,1);
+    variantmanager.olevarfromint(dest,source,-1);
   end;
   end;
 
 
 
 
 operator :=(const source : word) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
 operator :=(const source : word) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
   begin
-    variantmanager.olevarfromint(dest,source,1);
+    variantmanager.olevarfromint(dest,source,2);
   end;
   end;
 
 
 
 
 operator :=(const source : smallint) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
 operator :=(const source : smallint) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
   begin
-    variantmanager.olevarfromint(dest,source,1);
+    variantmanager.olevarfromint(dest,source,-2);
   end;
   end;
 
 
 
 
 operator :=(const source : dword) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
 operator :=(const source : dword) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
   begin
-    variantmanager.olevarfromint(dest,source,1);
+    variantmanager.olevarfromint(dest,source,4);
   end;
   end;
 
 
 
 
 operator :=(const source : longint) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
 operator :=(const source : longint) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
   begin
-    variantmanager.olevarfromint(dest,source,1);
+    variantmanager.olevarfromint(dest,source,-4);
   end;
   end;
 
 
 
 
 operator :=(const source : qword) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
 operator :=(const source : qword) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
   begin
-    variantmanager.olevarfromint(dest,source,1);
+    variantmanager.olevarfromint(dest,source,8);
   end;
   end;
 
 
 
 
 operator :=(const source : int64) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
 operator :=(const source : int64) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
   begin
   begin
-    variantmanager.olevarfromint(dest,source,1);
+    variantmanager.olevarfromint(dest,source,-8);
   end;
   end;
 
 
 { Boolean }
 { Boolean }
@@ -928,6 +936,11 @@ operator :=(const source : tdatetime) dest : olevariant;{$ifdef SYSTEMINLINE}inl
     variantmanager.varfromtdatetime(variant(tvardata(dest)),source);
     variantmanager.varfromtdatetime(variant(tvardata(dest)),source);
   end;
   end;
 
 
+
+operator :=(const source : error) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
+  begin
+    variantmanager.olevarfromint(dest,source,-sizeof(error));
+  end;
 {**********************************************************************
 {**********************************************************************
                       Variant manager functions
                       Variant manager functions
  **********************************************************************}
  **********************************************************************}

+ 4 - 0
rtl/inc/varianth.inc

@@ -247,6 +247,7 @@ operator :=(const source : comp) dest : variant;{$ifdef SYSTEMINLINE}inline;{$en
 { Misc. }
 { Misc. }
 operator :=(const source : currency) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
 operator :=(const source : currency) dest : variant;{$ifdef SYSTEMINLINE}inline;{$endif}
 operator :=(const source : tdatetime) 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
                        from Variant assignments
@@ -296,6 +297,7 @@ operator :=(const source : variant) dest : olevariant;{$ifdef SYSTEMINLINE}inlin
 { Misc. }
 { Misc. }
 operator :=(const source : variant) dest : currency;{$ifdef SYSTEMINLINE}inline;{$endif}
 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 : tdatetime;{$ifdef SYSTEMINLINE}inline;{$endif}
+operator :=(const source : variant) dest : error;{$ifdef SYSTEMINLINE}inline;{$endif}
 
 
 {**********************************************************************
 {**********************************************************************
                          Operators
                          Operators
@@ -370,6 +372,7 @@ operator :=(const source : olevariant) dest : comp;{$ifdef SYSTEMINLINE}inline;{
 { Misc. }
 { Misc. }
 operator :=(const source : olevariant) dest : currency;{$ifdef SYSTEMINLINE}inline;{$endif}
 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 : tdatetime;{$ifdef SYSTEMINLINE}inline;{$endif}
+operator :=(const source : olevariant) dest : error;{$ifdef SYSTEMINLINE}inline;{$endif}
 
 
 {**********************************************************************
 {**********************************************************************
                          to OLEVariant assignments
                          to OLEVariant assignments
@@ -416,6 +419,7 @@ operator :=(const source : comp) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{
 { Misc. }
 { Misc. }
 operator :=(const source : currency) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
 operator :=(const source : currency) dest : olevariant;{$ifdef SYSTEMINLINE}inline;{$endif}
 operator :=(const source : tdatetime) 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
                              OLEVariant Operators