Ada, treelang needs to be converted to --enable-mapped-location
Per Bothner
per@bothner.com
Thu Sep 30 19:56:00 GMT 2004
Geert Bosch wrote:
> There seems to be a severe abstraction inversion here. It's none
> of the back end's business how the front end parses source files.
> For all it cares, the front end might parse files back-to-front.
Even so it presumably would read tokens front-to-back.
> Also, the whole notion of "include" nesting is front end related.
> Ada, for example, has no notion of includes, but uses a module
> system. How this is represented in source files is a choice of
> the front end implementation, and the back end has nothing to
> do with it.
The include-file tracking is a relatively cheap bonus feature
of the line-map library" - just ignore it for Ada.
> It seems to me that the "locus" should be an opaque 32-bit type,
> with accessor functions to retrieve file, line and column information.
> Front ends implement these accessor functions, and the back end
> doesn't care how the information is stored.
It certainly is possible to add just an abstraction layer - I just
don't see the point.
> The C front ends, and maybe others, can use the new mapped location
> approach using the interface you described to create a new locus.
> Front ends for which this approach is not a good fit, can implement
> the much simpler accessor functions for loci.
I haven't seen any real reason why the line_table mapping would be a
poor fit for Ada, or why there would be any problem (performance or
otherwise) with using it for Ada.
We use the line_table for C/C++/ObjC, Java, and Fortran without problem.
I don't see why Ada would have any problem.
> For Ada, processing a single compilation unit might require parsing
> hundreds
> of files.
Just like C, C++, and Java.
This is much more common than with other languages, since Ada
> allows
> cross-unit inlining, which requires not only parsing all specifications,
> but
> also bodies of units with potentially inlined subprograms.
Like C++ and Java.
> Apart from this, it is bad practice to litter the parser with calls into
> the back end to produce duplicate line number information.
I don't know why you refer to the "back end". line-map.[ch] is a self-
contained "library" that was originally used for cpplib, which is part
of the C/C++ *front-ends*. There are no "back-end" calls.
> I think the ideal approach is to view the locus as private to the front
> ends.
> Then we just use the Ada "Sloc" as locus and provide the necessary
> functions to map this locus to file, line, column information.
This slightly complicates 90% of the compiler (trees, rtl, debugging,
error handling) adding a extra level of indirection because you don't
want to add 10 lines to the Ada front-end. That doesn't seem like a
good tradeoff to me.
--
--Per Bothner
per@bothner.com http://per.bothner.com/
More information about the Gcc
mailing list