mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-01 03:50:35 +02:00
+ introduced the TOmfRecord_COMENT_IMPDEF class. Use it to encode the IMPDEF
records instead of encoding them directly. git-svn-id: trunk@42236 -
This commit is contained in:
parent
85684eb66d
commit
eea3eb1a8e
@ -1334,7 +1334,8 @@ implementation
|
|||||||
var
|
var
|
||||||
RawRecord: TOmfRawRecord;
|
RawRecord: TOmfRawRecord;
|
||||||
Header: TOmfRecord_THEADR;
|
Header: TOmfRecord_THEADR;
|
||||||
DllImport_COMENT: TOmfRecord_COMENT;
|
DllImport_COMENT: TOmfRecord_COMENT=nil;
|
||||||
|
DllImport_COMENT_IMPDEF: TOmfRecord_COMENT_IMPDEF=nil;
|
||||||
ModEnd: TOmfRecord_MODEND;
|
ModEnd: TOmfRecord_MODEND;
|
||||||
begin
|
begin
|
||||||
{ write header record }
|
{ write header record }
|
||||||
@ -1346,20 +1347,26 @@ implementation
|
|||||||
Header.Free;
|
Header.Free;
|
||||||
|
|
||||||
{ write IMPDEF record }
|
{ write IMPDEF record }
|
||||||
DllImport_COMENT:=TOmfRecord_COMENT.Create;
|
DllImport_COMENT_IMPDEF:=TOmfRecord_COMENT_IMPDEF.Create;
|
||||||
DllImport_COMENT.CommentClass:=CC_OmfExtension;
|
DllImport_COMENT_IMPDEF.InternalName:=mangledname;
|
||||||
|
DllImport_COMENT_IMPDEF.ModuleName:=dllname;
|
||||||
if ordnr <= 0 then
|
if ordnr <= 0 then
|
||||||
begin
|
begin
|
||||||
if afuncname=mangledname then
|
DllImport_COMENT_IMPDEF.ImportByOrdinal:=False;
|
||||||
DllImport_COMENT.CommentString:=Chr(CC_OmfExtension_IMPDEF)+#0+Chr(Length(mangledname))+mangledname+Chr(Length(dllname))+dllname+#0
|
DllImport_COMENT_IMPDEF.Name:=afuncname;
|
||||||
else
|
|
||||||
DllImport_COMENT.CommentString:=Chr(CC_OmfExtension_IMPDEF)+#0+Chr(Length(mangledname))+mangledname+Chr(Length(dllname))+dllname+Chr(Length(afuncname))+afuncname;
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
DllImport_COMENT.CommentString:=Chr(CC_OmfExtension_IMPDEF)+#1+Chr(Length(mangledname))+mangledname+Chr(Length(dllname))+dllname+Chr(ordnr and $ff)+Chr((ordnr shr 8) and $ff);
|
begin
|
||||||
|
DllImport_COMENT_IMPDEF.ImportByOrdinal:=True;
|
||||||
|
DllImport_COMENT_IMPDEF.Ordinal:=ordnr;
|
||||||
|
end;
|
||||||
|
|
||||||
|
DllImport_COMENT:=TOmfRecord_COMENT.Create;
|
||||||
|
DllImport_COMENT_IMPDEF.EncodeTo(DllImport_COMENT);
|
||||||
|
FreeAndNil(DllImport_COMENT_IMPDEF);
|
||||||
DllImport_COMENT.EncodeTo(RawRecord);
|
DllImport_COMENT.EncodeTo(RawRecord);
|
||||||
|
FreeAndNil(DllImport_COMENT);
|
||||||
RawRecord.WriteTo(FWriter);
|
RawRecord.WriteTo(FWriter);
|
||||||
DllImport_COMENT.Free;
|
|
||||||
|
|
||||||
{ write MODEND record }
|
{ write MODEND record }
|
||||||
ModEnd:=TOmfRecord_MODEND.Create;
|
ModEnd:=TOmfRecord_MODEND.Create;
|
||||||
|
@ -337,6 +337,26 @@ interface
|
|||||||
procedure EncodeTo(ComentRecord: TOmfRecord_COMENT);virtual;abstract;
|
procedure EncodeTo(ComentRecord: TOmfRecord_COMENT);virtual;abstract;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TOmfRecord_COMENT_IMPDEF }
|
||||||
|
|
||||||
|
TOmfRecord_COMENT_IMPDEF = class(TOmfRecord_COMENT_Subtype)
|
||||||
|
private
|
||||||
|
FImportByOrdinal: Boolean;
|
||||||
|
FInternalName: string;
|
||||||
|
FModuleName: string;
|
||||||
|
FOrdinal: Word;
|
||||||
|
FName: string;
|
||||||
|
public
|
||||||
|
procedure DecodeFrom(ComentRecord: TOmfRecord_COMENT);override;
|
||||||
|
procedure EncodeTo(ComentRecord: TOmfRecord_COMENT);override;
|
||||||
|
|
||||||
|
property ImportByOrdinal: Boolean read FImportByOrdinal write FImportByOrdinal;
|
||||||
|
property InternalName: string read FInternalName write FInternalName;
|
||||||
|
property ModuleName: string read FModuleName write FModuleName;
|
||||||
|
property Ordinal: Word read FOrdinal write FOrdinal;
|
||||||
|
property Name: string read FName write FName;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TOmfRecord_LNAMES }
|
{ TOmfRecord_LNAMES }
|
||||||
|
|
||||||
TOmfRecord_LNAMES = class(TOmfParsedRecord)
|
TOmfRecord_LNAMES = class(TOmfParsedRecord)
|
||||||
@ -1555,6 +1575,33 @@ implementation
|
|||||||
RawRecord.CalculateChecksumByte;
|
RawRecord.CalculateChecksumByte;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TOmfRecord_COMENT_IMPDEF }
|
||||||
|
|
||||||
|
procedure TOmfRecord_COMENT_IMPDEF.DecodeFrom(ComentRecord: TOmfRecord_COMENT);
|
||||||
|
begin
|
||||||
|
{todo: implement}
|
||||||
|
internalerror(2019061502);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TOmfRecord_COMENT_IMPDEF.EncodeTo(ComentRecord: TOmfRecord_COMENT);
|
||||||
|
begin
|
||||||
|
ComentRecord.CommentClass:=CC_OmfExtension;
|
||||||
|
if ImportByOrdinal then
|
||||||
|
ComentRecord.CommentString:=Chr(CC_OmfExtension_IMPDEF)+#1+
|
||||||
|
Chr(Length(InternalName))+InternalName+
|
||||||
|
Chr(Length(ModuleName))+ModuleName+
|
||||||
|
Chr(Ordinal and $ff)+Chr((Ordinal shr 8) and $ff)
|
||||||
|
else if InternalName=Name then
|
||||||
|
ComentRecord.CommentString:=Chr(CC_OmfExtension_IMPDEF)+#0+
|
||||||
|
Chr(Length(InternalName))+InternalName+
|
||||||
|
Chr(Length(ModuleName))+ModuleName+#0
|
||||||
|
else
|
||||||
|
ComentRecord.CommentString:=Chr(CC_OmfExtension_IMPDEF)+#0+
|
||||||
|
Chr(Length(InternalName))+InternalName+
|
||||||
|
Chr(Length(ModuleName))+ModuleName+
|
||||||
|
Chr(Length(Name))+Name;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TOmfRecord_LNAMES }
|
{ TOmfRecord_LNAMES }
|
||||||
|
|
||||||
constructor TOmfRecord_LNAMES.Create;
|
constructor TOmfRecord_LNAMES.Create;
|
||||||
|
Loading…
Reference in New Issue
Block a user