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

Reply via email to