Commit patch submitted in bug report #35787 by Gareth Moreton

git-svn-id: trunk@42318 -
This commit is contained in:
pierre 2019-07-01 19:42:48 +00:00
parent b9649d17a5
commit 67cf63049d
2 changed files with 87 additions and 10 deletions

View File

@ -389,8 +389,8 @@ interface
procedure XMLPrintNodeInfo(var T: Text); dynamic; procedure XMLPrintNodeInfo(var T: Text); dynamic;
procedure XMLPrintNodeData(var T: Text); virtual; procedure XMLPrintNodeData(var T: Text); virtual;
procedure XMLPrintNodeTree(var T: Text); virtual; procedure XMLPrintNodeTree(var T: Text); virtual;
class function SanitiseXMLString(const S: ansistring): ansistring; class function SanitiseXMLString(const S: ansistring): ansistring; static;
class function WritePointer(const P: Pointer): ansistring; class function WritePointer(const P: Pointer): ansistring; static;
{$endif DEBUG_NODE_XML} {$endif DEBUG_NODE_XML}
procedure concattolist(l : tlinkedlist);virtual; procedure concattolist(l : tlinkedlist);virtual;
function ischild(p : tnode) : boolean;virtual; function ischild(p : tnode) : boolean;virtual;

View File

@ -1167,6 +1167,11 @@ implementation
W: Word; W: Word;
syssym: tsyssym; syssym: tsyssym;
procedure PrintType(Flag: string);
begin
Write(T, ' type="', Flag, '"');
end;
procedure PrintOption(Flag: string); procedure PrintOption(Flag: string);
begin begin
WriteLn(T, PrintNodeIndention, '<option>', Flag, '</option>'); WriteLn(T, PrintNodeIndention, '<option>', Flag, '</option>');
@ -1186,8 +1191,61 @@ implementation
Exit; Exit;
end; end;
{$pop} {$pop}
Write(T, PrintNodeIndention, '<procedure'); Write(T, PrintNodeIndention, '<subroutine');
Write(T, ' name="', TNode.SanitiseXMLString(procdef.customprocname([])), '"');
{ Check to see if the procedure is a class or object method }
if Assigned(procdef.struct) then
begin
if Assigned(procdef.struct.objrealname) then
Write(T, ' struct="', TNode.SanitiseXMLString(procdef.struct.objrealname^), '"')
else
Write(T, ' struct="&lt;NULL&gt;"');
end;
case procdef.proctypeoption of
potype_none: { Do nothing };
potype_procedure,
potype_function:
if po_classmethod in procdef.procoptions then
begin
if po_staticmethod in procdef.procoptions then
PrintType('static class method')
else
PrintType('class method');
end;
{ Do nothing otherwise }
potype_proginit,
potype_unitinit:
PrintType('initialization');
potype_unitfinalize:
PrintType('finalization');
potype_constructor:
PrintType('constructor');
potype_destructor:
PrintType('destructor');
potype_operator:
PrintType('operator');
potype_class_constructor:
PrintType('class constructor');
potype_class_destructor:
PrintType('class destructor');
potype_propgetter:
PrintType('dispinterface getter');
potype_propsetter:
PrintType('dispinterface setter');
potype_exceptfilter:
PrintType('except filter');
potype_mainstub:
PrintType('main stub');
potype_libmainstub:
PrintType('library main stub');
potype_pkgstub:
PrintType('package stub');
end;
Write(T, ' name="', TNode.SanitiseXMLString(procdef.customprocname([pno_showhidden, pno_noclassmarker])), '"');
if po_hascallingconvention in procdef.procoptions then if po_hascallingconvention in procdef.procoptions then
Write(T, ' convention="', proccalloptionStr[procdef.proccalloption], '"'); Write(T, ' convention="', proccalloptionStr[procdef.proccalloption], '"');
@ -1196,6 +1254,19 @@ implementation
PrintNodeIndent; PrintNodeIndent;
if Assigned(procdef.returndef) and not is_void(procdef.returndef) then
WriteLn(T, PrintNodeIndention, '<returndef>', TNode.SanitiseXMLString(procdef.returndef.typesymbolprettyname), '</returndef>');
if po_reintroduce in procdef.procoptions then
PrintOption('reintroduce');
if po_virtualmethod in procdef.procoptions then
PrintOption('virtual');
if po_finalmethod in procdef.procoptions then
PrintOption('final');
if po_overridingmethod in procdef.procoptions then
PrintOption('override');
if po_overload in procdef.procoptions then
PrintOption('overload');
if po_compilerproc in procdef.procoptions then if po_compilerproc in procdef.procoptions then
PrintOption('compilerproc'); PrintOption('compilerproc');
if po_assembler in procdef.procoptions then if po_assembler in procdef.procoptions then
@ -1209,13 +1280,19 @@ implementation
if po_noinline in procdef.procoptions then if po_noinline in procdef.procoptions then
PrintOption('noinline'); PrintOption('noinline');
WriteLn(T, PrintNodeIndention, '<code>'); if Assigned(Code) then
PrintNodeIndent; begin
XMLPrintNode(T, Code); WriteLn(T, PrintNodeIndention, '<code>');
PrintNodeIndent;
XMLPrintNode(T, Code);
PrintNodeUnindent;
WriteLn(T, PrintNodeIndention, '</code>');
end
else
WriteLn(T, PrintNodeIndention, '<code />');
PrintNodeUnindent; PrintNodeUnindent;
WriteLn(T, PrintNodeIndention, '</code>'); WriteLn(T, PrintNodeIndention, '</subroutine>');
PrintNodeUnindent;
WriteLn(T, PrintNodeIndention, '</procedure>');
WriteLn(T); { Line for spacing } WriteLn(T); { Line for spacing }
Close(T); Close(T);
end; end;