Просмотр исходного кода

* Explicitly increment and decrement ref count to keep copy of destination string in fpc_AnsiStr_Concat_multi and fpc_WideStr_Concat_multi. It prevents note "Local variable "destcopy" is assigned but never used".

git-svn-id: trunk@9554 -
yury 17 лет назад
Родитель
Сommit
cd03a2893b
2 измененных файлов с 10 добавлено и 4 удалено
  1. 5 2
      rtl/inc/astrings.inc
  2. 5 2
      rtl/inc/wustrings.inc

+ 5 - 2
rtl/inc/astrings.inc

@@ -250,13 +250,14 @@ Var
   p,pc        : pointer;
   Size,NewLen,
   OldDestLen  : SizeInt;
-  destcopy    : ansistring;
+  destcopy    : pointer;
 begin
   if high(sarr)=0 then
     begin
       DestS:='';
       exit;
     end;
+  destcopy:=nil;
   lowstart:=low(sarr);
   if Pointer(DestS)=Pointer(sarr[lowstart]) then
     inc(lowstart);
@@ -269,7 +270,8 @@ begin
           { if DestS is used somewhere in the middle of the expression,
             we need to make sure the original string still exists after
             we empty/modify DestS                                       }
-          destcopy:=dests;
+          destcopy:=pointer(dests);
+          fpc_AnsiStr_Incr_Ref(destcopy);
           lowstart:=low(sarr);
           break;
         end;
@@ -298,6 +300,7 @@ begin
           inc(pc,size);
         end;
     end;
+  fpc_AnsiStr_Decr_Ref(destcopy);
 end;
 
 

+ 5 - 2
rtl/inc/wustrings.inc

@@ -578,13 +578,14 @@ Var
   p,pc        : pointer;
   Size,NewLen,
   OldDestLen  : SizeInt;
-  destcopy    : widestring;
+  destcopy    : pointer;
 begin
   if high(sarr)=0 then
     begin
       DestS:='';
       exit;
     end;
+  destcopy:=nil;
   lowstart:=low(sarr);
   if Pointer(DestS)=Pointer(sarr[lowstart]) then
     inc(lowstart);
@@ -597,7 +598,8 @@ begin
           { if DestS is used somewhere in the middle of the expression,
             we need to make sure the original string still exists after
             we empty/modify DestS                                       }
-          destcopy:=dests;
+          destcopy:=pointer(dests);
+          fpc_WideStr_Incr_Ref(destcopy);
           lowstart:=low(sarr);
           break;
         end;
@@ -626,6 +628,7 @@ begin
           inc(pc,size*sizeof(WideChar));
         end;
     end;
+  fpc_WideStr_Decr_Ref(destcopy);
 end;
 
 {$endif STR_CONCAT_PROCS}