Sfoglia il codice sorgente

* quicker finalization of dyn. arrays, thanks to the hint of Volker Zipfel

git-svn-id: trunk@11357 -
florian 17 anni fa
parent
commit
f56b741948
2 ha cambiato i file con 7 aggiunte e 5 eliminazioni
  1. 1 1
      rtl/inc/compproc.inc
  2. 6 4
      rtl/inc/rtti.inc

+ 1 - 1
rtl/inc/compproc.inc

@@ -470,7 +470,7 @@ Procedure fpc_Initialize (Data,TypeInfo : pointer); compilerproc;
 Procedure fpc_finalize (Data,TypeInfo: Pointer); compilerproc;
 Procedure fpc_Addref (Data,TypeInfo : Pointer); compilerproc;
 Procedure fpc_DecRef (Data,TypeInfo : Pointer);  compilerproc;
-procedure fpc_finalize_array(data,typeinfo : pointer;count,size : longint); compilerproc;
+procedure fpc_finalize_array(data,typeinfo : pointer;count,size : SizeInt); compilerproc;
 Function fpc_Copy (Src, Dest, TypeInfo : Pointer) : SizeInt; compilerproc;
 Procedure fpc_Copy_proc (Src, Dest, TypeInfo : Pointer); compilerproc; inline;
 {$endif FPC_HAS_FEATURE_RTTI}

+ 6 - 4
rtl/inc/rtti.inc

@@ -335,11 +335,13 @@ begin
 end;
 
 
-procedure fpc_finalize_array(data,typeinfo : pointer;count,size : longint); [Public,Alias:'FPC_FINALIZEARRAY'];  compilerproc;
+procedure fpc_finalize_array(data,typeinfo : pointer;count,size : SizeInt); [Public,Alias:'FPC_FINALIZEARRAY'];  compilerproc;
   var
-     i : longint;
+     i : SizeInt;
   begin
-     for i:=0 to count-1 do
-       int_finalize(data+size*i,typeinfo);
+     if not(PByte(typeinfo)^ in [tkInteger,tkChar,tkEnumeration,tkFloat,tkSet,
+       tkMethod,tkSString,tkLString,tkWChar,tkBool,tkInt64,tkQWord]) then
+       for i:=0 to count-1 do
+         int_finalize(data+size*i,typeinfo);
   end;