summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/omfbase.pas41
1 files changed, 39 insertions, 2 deletions
diff --git a/compiler/omfbase.pas b/compiler/omfbase.pas
index 476fa810e1..dd8b615b34 100644
--- a/compiler/omfbase.pas
+++ b/compiler/omfbase.pas
@@ -1602,9 +1602,46 @@ implementation
{ TOmfRecord_COMENT_IMPDEF }
procedure TOmfRecord_COMENT_IMPDEF.DecodeFrom(ComentRecord: TOmfRecord_COMENT);
+ var
+ InternalNameLen, ModuleNameLenIdx, ModuleNameLen, NameLenIdx,
+ NameLen, OrdinalIdx: Integer;
begin
- {todo: implement}
- internalerror(2019061502);
+ if ComentRecord.CommentClass<>CC_OmfExtension then
+ internalerror(2019061621);
+ if Length(ComentRecord.CommentString)<5 then
+ internalerror(2019061622);
+ if ComentRecord.CommentString[1]<>Chr(CC_OmfExtension_IMPDEF) then
+ internalerror(2019061623);
+ ImportByOrdinal:=Ord(ComentRecord.CommentString[2])<>0;
+ InternalNameLen:=Ord(ComentRecord.CommentString[3]);
+ InternalName:=Copy(ComentRecord.CommentString,4,InternalNameLen);
+ ModuleNameLenIdx:=4+InternalNameLen;
+ if ModuleNameLenIdx>Length(ComentRecord.CommentString) then
+ internalerror(2019061624);
+ ModuleNameLen:=Ord(ComentRecord.CommentString[ModuleNameLenIdx]);
+ ModuleName:=Copy(ComentRecord.CommentString,ModuleNameLenIdx+1,ModuleNameLen);
+ if ImportByOrdinal then
+ begin
+ Name:='';
+ OrdinalIdx:=ModuleNameLenIdx+1+ModuleNameLen;
+ if (OrdinalIdx+1)>Length(ComentRecord.CommentString) then
+ internalerror(2019061625);
+ Ordinal:=Ord(ComentRecord.CommentString[OrdinalIdx]) or
+ (Word(Ord(ComentRecord.CommentString[OrdinalIdx+1])) shl 8);
+ end
+ else
+ begin
+ Ordinal:=0;
+ NameLenIdx:=ModuleNameLenIdx+1+ModuleNameLen;
+ if NameLenIdx>Length(ComentRecord.CommentString) then
+ internalerror(2019061626);
+ NameLen:=Ord(ComentRecord.CommentString[NameLenIdx]);
+ if (NameLenIdx+NameLen)>Length(ComentRecord.CommentString) then
+ internalerror(2019061627);
+ Name:=Copy(ComentRecord.CommentString,NameLenIdx+1,NameLen);
+ if Name='' then
+ Name:=InternalName;
+ end;
end;
procedure TOmfRecord_COMENT_IMPDEF.EncodeTo(ComentRecord: TOmfRecord_COMENT);