فهرست منبع

+ init/cleaning code for variants added

florian 20 سال پیش
والد
کامیت
bd211ce900
2فایلهای تغییر یافته به همراه25 افزوده شده و 5 حذف شده
  1. 12 1
      rtl/inc/rtti.inc
  2. 13 4
      rtl/inc/variant.inc

+ 12 - 1
rtl/inc/rtti.inc

@@ -202,6 +202,10 @@ begin
     tkInterface:
       Intf_Incr_Ref(PPointer(Data)^);
 {$endif HASINTF}
+{$ifdef HASVARIANT}
+    tkVariant:
+      variant_addref(PVariant(Data)^);
+{$endif HASVARIANT}
   end;
 end;
 
@@ -231,6 +235,10 @@ begin
     tkInterface:
       Intf_Decr_Ref(PPointer(Data)^);
 {$endif HASINTF}
+{$ifdef HASVARIANT}
+    tkVariant:
+      variant_clear(PVariant(Data)^);
+{$endif HASVARIANT}
   end;
 end;
 
@@ -247,7 +255,10 @@ procedure fpc_finalize_array(data,typeinfo : pointer;count,size : longint); [Pub
 
 {
   $Log$
-  Revision 1.19  2004-11-02 15:52:04  florian
+  Revision 1.20  2005-01-08 20:43:44  florian
+    + init/cleaning code for variants added
+
+  Revision 1.19  2004/11/02 15:52:04  florian
     * fixed rtti reading of arrays for 64 bit
 
   Revision 1.18  2004/10/26 15:02:51  peter

+ 13 - 4
rtl/inc/variant.inc

@@ -34,27 +34,33 @@ procedure vardisperror;
     Compiler helper routines.
   ---------------------------------------------------------------------}
 
-
 procedure varclear(var v : tvardata);
 begin
    if not(v.vtype in [varempty,varerror,varnull]) then
      invalidvariantop;
 end;
 
-procedure variant_init(var v : variant);[Public,Alias:'FPC_VARIANT_INIT'];
 
+procedure variant_init(var v : variant);[Public,Alias:'FPC_VARIANT_INIT'];
   begin
      { calling the variant manager here is a problem because the static/global variants
        are initialized while the variant manager isn't assigned }
      fillchar(v,sizeof(variant),0);
   end;
 
-procedure variant_clear(var v : variant);[Public,Alias:'FPC_VARIANT_CLEAR'];
 
+procedure variant_clear(var v : variant);[Public,Alias:'FPC_VARIANT_CLEAR'];
   begin
      variantmanager.varclear(v);
   end;
 
+
+procedure variant_addref(var v : variant);[Public,Alias:'FPC_VARIANT_ADDREF'];
+  begin
+     variantmanager.varaddref(v);
+  end;
+
+
 Procedure fpc_write_text_variant(Len : Longint;var f : Text;const v : variant); iocheck; [Public,Alias:'FPC_WRITE_TEXT_VARIANT']; compilerproc;
 Begin
   If (InOutRes<>0) then
@@ -616,7 +622,10 @@ procedure initvariantmanager;
 
 {
   $Log$
-  Revision 1.20  2005-01-07 21:15:46  florian
+  Revision 1.21  2005-01-08 20:43:44  florian
+    + init/cleaning code for variants added
+
+  Revision 1.20  2005/01/07 21:15:46  florian
     + basic rtl support for variant <-> interface implemented
 
   Revision 1.19  2004/12/05 11:49:06  florian