I fixed the regressions USE_MAPPED_LOCATION for C and C++, and we've now branched, so it's is probably time to get Ada working.
(There is a Java problem, for which I have a patch, but it may hurt debugging. Until that is fixed, leave Java out of --enable-languages, or apply this patch: http://gcc.gnu.org/ml/gcc-patches/2005-03/msg01094.html )
Some links to the pervious discussions: http://gcc.gnu.org/ml/gcc/2004-10/msg00012.html http://gcc.gnu.org/ml/gcc/2004-10/msg00200.html http://gcc.gnu.org/ml/gcc/2004-10/msg00229.html http://gcc.gnu.org/ml/gcc/2004-10/msg00248.html http://gcc.gnu.org/ml/gcc/2004-10/msg00261.html http://gcc.gnu.org/ml/gcc/2004-10/msg00265.html
There wasn't really a consensus on how to do it. The ideal solution I think is for Ada to use line-map's source_location for Sloc in its lexer. I don't think it would be that hard, but an easier solution may be to leave Sloc alone, and instead translate Sloc integers to source_location when we translate the Ada intermal format to Gcc trees. See: http://gcc.gnu.org/ml/gcc/2004-10/msg00248.html I think this is my current recommendation; to expand on it a little:
We can add a new function line-map.h: source_location linemap_get_location (struct line_table*, const char *filename, int line, int column); A simple implementation: (1) check that (file, line, column) can use the current line_map: strcmp (filename, map->to_file) == 0 && line >= map->to_line && column < (1 << map->column_bits) && line not excessively big; The latter is a heuristic to avoid using up line number too greedily; I suspect it may not be an issue. (2) If the test passes, calculate the source_location from (line, column) using map->start_location and map->column_bits. Also update highest_location and highest_line. (3) Otherwise, allocate a new map using linemap_add.
In the future we can improve linemap_get_location if it turns out to be necessarily; for example searching previously used map entries and/or keeping a cache of recently used maps.
Some people suggested instead that the location_t in the shared Gcc should be a language-defined opaque time, and have language call-backs. The default would be source_location as managed by line_map, but Ada could use a different implementation. That may be a short-term easier for Ada, but I don't think it's the best long-term solution for Gcc as a whole. -- --Per Bothner [EMAIL PROTECTED] http://per.bothner.com/