[fpc-devel] Adding compiler directives?
Jonas Maebe
jonas.maebe at elis.ugent.be
Wed Jan 18 16:58:34 CET 2012
On 18 Jan 2012, at 01:07, Paul Robinson wrote:
> I would like to ask whether there's a rule or policy on new compiler
> directives.
In general: the fewer, the merrier :)
> The new directives are first, for printing capability:
Printing-related features is not something that we'd ordinarily put
into the compiler. Source code formatting (for whatever purpose) is
left to other -specialised- tools, such as
* ptop: general purpose source code formatter (included with FPC)
* Lazarus: includes various source code formatting capabilities
* maybe another tool not yet written, possibly based on other existing
code
Such tools could be extended to check for specially formatted comments
(such as { #PRINT ON }).
> Then there is the second part of this inquiry which is:
>
> $CROSS - various options I haven't decided yet
>
> A most desperately missing feature - Cross Reference generation. I
> can always write a cross-reference program, and in fact I'm working
> on one because I can't find the nice one I had that was written
> about 20 years ago that did much of what I'm thinking of now, but a
> cross-reference function should be part of the compiler since the
> compiler "knows" which reference the person is referring to
There is actually already some code for that in the compiler, although
it is quite outdated and no longer used. It's in the compiler/
browcol.pas unit. It writes (wrote) out symbol browsing information
that can (could) be used by the fp IDE. I don't think it included back
references from places where those symbols are used inside the code
though, only about where they are defined.
There's also the -vp compiler option, which writes out a file called
"tree.log" that represents the parse tree (this option primarily
exists to help debugging the compiler). It would not be very difficult
to extend that output with adding for each loadn also the unit/line/
column information for each referenced symbol. Its format was however
not designed to be easily machine-parseable, and changes from time to
time as fields get added to or removed from node types in the compiler.
There's also the Lazarus IDE, which already contains code to extract
all of tha information, both regarding definitions and uses (it needs
it for its code navigation functionality). So maybe adding some kind
of "dump" facility to that code would be better. In fact, in general
simply navigating the source code in Lazarus should offer you the same
information on demand as a separate cross-reference would (jump to
symbol definition immediately lands you at that definition, rather
than that you have to manually go looking through papers/source files
for the right source file and line number based on a comment).
Jonas
More information about the fpc-devel
mailing list