diff --git a/rtl/inc/dynarr.inc b/rtl/inc/dynarr.inc index 73f1cfb5c0..81f1b6e6b5 100644 --- a/rtl/inc/dynarr.inc +++ b/rtl/inc/dynarr.inc @@ -34,6 +34,7 @@ type eletype : pdynarraytypeinfo; end; + function fpc_dynarray_rangecheck(p : pointer;i : tdynarrayindex) : tdynarrayindex;[Public,Alias:'FPC_DYNARRAY_RANGECHECK']; {$ifdef hascompilerproc} compilerproc; {$endif} begin if not(assigned(p)) or (i<0) or (i>pdynarray(p-sizeof(tdynarray))^.high) then @@ -58,8 +59,9 @@ function fpc_dynarray_high(p : pointer) : tdynarrayindex;[Public,Alias:'FPC_DYNA fpc_dynarray_high:=-1; end; + { releases and finalizes the data of a dyn. array and sets p to nil } -procedure fpc_dynarray_clear(var p : pointer;ti : pointer); [Public,Alias:'FPC_DYNARRAY_CLEAR']; {$ifdef hascompilerproc} compilerproc; {$endif} +procedure fpc_dynarray_clear_internal(p : pointer;ti : pointer); begin if p=nil then exit; @@ -73,7 +75,13 @@ procedure fpc_dynarray_clear(var p : pointer;ti : pointer); [Public,Alias:'FPC_D { release the data } freemem(p); - p:=nil; + end; + + +procedure fpc_dynarray_clear(var p : pointer;ti : pointer); [Public,Alias:'FPC_DYNARRAY_CLEAR']; {$ifdef hascompilerproc} compilerproc; {$endif} + begin + fpc_dynarray_clear_internal(p-sizeof(tdynarray),ti); + p:=nil; end; {$ifdef hascompilerproc} @@ -96,7 +104,7 @@ procedure fpc_dynarray_decr_ref(var p : pointer;ti : pointer);saveregisters;[Pub { decr. ref. count } { should we remove the array? } if declocked(realp^.refcount) then - fpc_dynarray_clear(realp,pdynarraytypeinfo(ti)); + fpc_dynarray_clear_internal(realp,pdynarraytypeinfo(ti)); p := nil; end; @@ -171,7 +179,7 @@ procedure fpc_dynarray_setlength(var p : pointer;pti : pointer; { if the new dimension is 0, we've to release all data } if dims[dimcount-1]=0 then begin - fpc_dynarray_clear(realp,pdynarraytypeinfo(pti)); + fpc_dynarray_clear_internal(realp,pdynarraytypeinfo(pti)); p:=nil; exit; end; @@ -201,7 +209,7 @@ procedure fpc_dynarray_setlength(var p : pointer;pti : pointer; { if the array is now removed } { fpc_dynarray_decr_ref(p,ti); } if declocked(realp^.refcount) then - fpc_dynarray_clear(realp,pdynarraytypeinfo(ti)); + fpc_dynarray_clear_internal(realp,pdynarraytypeinfo(ti)); end else if dims[dimcount-1]<>realp^.high+1 then begin @@ -302,7 +310,10 @@ procedure fpc_dynarray_copy(var pdest : pointer;psrc : pointer;ti : pointer; { $Log$ - Revision 1.24 2004-05-02 15:15:58 peter + Revision 1.25 2004-05-20 15:56:32 florian + * fixed <dyn. array>:=nil; + + Revision 1.24 2004/05/02 15:15:58 peter * use freemem() without size Revision 1.23 2003/10/29 21:00:34 peter