Quellcode durchsuchen

* Added fpc_dynarray_assign (a helper for dynamic array assignments), added local access to fpc_intf_assign, and switched fpc_copy to use assignment helpers instead of incr_ref/decr_ref combinations.

git-svn-id: trunk@20114 -
sergei vor 13 Jahren
Ursprung
Commit
568ef396fb
4 geänderte Dateien mit 14 neuen und 15 gelöschten Zeilen
  1. 1 0
      rtl/inc/compproc.inc
  2. 9 0
      rtl/inc/dynarr.inc
  3. 1 0
      rtl/inc/objpas.inc
  4. 3 15
      rtl/inc/rtti.inc

+ 1 - 0
rtl/inc/compproc.inc

@@ -64,6 +64,7 @@ procedure fpc_dynarray_clear(var p : pointer;ti : pointer); compilerproc;
 procedure fpc_dynarray_decr_ref(var p : pointer;ti : pointer); compilerproc;
 procedure fpc_dynarray_incr_ref(p : pointer); compilerproc;
 procedure fpc_dynarray_setlength(var p : pointer;pti : pointer; dimcount : sizeint;dims : pdynarrayindex); compilerproc;
+procedure fpc_dynarray_assign(var dest : pointer; src : pointer; ti: pointer); compilerproc;
 {$endif FPC_HAS_FEATURE_DYNARRAYS}
 
 { Str() support }

+ 9 - 0
rtl/inc/dynarr.inc

@@ -134,6 +134,15 @@ procedure fpc_dynarray_incr_ref(p : pointer);[Public,Alias:'FPC_DYNARRAY_INCR_RE
 procedure fpc_dynarray_incr_ref(p : pointer); [external name 'FPC_DYNARRAY_INCR_REF'];
 
 
+procedure fpc_dynarray_assign(var dest: Pointer; src: Pointer; ti: pointer);[public,alias:'FPC_DYNARRAY_ASSIGN']; compilerproc;
+  begin
+    fpc_dynarray_incr_ref(src);
+    fpc_dynarray_decr_ref(dest,ti);
+    Dest:=Src;
+  end;
+
+procedure fpc_dynarray_assign(var dest: Pointer; src: Pointer; ti: pointer);[external name 'FPC_DYNARRAY_ASSIGN'];
+
 { provide local access to dynarr_setlength }
 procedure int_dynarray_setlength(var p : pointer;pti : pointer;
   dimcount : sizeint;dims : pdynarrayindex);[external name 'FPC_DYNARR_SETLENGTH'];

+ 1 - 0
rtl/inc/objpas.inc

@@ -82,6 +82,7 @@
          D:=S;
       end;
 
+    procedure fpc_intf_assign(var D: pointer; const s: pointer); [external name 'FPC_INTF_ASSIGN'];
 
     {procedure fpc_intf_assign_by_iid(var D: pointer; const S: pointer; const iid: TGUID);[public,alias: 'FPC_INTF_ASSIGN2']; compilerproc;
       var

+ 3 - 15
rtl/inc/rtti.inc

@@ -275,11 +275,7 @@ begin
   case PByte(TypeInfo)^ of
 {$ifdef FPC_HAS_FEATURE_ANSISTRINGS}
     tkAstring:
-      begin
-        fpc_AnsiStr_Incr_Ref(PPointer(Src)^);
-        fpc_AnsiStr_Decr_Ref(PPointer(Dest)^);
-        PPointer(Dest)^:=PPointer(Src)^;
-      end;
+      fpc_AnsiStr_Assign(PPointer(Dest)^,PPointer(Src)^);
 {$endif FPC_HAS_FEATURE_ANSISTRINGS}
 {$ifdef FPC_HAS_FEATURE_WIDESTRINGS}
   {$ifndef FPC_WIDESTRING_EQUAL_UNICODESTRING}
@@ -325,18 +321,10 @@ begin
       end;
 {$ifdef FPC_HAS_FEATURE_DYNARRAYS}
     tkDynArray:
-      begin
-        fpc_dynarray_Incr_Ref(PPointer(Src)^);
-        fpc_dynarray_Decr_Ref(PPointer(Dest)^,typeinfo);
-        PPointer(Dest)^:=PPointer(Src)^;
-      end;
+      fpc_dynarray_assign(PPointer(Dest)^,PPointer(Src)^,typeinfo);
 {$endif FPC_HAS_FEATURE_DYNARRAYS}
     tkInterface:
-      begin
-        Intf_Incr_Ref(PPointer(Src)^);
-        Intf_Decr_Ref(PPointer(Dest)^);
-        PPointer(Dest)^:=PPointer(Src)^;
-      end;
+      fpc_intf_assign(PPointer(Dest)^,PPointer(Src)^);
 {$ifdef FPC_HAS_FEATURE_VARIANTS}
     tkVariant:
       begin