diff --git a/compiler/owomflib.pas b/compiler/owomflib.pas index 2e4480f2d5..0e4b8e4a53 100644 --- a/compiler/owomflib.pas +++ b/compiler/owomflib.pas @@ -47,21 +47,23 @@ type strict private FObjFileName: string; FObjData: TDynamicArray; + FPageNum: Word; public constructor Create(const fn:string); destructor Destroy; override; property ObjData: TDynamicArray read FObjData; + property PageNum: Word read FPageNum write FPageNum; end; { TOmfLibDictionaryEntry } TOmfLibDictionaryEntry=class(TFPHashObject) strict private - FPageNum: Word; + FModuleIndex: Integer; public - constructor Create(HashObjectList:TFPHashObjectList;const aName:TSymStr;aPageNum:Word); - property PageNum: Word read FPageNum write FPageNum; + constructor Create(HashObjectList:TFPHashObjectList;const aName:TSymStr;aModuleIndex:Integer); + property ModuleIndex: Integer read FModuleIndex write FModuleIndex; end; strict private FPageSize: Integer; @@ -71,6 +73,7 @@ type FDictionary: TFPHashObjectList; FObjectModules: TFPObjectList; FCurrentModule: TOmfLibObjectModule; + FCurrentModuleIndex: Integer; procedure WriteHeader(DictStart: DWord; DictBlocks: Word); procedure WriteFooter; @@ -169,10 +172,10 @@ implementation *****************************************************************************} constructor TOmfLibObjectWriter.TOmfLibDictionaryEntry.Create( - HashObjectList: TFPHashObjectList; const aName: TSymStr; aPageNum: Word); + HashObjectList: TFPHashObjectList; const aName: TSymStr; aModuleIndex:Integer); begin inherited Create(HashObjectList,aName); - PageNum:=aPageNum; + ModuleIndex:=aModuleIndex; end; {***************************************************************************** @@ -211,7 +214,8 @@ implementation function TOmfLibObjectWriter.createfile(const fn: string): boolean; begin FCurrentModule:=TOmfLibObjectModule.Create(fn); - FObjectModules.Add(FCurrentModule); + FCurrentModuleIndex:=FObjectModules.Add(FCurrentModule); + FCurrentModule.PageNum:=FObjStartPage; createfile:=true; fobjsize:=0; end; @@ -232,7 +236,7 @@ implementation ObjHeader:=TOmfRecord_THEADR.Create; ObjHeader.DecodeFrom(RawRec); { create a dictionary entry with the module name } - TOmfLibDictionaryEntry.Create(FDictionary,ModName2DictEntry(ObjHeader.ModuleName),FObjStartPage); + TOmfLibDictionaryEntry.Create(FDictionary,ModName2DictEntry(ObjHeader.ModuleName),FCurrentModuleIndex); ObjHeader.Free; end; RawRec.WriteTo(FLibData); @@ -246,7 +250,7 @@ implementation procedure TOmfLibObjectWriter.writesym(const sym: string); begin - TOmfLibDictionaryEntry.Create(FDictionary,sym,FObjStartPage); + TOmfLibDictionaryEntry.Create(FDictionary,sym,FCurrentModuleIndex); end; @@ -355,7 +359,7 @@ implementation for i:=0 to FDictionary.Count-1 do begin N:=TOmfLibDictionaryEntry(FDictionary[i]).Name; - PageNum:=TOmfLibDictionaryEntry(FDictionary[i]).PageNum; + PageNum:=TOmfLibObjectModule(FObjectModules[TOmfLibDictionaryEntry(FDictionary[i]).ModuleIndex]).PageNum; length_of_string:=Length(N); h:=compute_omf_lib_hash(N,nblocks); start_block:=h.block_x;