mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 20:09:25 +02:00
* write implementation units in implementation part of the ppu
so it doesn't confuse the unit loading
This commit is contained in:
parent
d4a94d9294
commit
28c96ab8e2
@ -67,7 +67,7 @@ interface
|
||||
procedure writeusedmacro(p:TNamedIndexItem;arg:pointer);
|
||||
procedure writeusedmacros;
|
||||
procedure writesourcefiles;
|
||||
procedure writeusedunit;
|
||||
procedure writeusedunit(intf:boolean);
|
||||
procedure writelinkcontainer(var p:tlinkcontainer;id:byte;strippath:boolean);
|
||||
procedure putasmsymbol_in_idx(s:tnamedindexitem;arg:pointer);
|
||||
procedure writeasmsymbols;
|
||||
@ -428,9 +428,10 @@ uses
|
||||
end;
|
||||
|
||||
|
||||
procedure tppumodule.writeusedunit;
|
||||
procedure tppumodule.writeusedunit(intf:boolean);
|
||||
var
|
||||
hp : tused_unit;
|
||||
oldcrc : boolean;
|
||||
begin
|
||||
{ renumber the units for derefence writing }
|
||||
numberunits;
|
||||
@ -438,16 +439,16 @@ uses
|
||||
hp:=tused_unit(used_units.first);
|
||||
while assigned(hp) do
|
||||
begin
|
||||
{ implementation units should not change
|
||||
the CRC PM }
|
||||
ppufile.do_crc:=hp.in_interface;
|
||||
ppufile.putstring(hp.u.realmodulename^);
|
||||
{ the checksum should not affect the crc of this unit ! (PFV) }
|
||||
ppufile.do_crc:=false;
|
||||
ppufile.putlongint(longint(hp.checksum));
|
||||
ppufile.putlongint(longint(hp.interface_checksum));
|
||||
ppufile.putbyte(byte(hp.in_interface));
|
||||
ppufile.do_crc:=true;
|
||||
if hp.in_interface=intf then
|
||||
begin
|
||||
ppufile.putstring(hp.u.realmodulename^);
|
||||
{ the checksum should not affect the crc of this unit ! (PFV) }
|
||||
oldcrc:=ppufile.do_crc;
|
||||
ppufile.do_crc:=false;
|
||||
ppufile.putlongint(longint(hp.checksum));
|
||||
ppufile.putlongint(longint(hp.interface_checksum));
|
||||
ppufile.do_crc:=oldcrc;
|
||||
end;
|
||||
hp:=tused_unit(hp.next);
|
||||
end;
|
||||
ppufile.do_interface_crc:=true;
|
||||
@ -688,7 +689,6 @@ uses
|
||||
hs:=ppufile.getstring;
|
||||
checksum:=cardinal(ppufile.getlongint);
|
||||
intfchecksum:=cardinal(ppufile.getlongint);
|
||||
in_interface:=(ppufile.getbyte<>0);
|
||||
{ set the state of this unit before registering, this is
|
||||
needed for a correct circular dependency check }
|
||||
hp:=registerunit(self,hs,'');
|
||||
@ -812,6 +812,8 @@ uses
|
||||
repeat
|
||||
b:=ppufile.readentry;
|
||||
case b of
|
||||
ibloadunit :
|
||||
readloadunit;
|
||||
ibasmsymbols :
|
||||
readasmsymbols;
|
||||
ibendimplementation :
|
||||
@ -895,7 +897,9 @@ uses
|
||||
|
||||
writesourcefiles;
|
||||
writeusedmacros;
|
||||
writeusedunit;
|
||||
|
||||
{ write interface uses }
|
||||
writeusedunit(true);
|
||||
|
||||
{ write the objectfiles and libraries that come for this unit,
|
||||
preserve the containers becuase they are still needed to load
|
||||
@ -918,6 +922,9 @@ uses
|
||||
{ everything after this doesn't affect the crc }
|
||||
ppufile.do_crc:=false;
|
||||
|
||||
{ write implementation uses }
|
||||
writeusedunit(false);
|
||||
|
||||
{ write asmsymbols }
|
||||
writeasmsymbols;
|
||||
|
||||
@ -992,7 +999,7 @@ uses
|
||||
ppufile.writeentry(ibmodulename);
|
||||
|
||||
{ the interface units affect the crc }
|
||||
writeusedunit;
|
||||
writeusedunit(true);
|
||||
|
||||
ppufile.writeentry(ibendinterface);
|
||||
|
||||
@ -1045,6 +1052,7 @@ uses
|
||||
if current_module<>self then
|
||||
internalerror(200212284);
|
||||
load_refs:=true;
|
||||
|
||||
{ load the used units from interface }
|
||||
in_interface:=true;
|
||||
pu:=tused_unit(used_units.first);
|
||||
@ -1084,8 +1092,12 @@ uses
|
||||
tstoredsymtable(globalsymtable).ppuload(ppufile);
|
||||
interface_compiled:=true;
|
||||
|
||||
{ now only read the implementation uses }
|
||||
{ read the implementation part, containing
|
||||
the implementation uses and objectdata }
|
||||
in_interface:=false;
|
||||
load_implementation;
|
||||
|
||||
{ now only read the implementation uses }
|
||||
pu:=tused_unit(used_units.first);
|
||||
while assigned(pu) do
|
||||
begin
|
||||
@ -1110,9 +1122,6 @@ uses
|
||||
end;
|
||||
numberunits;
|
||||
|
||||
{ read the implementation/objectdata part }
|
||||
load_implementation;
|
||||
|
||||
{ load browser info if stored }
|
||||
if ((flags and uf_has_browser)<>0) and load_refs then
|
||||
begin
|
||||
@ -1249,6 +1258,8 @@ uses
|
||||
if not do_compile then
|
||||
begin
|
||||
Message1(unit_u_loading_unit,modulename^);
|
||||
if modulename^='SYMSYM' then
|
||||
modulename:=modulename;
|
||||
search_unit(false,false);
|
||||
if not do_compile then
|
||||
begin
|
||||
@ -1404,7 +1415,11 @@ uses
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.40 2003-10-22 15:22:33 peter
|
||||
Revision 1.41 2003-10-22 17:38:25 peter
|
||||
* write implementation units in implementation part of the ppu
|
||||
so it doesn't confuse the unit loading
|
||||
|
||||
Revision 1.40 2003/10/22 15:22:33 peter
|
||||
* fixed unitsym-globalsymtable relation so the uses of a unit
|
||||
is counted correctly
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user