<HTML>
I made a few extra bug fixes and tweaks over at #35017:<br>
<br>
- When displaying the value of string constants, it will change characters like < into &lt; etc.  You can't trick it by putting "&lt;" in the actual string, as this will be turned into "&amp;lt;"!<br>
<div>- Putting the node dump after the second pass tends to not work because a good number of the nodes are converted into assembly language by then, so you can't study the node structure that effectively.</div><div>- Pointers are displayed a bit more cleanly now - if the reference is $FFFF or below, it only displays 4 characters, and if $FFFFFFFF or below, then 8 characters.  The full 16 are only displayed if 2^32 or larger.  This just makes it clearer and easier to read in the XML file.</div><div><br>
</div><div>A node has three functions that are used to output the structure to an XML file:</div><div><div>- XMLPrintNodeTree - this function is called first and calls the other two; it initially prints the node type and sets up the XML tags.<br>
</div>- XMLPrintNodeInfo - this creates attributes for the node that relate to the resultdef, file position, flags and node complexity - data that is generally not essential to know about (except maybe resultdef).<br>
</div><div>- XMLPrintNodeData - this function prints any special data relating to the node in question, such as the value of a constant.  It also handles the calling of XMLPrintNodeTree for child nodes (it's not handled by XMLPrintNodeTree because of the issue of indentation levels, which XMLPrintNodeTree cleans up at the end).</div><div><br>
</div><div>It's largely based on the debug code that outputs the nodes to the console.  I hope it proves useful.  It's at least giving me some insight into how some things are set up.</div><div><br>
</div><div>Gareth aka. Kit<br>
</div> <br>
<br>
<span style="font-weight: bold;">On Wed 06/02/19 02:47 , "J. Gareth Moreton" gareth@moreton-family.com sent:<br>
</span><blockquote style="BORDER-LEFT: #F5F5F5 2px solid; MARGIN-LEFT: 5px; MARGIN-RIGHT:0px; PADDING-LEFT: 5px; PADDING-RIGHT: 0px"> 
<div>Hi everyone,</div><div><br>
 
</div><div>So there's a few limitations with the XML dump.  Firstly it does its work before the second pass, so things like inlined functions are not yet expanded.  There are still some minor bugs to work out, like if a string literal contains < and >, for example, it can cause the XML file to become malformed, so I'll have to make a global string-sanitising function that addresses these characters.<br>
 
<br>
 
I did try putting it after the second pass in my own copy of FPC, but some problems occurred when it came to the assembly language that's inserted to make up the function prologue.  I'll work this out a bit later, since I need to rest now!<br>
 
<br>
 
In the meantime, the patches in the bug report are ready for testing, although they might not be ready for including in the trunk due to the aforementioned problems.  Still, it's up to you.<br>
 
<br>
 
Gareth aka. Kit<br>
 
</div><br>
 
 <br>
 
<br>
 
<span style="font-weight: bold;">On Tue 05/02/19 17:53 , "J. Gareth Moreton" gareth@moreton-family.com sent:<br>
 
</span><blockquote style="BORDER-LEFT: #F5F5F5 2px solid; MARGIN-LEFT: 5px; MARGIN-RIGHT:0px; PADDING-LEFT: 5px; PADDING-RIGHT: 0px"> 
Hi everyone,<br>
 
 
<br>
 
 
As has been discussed a little bit on here in the past, I've done a bit more work on my XML node dumping feature.  If the compiler is built with the "DEBUG_NODE_DUMP" define, all source files compiled with it will have their intermediate nodes dumped to an XML file (they have .ppx extensions).  The patch and details can be found here: https://bugs.freepascal.org/view.php?id=35017<br>
 
 
<br>
 
 
<div>It's a feature I intend to use for improving some of the mathematical functions like "floor".  Given that the nodes form trees, this is one of the few cases where XML files are perfect for representing them, especially as, with an appropriate editor, you can collapse trees that you're not interested in viewing (for something like the System unit, which produces a 9 MiB .ppx file, this is almost essential).</div><div><br>
 
 
</div><div>I'm aware that a feature that dumps the nodes to the console already exists, but for large units, like the aforementioned System unit, this is grossly impractical because of the sheer volume of data that's printed.<br>
 
 
</div><br>
 
 
<div>Note that currently only procedures and functions are dumped to the .ppx file - things like class declarations and global variables aren't dumped, although being a debug-only feature, it's not overly critical.  Similarly, if it comes across an assembler block node, the assembly code is only dumped on x86 families at present.  If anyone feels like adding extra features to it, feel free.</div><div><br>
 
 
</div><div>I hope it proves useful for future compiler debugging and development.<br>
 
 
</div><br>
 
 
Gareth aka. Kit<br>
 
 
 
 
_______________________________________________<br>
 
 
fpc-devel maillist - <a href="mailto:fpc-devel@lists.freepascal.org">fpc-devel@lists.freepascal.org</a><br>
 
 
<a target="_blank" href="<a href=" http:="" lists.freepascal.org="" cgi-bin="" mailman="" listinfo="" fpc-devel"="">http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel</a>"><span style="color: red;">http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel</span><br>
 
 
<br>
 
 
</blockquote> 

_______________________________________________<br>

fpc-devel maillist  -  <a href="mailto:fpc-devel@lists.freepascal.org">fpc-devel@lists.freepascal.org</a><br>

<a target="_blank" href="<a href="http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel">http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel</a>"><span style="color: red;">http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel</span></a><br>

<br>

</blockquote></HTML>