summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornickysn <nickysn@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-06-17 01:53:38 +0000
committernickysn <nickysn@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-06-17 01:53:38 +0000
commit20083517a81bbe3da17247c0fd25038f7cd7b90e (patch)
tree4752bda1009d78fdbb14d11fd7f46167ffcc5535
parentaa54646160d36a15e8595df679c19ec44fe0e4f0 (diff)
downloadfpc-20083517a81bbe3da17247c0fd25038f7cd7b90e.tar.gz
+ implemented TOmfRecord_COMENT_IMPDEF.DecodeFrom
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@42242 3ad0048d-3df7-0310-abae-a5850022a9f2
-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);