mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-13 04:19:31 +02:00
* while loop replaced with a repeat..until loop in InternalTinyFreeMem
git-svn-id: trunk@28161 -
This commit is contained in:
parent
441e6c6083
commit
4e2cc365d1
@ -105,72 +105,70 @@
|
|||||||
b, p, prev: PTinyHeapBlock;
|
b, p, prev: PTinyHeapBlock;
|
||||||
concatenated: boolean;
|
concatenated: boolean;
|
||||||
begin
|
begin
|
||||||
concatenated := true;
|
repeat
|
||||||
while concatenated do
|
concatenated := false;
|
||||||
begin
|
b := addr;
|
||||||
concatenated := false;
|
|
||||||
b := addr;
|
|
||||||
|
|
||||||
b^.Next := TinyHeapBlocks;
|
b^.Next := TinyHeapBlocks;
|
||||||
b^.Size := Size;
|
b^.Size := Size;
|
||||||
b^.EndAddr := pointer(ptruint(addr)+size);
|
b^.EndAddr := pointer(ptruint(addr)+size);
|
||||||
|
|
||||||
if TinyHeapBlocks = nil then
|
if TinyHeapBlocks = nil then
|
||||||
TinyHeapBlocks := b
|
TinyHeapBlocks := b
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
p := TinyHeapBlocks;
|
p := TinyHeapBlocks;
|
||||||
prev := nil;
|
prev := nil;
|
||||||
|
|
||||||
while assigned(p) do
|
while assigned(p) do
|
||||||
begin
|
begin
|
||||||
if p^.EndAddr = addr then
|
if p^.EndAddr = addr then
|
||||||
begin
|
begin
|
||||||
addr:=p;
|
addr:=p;
|
||||||
size:=p^.size+size;
|
size:=p^.size+size;
|
||||||
if prev = nil then
|
if prev = nil then
|
||||||
TinyHeapBlocks:=p^.next
|
TinyHeapBlocks:=p^.next
|
||||||
else
|
else
|
||||||
prev^.next:=p^.next;
|
prev^.next:=p^.next;
|
||||||
concatenated:=true;
|
concatenated:=true;
|
||||||
break;
|
break;
|
||||||
end
|
end
|
||||||
else if p = b^.EndAddr then
|
else if p = b^.EndAddr then
|
||||||
begin
|
begin
|
||||||
size:=p^.size+size;
|
size:=p^.size+size;
|
||||||
if prev = nil then
|
if prev = nil then
|
||||||
TinyHeapBlocks:=p^.next
|
TinyHeapBlocks:=p^.next
|
||||||
else
|
else
|
||||||
prev^.next:=p^.next;
|
prev^.next:=p^.next;
|
||||||
concatenated:=true;
|
concatenated:=true;
|
||||||
break;
|
break;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
prev := p;
|
|
||||||
p := p^.next;
|
|
||||||
end;
|
|
||||||
|
|
||||||
if not concatenated then
|
prev := p;
|
||||||
begin
|
p := p^.next;
|
||||||
p := TinyHeapBlocks;
|
end;
|
||||||
prev := nil;
|
|
||||||
|
|
||||||
while assigned(p) and (p^.Size < size) do
|
if not concatenated then
|
||||||
begin
|
begin
|
||||||
prev := p;
|
p := TinyHeapBlocks;
|
||||||
p := p^.Next;
|
prev := nil;
|
||||||
end;
|
|
||||||
|
|
||||||
if assigned(prev) then
|
while assigned(p) and (p^.Size < size) do
|
||||||
begin
|
begin
|
||||||
b^.Next := p;
|
prev := p;
|
||||||
prev^.Next := b;
|
p := p^.Next;
|
||||||
end
|
end;
|
||||||
else
|
|
||||||
TinyHeapBlocks := b;
|
if assigned(prev) then
|
||||||
end;
|
begin
|
||||||
end;
|
b^.Next := p;
|
||||||
end;
|
prev^.Next := b;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
TinyHeapBlocks := b;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
until not concatenated;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function SysTinyFreeMem(Addr: Pointer): ptruint;
|
function SysTinyFreeMem(Addr: Pointer): ptruint;
|
||||||
|
Loading…
Reference in New Issue
Block a user