Jelajahi Sumber

* fixed web bug #1707:
* tvarsym.getvaluesize doesn't return 0 anymore for dynarrays (found
by Florian)
* in genrtti, some more ppointer(data)^ tricks were necessary

Jonas Maebe 24 tahun lalu
induk
melakukan
879d8ccb44
2 mengubah file dengan 25 tambahan dan 6 penghapusan
  1. 8 1
      compiler/symsym.pas
  2. 17 5
      rtl/inc/genrtti.inc

+ 8 - 1
compiler/symsym.pas

@@ -1335,6 +1335,7 @@ implementation
         if assigned(vartype.def) and
            (varspez=vs_value) and
            ((vartype.def.deftype<>arraydef) or
+            tarraydef(vartype.def).isDynamicArray or
             (tarraydef(vartype.def).highrange>=tarraydef(vartype.def).lowrange)) then
           getvaluesize:=vartype.def.size
         else
@@ -2439,7 +2440,13 @@ implementation
 end.
 {
   $Log$
-  Revision 1.27  2001-11-18 18:43:16  peter
+  Revision 1.28  2001-11-30 16:25:35  jonas
+    * fixed web bug 1707:
+       * tvarsym.getvaluesize doesn't return 0 anymore for dynarrays (found
+         by Florian)
+       * in genrtti, some more ppointer(data)^ tricks were necessary
+
+  Revision 1.27  2001/11/18 18:43:16  peter
     * overloading supported in child classes
     * fixed parsing of classes with private and virtual and overloaded
       so it is compatible with delphi

+ 17 - 5
rtl/inc/genrtti.inc

@@ -111,10 +111,10 @@ begin
       end;
 {$ifdef HASINTF}
     tkInterface:
-      Intf_Decr_Ref(Data);
+      Intf_Decr_Ref(PPointer(Data)^);
 {$endif HASINTF}
     tkDynArray:
-      fpc_dynarray_decr_ref(Data,TypeInfo);
+      fpc_dynarray_decr_ref(PPointer(Data)^,TypeInfo);
 {$ifdef HASVARIANT}
     tkVariant:
       variant_clear(Variant(PVarData(Data)^))
@@ -168,6 +168,12 @@ begin
         With PRecRec(Temp)^.elements[I] do
           int_AddRef (Data+Offset,Info);
       end;
+    tkDynArray:
+      fpc_dynarray_incr_ref(PPointer(Data)^,TypeInfo);
+{$ifdef HASINTF}
+    tkInterface:
+      Intf_Incr_Ref(PPointer(Data)^);
+{$endif HASINTF}
   end;
 end;
 {$endif}
@@ -215,10 +221,10 @@ begin
           fpc_DecRef (Data+Offset,Info);
       end;
     tkDynArray:
-      fpc_dynarray_decr_ref(Data,TypeInfo);
+      fpc_dynarray_decr_ref(PPointer(Data)^,TypeInfo);
 {$ifdef HASINTF}
     tkInterface:
-      Intf_Decr_Ref(Data);
+      Intf_Decr_Ref(PPointer(Data)^);
 {$endif HASINTF}
   end;
 end;
@@ -236,7 +242,13 @@ procedure fpc_FinalizeArray(data,typeinfo : pointer;count,size : longint); [Publ
 
 {
  $Log$
- Revision 1.9  2001-11-22 07:33:08  michael
+ Revision 1.10  2001-11-30 16:25:35  jonas
+   * fixed web bug 1707:
+      * tvarsym.getvaluesize doesn't return 0 anymore for dynarrays (found
+        by Florian)
+      * in genrtti, some more ppointer(data)^ tricks were necessary
+
+ Revision 1.9  2001/11/22 07:33:08  michael
   * Fixed memory corruption with finalize() of ansistring in a class
 
  Revision 1.8  2001/11/17 16:56:08  florian