diff options
author | nickysn <nickysn@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2019-06-17 01:53:38 +0000 |
---|---|---|
committer | nickysn <nickysn@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2019-06-17 01:53:38 +0000 |
commit | 20083517a81bbe3da17247c0fd25038f7cd7b90e (patch) | |
tree | 4752bda1009d78fdbb14d11fd7f46167ffcc5535 | |
parent | aa54646160d36a15e8595df679c19ec44fe0e4f0 (diff) | |
download | fpc-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.pas | 41 |
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); |