2018-10-31 Nathan Sidwell <nathan@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.
+
* include/cpplib.h (cpp_macro_definition_location): Make inline.
* macro.c (warn_of_redefinition): Fix comments, examine macro
type, use C++ for.
#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
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. */
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