This fills out the set of location-kind predicates, and uses them in a
couple more places. There may well be other places that could benefit.
Applying to trunk.
--
Nathan Sidwell
2018-10-31 Nathan Sidwell <nat...@acm.org>
* include/line-map.h (IS_ORDINARY_LOC, IS_MACRO_LOC): New
predicates.
(IS_ADHOC_LOC): Move earlier.
(MAP_ORDINARY_P): Use IS_ORDINARY_LOC.
* line-map.c (linemap_location_from_macro_expansion_p): Use
IS_MACRO_LOC.
Index: libcpp/include/line-map.h
===================================================================
--- libcpp/include/line-map.h (revision 265671)
+++ libcpp/include/line-map.h (working copy)
@@ -558,12 +558,32 @@ struct GTY((tag ("2"))) line_map_macro :
#define linemap_assert_fails(EXPR) (! (EXPR))
#endif
+/* Get whether location LOC is an ad-hoc, ordinary or macro location. */
+
+inline bool
+IS_ORDINARY_LOC (source_location loc)
+{
+ return loc < LINE_MAP_MAX_LOCATION;
+}
+
+inline bool
+IS_ADHOC_LOC (source_location loc)
+{
+ return loc > MAX_SOURCE_LOCATION;
+}
+
+inline bool
+IS_MACRO_LOC (source_location loc)
+{
+ return !IS_ORDINARY_LOC (loc) && !IS_ADHOC_LOC (loc);
+}
+
/* Categorize line map kinds. */
inline bool
MAP_ORDINARY_P (const line_map *map)
{
- return map->start_location < LINE_MAP_MAX_LOCATION;
+ return IS_ORDINARY_LOC (map->start_location);
}
/* Return TRUE if MAP encodes locations coming from a macro
@@ -1037,14 +1057,6 @@ extern source_location get_location_from
extern source_range get_range_from_loc (line_maps *set, source_location loc);
-/* Get whether location LOC is an ad-hoc location. */
-
-inline bool
-IS_ADHOC_LOC (source_location loc)
-{
- return (loc & MAX_SOURCE_LOCATION) != loc;
-}
-
/* Get whether location LOC is a "pure" location, or
whether it is an ad-hoc location, or embeds range information. */
Index: libcpp/line-map.c
===================================================================
--- libcpp/line-map.c (revision 265671)
+++ libcpp/line-map.c (working copy)
@@ -1238,7 +1238,7 @@ linemap_location_from_macro_expansion_p
location = set->location_adhoc_data_map.data[location
& MAX_SOURCE_LOCATION].locus;
- return location >= LINE_MAP_MAX_LOCATION;
+ return IS_MACRO_LOC (location);
}
/* Given two virtual locations *LOC0 and *LOC1, return the first