preprocessor: module line maps
authorNathan Sidwell <nathan@acm.org>
Tue, 17 Nov 2020 16:01:50 +0000 (08:01 -0800)
committerNathan Sidwell <nathan@acm.org>
Tue, 17 Nov 2020 16:10:56 +0000 (08:10 -0800)
commit1f8ac759918729e9402c3154c8e5110bfd4c6459
tree0ede00b154e9db9f3f6ff98ce76a902bfaa0d86b
parent6b91b3e9df171970a907638d9b2e0bca1e792975
preprocessor: module line maps

This patch adds LC_MODULE as a map kind, used to indicate a c++
module.  Unlike a regular source file, it only contains a single
location, and the source locations in that module are represented by
ordinary locations whose 'included_from' location is the module.

It also exposes some entry points that modules will use to create
blocks of line maps.

In the original posting, I'd missed the deletion of the
linemap_enter_macro from internal.h.  That's included here.

libcpp/
* include/line-map.h (enum lc_reason): Add LC_MODULE.
(MAP_MODULE_P): New.
(line_map_new_raw): Declare.
(linemap_enter_macro): Move declaration from internal.h
(linemap_module_loc, linemap_module_reparent)
(linemap_module_restore): Declare.
(linemap_lookup_macro_indec): Declare.
* internal.h (linemap_enter_macro): Moved to line-map.h.
* line-map.c (linemap_new_raw): New, broken out of ...
(new_linemap): ... here.  Call it.
(LAST_SOURCE_LINE_LOCATION): New.
(liemap_module_loc, linemap_module_reparent)
(linemap_module_restore): New.
(linemap_lookup_macro_index): New, broken out of ...
(linemap_macro_map_lookup): ... here.  Call it.
(linemap_dump): Add module dump.
libcpp/include/line-map.h
libcpp/internal.h
libcpp/line-map.c