summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornickysn <nickysn@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-06-15 22:14:09 +0000
committernickysn <nickysn@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-06-15 22:14:09 +0000
commit5ec0a0bc1e60fa88ceeac9ec9f345c32939b7a49 (patch)
tree3202a5e0f3e8d20d59a624ab83d2e8719ea2dd79
parent65689fe2ab960762906624fa4bd808837b2eda6b (diff)
downloadfpc-5ec0a0bc1e60fa88ceeac9ec9f345c32939b7a49.tar.gz
+ Implemented TOmfRecord_COMENT_EXPDEF.DecodeFrom
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@42238 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--compiler/omfbase.pas40
1 files changed, 37 insertions, 3 deletions
diff --git a/compiler/omfbase.pas b/compiler/omfbase.pas
index c3f7eab554..476fa810e1 100644
--- a/compiler/omfbase.pas
+++ b/compiler/omfbase.pas
@@ -1629,9 +1629,43 @@ implementation
{ TOmfRecord_COMENT_EXPDEF }
procedure TOmfRecord_COMENT_EXPDEF.DecodeFrom(ComentRecord: TOmfRecord_COMENT);
- begin
- {todo: implement}
- internalerror(2019061503);
+ var
+ expflag: Byte;
+ ExportedNameLen, InternalNameLenIdx, InternalNameLen,
+ ExportOrdinalIdx: Integer;
+ begin
+ if ComentRecord.CommentClass<>CC_OmfExtension then
+ internalerror(2019061601);
+ if Length(ComentRecord.CommentString)<4 then
+ internalerror(2019061602);
+ if ComentRecord.CommentString[1]<>Chr(CC_OmfExtension_EXPDEF) then
+ internalerror(2019061603);
+ expflag:=Ord(ComentRecord.CommentString[2]);
+ ExportByOrdinal:=(expflag and $80)<>0;
+ ResidentName:=(expflag and $40)<>0;
+ NoData:=(expflag and $20)<>0;
+ ParmCount:=expflag and $1F;
+ ExportedNameLen:=Ord(ComentRecord.CommentString[3]);
+ ExportedName:=Copy(ComentRecord.CommentString,4,ExportedNameLen);
+ InternalNameLenIdx:=4+ExportedNameLen;
+ if InternalNameLenIdx>Length(ComentRecord.CommentString) then
+ internalerror(2019061604);
+ InternalNameLen:=Ord(ComentRecord.CommentString[InternalNameLenIdx]);
+ if (InternalNameLenIdx+InternalNameLen)>Length(ComentRecord.CommentString) then
+ internalerror(2019061605);
+ InternalName:=Copy(ComentRecord.CommentString,InternalNameLenIdx+1,InternalNameLen);
+ if ExportByOrdinal then
+ begin
+ ExportOrdinalIdx:=InternalNameLenIdx+1+InternalNameLen;
+ if (ExportOrdinalIdx+1)>Length(ComentRecord.CommentString) then
+ internalerror(2019061606);
+ ExportOrdinal:=Ord(ComentRecord.CommentString[ExportOrdinalIdx]) or
+ (Word(Ord(ComentRecord.CommentString[ExportOrdinalIdx+1])) shl 8);
+ end
+ else
+ ExportOrdinal:=0;
+ if InternalName='' then
+ InternalName:=ExportedName;
end;
procedure TOmfRecord_COMENT_EXPDEF.EncodeTo(ComentRecord: TOmfRecord_COMENT);