aboutsummaryrefslogtreecommitdiff
path: root/libcpp
diff options
context:
space:
mode:
Diffstat (limited to 'libcpp')
-rw-r--r--libcpp/include/line-map.h17
-rw-r--r--libcpp/line-map.cc22
2 files changed, 25 insertions, 14 deletions
diff --git a/libcpp/include/line-map.h b/libcpp/include/line-map.h
index 635d6d3..615cb42 100644
--- a/libcpp/include/line-map.h
+++ b/libcpp/include/line-map.h
@@ -1658,7 +1658,7 @@ class rich_location
const location_range *get_range (unsigned int idx) const;
location_range *get_range (unsigned int idx);
- expanded_location get_expanded_location (unsigned int idx);
+ expanded_location get_expanded_location (unsigned int idx) const;
void
override_column (int column);
@@ -1762,6 +1762,8 @@ class rich_location
bool escape_on_output_p () const { return m_escape_on_output; }
void set_escape_on_output (bool flag) { m_escape_on_output = flag; }
+ const line_maps *get_line_table () const { return m_line_table; }
+
private:
bool reject_impossible_fixit (location_t where);
void stop_supporting_fixits ();
@@ -1773,17 +1775,17 @@ public:
static const int STATICALLY_ALLOCATED_RANGES = 3;
protected:
- line_maps *m_line_table;
+ line_maps * const m_line_table;
semi_embedded_vec <location_range, STATICALLY_ALLOCATED_RANGES> m_ranges;
int m_column_override;
- bool m_have_expanded_location;
+ mutable bool m_have_expanded_location;
bool m_seen_impossible_fixit;
bool m_fixits_cannot_be_auto_applied;
bool m_escape_on_output;
- expanded_location m_expanded_location;
+ mutable expanded_location m_expanded_location;
static const int MAX_STATIC_FIXIT_HINTS = 2;
semi_embedded_vec <fixit_hint *, MAX_STATIC_FIXIT_HINTS> m_fixit_hints;
@@ -1916,7 +1918,9 @@ class fixit_hint
const char *new_content);
~fixit_hint () { free (m_bytes); }
- bool affects_line_p (const char *file, int line) const;
+ bool affects_line_p (const line_maps *set,
+ const char *file,
+ int line) const;
location_t get_start_loc () const { return m_start; }
location_t get_next_loc () const { return m_next_loc; }
bool maybe_append (location_t start,
@@ -2103,7 +2107,8 @@ enum location_aspect
Hence we require client code of libcpp to implement the following
symbol. */
extern expanded_location
-linemap_client_expand_location_to_spelling_point (location_t,
+linemap_client_expand_location_to_spelling_point (const line_maps *,
+ location_t,
enum location_aspect);
#endif /* !LIBCPP_LINE_MAP_H */
diff --git a/libcpp/line-map.cc b/libcpp/line-map.cc
index cc9e14a..be2d096 100644
--- a/libcpp/line-map.cc
+++ b/libcpp/line-map.cc
@@ -2212,7 +2212,7 @@ rich_location::get_range (unsigned int idx)
location. */
expanded_location
-rich_location::get_expanded_location (unsigned int idx)
+rich_location::get_expanded_location (unsigned int idx) const
{
if (idx == 0)
{
@@ -2221,7 +2221,7 @@ rich_location::get_expanded_location (unsigned int idx)
{
m_expanded_location
= linemap_client_expand_location_to_spelling_point
- (get_loc (0), LOCATION_ASPECT_CARET);
+ (m_line_table, get_loc (0), LOCATION_ASPECT_CARET);
if (m_column_override)
m_expanded_location.column = m_column_override;
m_have_expanded_location = true;
@@ -2231,7 +2231,7 @@ rich_location::get_expanded_location (unsigned int idx)
}
else
return linemap_client_expand_location_to_spelling_point
- (get_loc (idx), LOCATION_ASPECT_CARET);
+ (m_line_table, get_loc (idx), LOCATION_ASPECT_CARET);
}
/* Set the column of the primary location, with 0 meaning
@@ -2490,10 +2490,12 @@ rich_location::maybe_add_fixit (location_t start,
/* Only allow fix-it hints that affect a single line in one file.
Compare the end-points. */
expanded_location exploc_start
- = linemap_client_expand_location_to_spelling_point (start,
+ = linemap_client_expand_location_to_spelling_point (m_line_table,
+ start,
LOCATION_ASPECT_START);
expanded_location exploc_next_loc
- = linemap_client_expand_location_to_spelling_point (next_loc,
+ = linemap_client_expand_location_to_spelling_point (m_line_table,
+ next_loc,
LOCATION_ASPECT_START);
/* They must be within the same file... */
if (exploc_start.file != exploc_next_loc.file)
@@ -2581,17 +2583,21 @@ fixit_hint::fixit_hint (location_t start,
/* Does this fix-it hint affect the given line? */
bool
-fixit_hint::affects_line_p (const char *file, int line) const
+fixit_hint::affects_line_p (const line_maps *set,
+ const char *file,
+ int line) const
{
expanded_location exploc_start
- = linemap_client_expand_location_to_spelling_point (m_start,
+ = linemap_client_expand_location_to_spelling_point (set,
+ m_start,
LOCATION_ASPECT_START);
if (file != exploc_start.file)
return false;
if (line < exploc_start.line)
return false;
expanded_location exploc_next_loc
- = linemap_client_expand_location_to_spelling_point (m_next_loc,
+ = linemap_client_expand_location_to_spelling_point (set,
+ m_next_loc,
LOCATION_ASPECT_START);
if (file != exploc_next_loc.file)
return false;