2008/8/20 Tom Tromey <[EMAIL PROTECTED]>:
>>>>>> "Manuel" == Manuel López-Ibáñez <[EMAIL PROTECTED]> writes:
>
> Manuel> If I ever get the time, I would like to abstract our line-map
> Manuel> implementation within a "location_manager" object and API but
> Manuel> I don't think this conflicts directly with your work.
>
> I am curious to know how this would be different from what we have
> now.
>
> I think the line-map API is rather ugly, personally, but it seems to
> me that a "struct line_maps" is essentially a location manager object.

It is essentially. However, all the internal things are exposed all
over the place for no good reason.

This is in gcc/c-lex.c

 /* #define callback for DWARF and DWARF2 debug info.  */
 static void
 cb_define (cpp_reader *pfile, source_location loc, cpp_hashnode *node)
 {
-  const struct line_map *map = linemap_lookup (line_table, loc);
-  (*debug_hooks->define) (SOURCE_LINE (map, loc),
+  (*debug_hooks->define) (location_source_line (location_manager, loc),
                          (const char *) cpp_macro_definition (pfile, node));
 }

This is in tree.h

-expanded_location
-expand_location (source_location loc)
-{
-  expanded_location xloc;
-  if (loc == 0)
-    {
-      xloc.file = NULL;
-      xloc.line = 0;
-      xloc.column = 0;
-      xloc.sysp = 0;
-    }
-  else
-    {
-      const struct line_map *map = linemap_lookup (line_table, loc);
-      xloc.file = map->to_file;
-      xloc.line = SOURCE_LINE (map, loc);
-      xloc.column = SOURCE_COLUMN (map, loc);
-      xloc.sysp = map->sysp != 0;
-    };
-  return xloc;
-}
+#define expand_location(LOC) location_expand (location_manager, (LOC))
+

Moreover, the location_manager probably should be separated from CCP.

If we want to implement re-opening files and reading strings given
locations, then opening/reading files should also be moved out of CCP
to its own module/namespace/object.

Cheers,

Manuel.

Reply via email to