From 87bacc2b392f48951491bf6454d7d6bcde127c90 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Wed, 31 Oct 2018 14:57:13 +0000 Subject: [PATCH] [4/7] Preprocessor location-kind predicates https://gcc.gnu.org/ml/gcc-patches/2018-10/msg02040.html * 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. From-SVN: r265689 --- libcpp/ChangeLog | 7 +++++++ libcpp/include/line-map.h | 30 +++++++++++++++++++++--------- libcpp/line-map.c | 2 +- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index a02a335eae9..42433d9fe12 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,5 +1,12 @@ 2018-10-31 Nathan Sidwell + * 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. diff --git a/libcpp/include/line-map.h b/libcpp/include/line-map.h index 23f0e4a3514..ae9780e5d1a 100644 --- a/libcpp/include/line-map.h +++ b/libcpp/include/line-map.h @@ -558,12 +558,32 @@ struct GTY((tag ("2"))) line_map_macro : public line_map { #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_adhoc_loc (struct line_maps *, 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. */ diff --git a/libcpp/line-map.c b/libcpp/line-map.c index 66d92cf34aa..2d3ed839122 100644 --- a/libcpp/line-map.c +++ b/libcpp/line-map.c @@ -1238,7 +1238,7 @@ linemap_location_from_macro_expansion_p (const struct line_maps *set, 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 -- 2.30.2