mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-16 14:09:41 +02:00
* Change pointer-to-array of deref to dynamic array
This commit is contained in:
parent
166a24ae77
commit
f7edf0355a
@ -31,15 +31,14 @@ uses
|
|||||||
wpobase;
|
wpobase;
|
||||||
|
|
||||||
type
|
type
|
||||||
pderefarray = ^tderefarray;
|
tderefarray = array of tderef;
|
||||||
tderefarray = array[0..1024*1024-1] of tderef;
|
|
||||||
|
|
||||||
tunitwpoinfo = class(tunitwpoinfobase)
|
tunitwpoinfo = class(tunitwpoinfobase)
|
||||||
{ devirtualisation information -- begin }
|
{ devirtualisation information -- begin }
|
||||||
private
|
private
|
||||||
fcreatedobjtypesderefs: pderefarray;
|
fcreatedobjtypesderefs: tderefarray;
|
||||||
fcreatedclassrefobjtypesderefs: pderefarray;
|
fcreatedclassrefobjtypesderefs: tderefarray;
|
||||||
fmaybecreatedbyclassrefdeftypesderefs: pderefarray;
|
fmaybecreatedbyclassrefdeftypesderefs: tderefarray;
|
||||||
fcalledvmtentriestemplist: tfpobjectlist;
|
fcalledvmtentriestemplist: tfpobjectlist;
|
||||||
{ devirtualisation information -- end }
|
{ devirtualisation information -- end }
|
||||||
|
|
||||||
@ -77,27 +76,12 @@ implementation
|
|||||||
|
|
||||||
procedure tunitwpoinfo.clearderefinfo;
|
procedure tunitwpoinfo.clearderefinfo;
|
||||||
begin
|
begin
|
||||||
if assigned(fcreatedobjtypesderefs) then
|
fcreatedobjtypesderefs:=nil;
|
||||||
begin
|
fcreatedclassrefobjtypesderefs:=nil;
|
||||||
freemem(fcreatedobjtypesderefs);
|
fmaybecreatedbyclassrefdeftypesderefs:=nil;
|
||||||
fcreatedobjtypesderefs:=nil;
|
|
||||||
end;
|
|
||||||
if assigned(fcreatedclassrefobjtypesderefs) then
|
|
||||||
begin
|
|
||||||
freemem(fcreatedclassrefobjtypesderefs);
|
|
||||||
fcreatedclassrefobjtypesderefs:=nil;
|
|
||||||
end;
|
|
||||||
if assigned(fmaybecreatedbyclassrefdeftypesderefs) then
|
|
||||||
begin
|
|
||||||
freemem(fmaybecreatedbyclassrefdeftypesderefs);
|
|
||||||
fmaybecreatedbyclassrefdeftypesderefs:=nil;
|
|
||||||
end;
|
|
||||||
|
|
||||||
if assigned(fcalledvmtentriestemplist) then
|
fcalledvmtentriestemplist.free;
|
||||||
begin
|
fcalledvmtentriestemplist:=nil;
|
||||||
fcalledvmtentriestemplist.free;
|
|
||||||
fcalledvmtentriestemplist:=nil;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor tunitwpoinfo.destroy;
|
destructor tunitwpoinfo.destroy;
|
||||||
@ -116,13 +100,13 @@ implementation
|
|||||||
}
|
}
|
||||||
ppufile.putlongint(fcreatedobjtypes.count);
|
ppufile.putlongint(fcreatedobjtypes.count);
|
||||||
for i:=0 to fcreatedobjtypes.count-1 do
|
for i:=0 to fcreatedobjtypes.count-1 do
|
||||||
ppufile.putderef(fcreatedobjtypesderefs^[i]);
|
ppufile.putderef(fcreatedobjtypesderefs[i]);
|
||||||
ppufile.putlongint(fcreatedclassrefobjtypes.count);
|
ppufile.putlongint(fcreatedclassrefobjtypes.count);
|
||||||
for i:=0 to fcreatedclassrefobjtypes.count-1 do
|
for i:=0 to fcreatedclassrefobjtypes.count-1 do
|
||||||
ppufile.putderef(fcreatedclassrefobjtypesderefs^[i]);
|
ppufile.putderef(fcreatedclassrefobjtypesderefs[i]);
|
||||||
ppufile.putlongint(fmaybecreatedbyclassrefdeftypes.count);
|
ppufile.putlongint(fmaybecreatedbyclassrefdeftypes.count);
|
||||||
for i:=0 to fmaybecreatedbyclassrefdeftypes.count-1 do
|
for i:=0 to fmaybecreatedbyclassrefdeftypes.count-1 do
|
||||||
ppufile.putderef(fmaybecreatedbyclassrefdeftypesderefs^[i]);
|
ppufile.putderef(fmaybecreatedbyclassrefdeftypesderefs[i]);
|
||||||
|
|
||||||
ppufile.putlongint(fcalledvmtentriestemplist.count);
|
ppufile.putlongint(fcalledvmtentriestemplist.count);
|
||||||
for i:=0 to fcalledvmtentriestemplist.count-1 do
|
for i:=0 to fcalledvmtentriestemplist.count-1 do
|
||||||
@ -154,23 +138,23 @@ implementation
|
|||||||
len:=ppufile.getlongint;
|
len:=ppufile.getlongint;
|
||||||
fcreatedobjtypes:=tfpobjectlist.create(false);
|
fcreatedobjtypes:=tfpobjectlist.create(false);
|
||||||
fcreatedobjtypes.count:=len;
|
fcreatedobjtypes.count:=len;
|
||||||
getmem(fcreatedobjtypesderefs,len*sizeof(tderef));
|
setlength(fcreatedobjtypesderefs,len);
|
||||||
for i:=0 to len-1 do
|
for i:=0 to len-1 do
|
||||||
ppufile.getderef(fcreatedobjtypesderefs^[i]);
|
ppufile.getderef(fcreatedobjtypesderefs[i]);
|
||||||
|
|
||||||
len:=ppufile.getlongint;
|
len:=ppufile.getlongint;
|
||||||
fcreatedclassrefobjtypes:=tfpobjectlist.create(false);
|
fcreatedclassrefobjtypes:=tfpobjectlist.create(false);
|
||||||
fcreatedclassrefobjtypes.count:=len;
|
fcreatedclassrefobjtypes.count:=len;
|
||||||
getmem(fcreatedclassrefobjtypesderefs,len*sizeof(tderef));
|
setlength(fcreatedclassrefobjtypesderefs,len);
|
||||||
for i:=0 to len-1 do
|
for i:=0 to len-1 do
|
||||||
ppufile.getderef(fcreatedclassrefobjtypesderefs^[i]);
|
ppufile.getderef(fcreatedclassrefobjtypesderefs[i]);
|
||||||
|
|
||||||
len:=ppufile.getlongint;
|
len:=ppufile.getlongint;
|
||||||
fmaybecreatedbyclassrefdeftypes:=tfpobjectlist.create(false);
|
fmaybecreatedbyclassrefdeftypes:=tfpobjectlist.create(false);
|
||||||
fmaybecreatedbyclassrefdeftypes.count:=len;
|
fmaybecreatedbyclassrefdeftypes.count:=len;
|
||||||
getmem(fmaybecreatedbyclassrefdeftypesderefs,len*sizeof(tderef));
|
setlength(fmaybecreatedbyclassrefdeftypesderefs,len);
|
||||||
for i:=0 to len-1 do
|
for i:=0 to len-1 do
|
||||||
ppufile.getderef(fmaybecreatedbyclassrefdeftypesderefs^[i]);
|
ppufile.getderef(fmaybecreatedbyclassrefdeftypesderefs[i]);
|
||||||
|
|
||||||
len:=ppufile.getlongint;
|
len:=ppufile.getlongint;
|
||||||
fcalledvmtentriestemplist:=tfpobjectlist.create(false);
|
fcalledvmtentriestemplist:=tfpobjectlist.create(false);
|
||||||
@ -190,17 +174,17 @@ implementation
|
|||||||
may already have been allocated }
|
may already have been allocated }
|
||||||
clearderefinfo;
|
clearderefinfo;
|
||||||
|
|
||||||
getmem(fcreatedobjtypesderefs,fcreatedobjtypes.count*sizeof(tderef));
|
setlength(fcreatedobjtypesderefs,fcreatedobjtypes.count);
|
||||||
for i:=0 to fcreatedobjtypes.count-1 do
|
for i:=0 to fcreatedobjtypes.count-1 do
|
||||||
fcreatedobjtypesderefs^[i].build(fcreatedobjtypes[i]);
|
fcreatedobjtypesderefs[i].build(fcreatedobjtypes[i]);
|
||||||
|
|
||||||
getmem(fcreatedclassrefobjtypesderefs,fcreatedclassrefobjtypes.count*sizeof(tderef));
|
setlength(fcreatedclassrefobjtypesderefs,fcreatedclassrefobjtypes.count);
|
||||||
for i:=0 to fcreatedclassrefobjtypes.count-1 do
|
for i:=0 to fcreatedclassrefobjtypes.count-1 do
|
||||||
fcreatedclassrefobjtypesderefs^[i].build(fcreatedclassrefobjtypes[i]);
|
fcreatedclassrefobjtypesderefs[i].build(fcreatedclassrefobjtypes[i]);
|
||||||
|
|
||||||
getmem(fmaybecreatedbyclassrefdeftypesderefs,fmaybecreatedbyclassrefdeftypes.count*sizeof(tderef));
|
setlength(fmaybecreatedbyclassrefdeftypesderefs,fmaybecreatedbyclassrefdeftypes.count);
|
||||||
for i:=0 to fmaybecreatedbyclassrefdeftypes.count-1 do
|
for i:=0 to fmaybecreatedbyclassrefdeftypes.count-1 do
|
||||||
fmaybecreatedbyclassrefdeftypesderefs^[i].build(fmaybecreatedbyclassrefdeftypes[i]);
|
fmaybecreatedbyclassrefdeftypesderefs[i].build(fmaybecreatedbyclassrefdeftypes[i]);
|
||||||
|
|
||||||
fcalledvmtentriestemplist:=tfpobjectlist.create(false);
|
fcalledvmtentriestemplist:=tfpobjectlist.create(false);
|
||||||
fcalledvmtentriestemplist.count:=fcalledvmtentries.count;
|
fcalledvmtentriestemplist.count:=fcalledvmtentries.count;
|
||||||
@ -241,13 +225,13 @@ implementation
|
|||||||
re-resolving in case a unit needs to be reloaded
|
re-resolving in case a unit needs to be reloaded
|
||||||
}
|
}
|
||||||
for i:=0 to fcreatedobjtypes.count-1 do
|
for i:=0 to fcreatedobjtypes.count-1 do
|
||||||
fcreatedobjtypes[i]:=fcreatedobjtypesderefs^[i].resolve;
|
fcreatedobjtypes[i]:=fcreatedobjtypesderefs[i].resolve;
|
||||||
|
|
||||||
for i:=0 to fcreatedclassrefobjtypes.count-1 do
|
for i:=0 to fcreatedclassrefobjtypes.count-1 do
|
||||||
fcreatedclassrefobjtypes[i]:=fcreatedclassrefobjtypesderefs^[i].resolve;
|
fcreatedclassrefobjtypes[i]:=fcreatedclassrefobjtypesderefs[i].resolve;
|
||||||
|
|
||||||
for i:=0 to fmaybecreatedbyclassrefdeftypes.count-1 do
|
for i:=0 to fmaybecreatedbyclassrefdeftypes.count-1 do
|
||||||
fmaybecreatedbyclassrefdeftypes[i]:=fmaybecreatedbyclassrefdeftypesderefs^[i].resolve;
|
fmaybecreatedbyclassrefdeftypes[i]:=fmaybecreatedbyclassrefdeftypesderefs[i].resolve;
|
||||||
|
|
||||||
{ in case we are re-resolving, free previous batch }
|
{ in case we are re-resolving, free previous batch }
|
||||||
if (fcalledvmtentries.count<>0) then
|
if (fcalledvmtentries.count<>0) then
|
||||||
|
Loading…
Reference in New Issue
Block a user