aboutsummaryrefslogtreecommitdiff
path: root/gcc/diagnostic-show-locus.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/diagnostic-show-locus.c')
-rw-r--r--gcc/diagnostic-show-locus.c63
1 files changed, 36 insertions, 27 deletions
diff --git a/gcc/diagnostic-show-locus.c b/gcc/diagnostic-show-locus.c
index d305ada..6ce8a0f 100644
--- a/gcc/diagnostic-show-locus.c
+++ b/gcc/diagnostic-show-locus.c
@@ -126,7 +126,7 @@ class layout_range
public:
layout_range (const expanded_location *start_exploc,
const expanded_location *finish_exploc,
- bool show_caret_p,
+ enum range_display_kind range_display_kind,
const expanded_location *caret_exploc,
const range_label *label);
@@ -135,7 +135,7 @@ class layout_range
layout_point m_start;
layout_point m_finish;
- bool m_show_caret_p;
+ enum range_display_kind m_range_display_kind;
layout_point m_caret;
const range_label *m_label;
};
@@ -412,12 +412,12 @@ colorizer::get_color_by_name (const char *name)
layout_range::layout_range (const expanded_location *start_exploc,
const expanded_location *finish_exploc,
- bool show_caret_p,
+ enum range_display_kind range_display_kind,
const expanded_location *caret_exploc,
const range_label *label)
: m_start (*start_exploc),
m_finish (*finish_exploc),
- m_show_caret_p (show_caret_p),
+ m_range_display_kind (range_display_kind),
m_caret (*caret_exploc),
m_label (label)
{
@@ -545,7 +545,7 @@ make_range (int start_line, int start_col, int end_line, int end_col)
= {"test.c", start_line, start_col, NULL, false};
const expanded_location finish_exploc
= {"test.c", end_line, end_col, NULL, false};
- return layout_range (&start_exploc, &finish_exploc, false,
+ return layout_range (&start_exploc, &finish_exploc, SHOW_RANGE_WITHOUT_CARET,
&start_exploc, NULL);
}
@@ -986,13 +986,13 @@ layout::maybe_add_location_range (const location_range *loc_range,
return false;
if (finish.file != m_exploc.file)
return false;
- if (loc_range->m_show_caret_p)
+ if (loc_range->m_range_display_kind == SHOW_RANGE_WITH_CARET)
if (caret.file != m_exploc.file)
return false;
/* Sanitize the caret location for non-primary ranges. */
if (m_layout_ranges.length () > 0)
- if (loc_range->m_show_caret_p)
+ if (loc_range->m_range_display_kind == SHOW_RANGE_WITH_CARET)
if (!compatible_locations_p (loc_range->m_loc, m_primary_loc))
/* Discard any non-primary ranges that can't be printed
sanely relative to the primary location. */
@@ -1000,7 +1000,7 @@ layout::maybe_add_location_range (const location_range *loc_range,
/* Everything is now known to be in the correct source file,
but it may require further sanitization. */
- layout_range ri (&start, &finish, loc_range->m_show_caret_p, &caret,
+ layout_range ri (&start, &finish, loc_range->m_range_display_kind, &caret,
loc_range->m_label);
/* If we have a range that finishes before it starts (perhaps
@@ -1037,7 +1037,7 @@ layout::maybe_add_location_range (const location_range *loc_range,
return false;
if (!will_show_line_p (finish.line))
return false;
- if (loc_range->m_show_caret_p)
+ if (loc_range->m_range_display_kind == SHOW_RANGE_WITH_CARET)
if (!will_show_line_p (caret.line))
return false;
}
@@ -1362,8 +1362,12 @@ layout::should_print_annotation_line_p (linenum_type row) const
layout_range *range;
int i;
FOR_EACH_VEC_ELT (m_layout_ranges, i, range)
- if (range->intersects_line_p (row))
- return true;
+ {
+ if (range->m_range_display_kind == SHOW_LINES_WITHOUT_RANGE)
+ return false;
+ if (range->intersects_line_p (row))
+ return true;
+ }
return false;
}
@@ -2102,13 +2106,18 @@ layout::get_state_at_point (/* Inputs. */
int i;
FOR_EACH_VEC_ELT (m_layout_ranges, i, range)
{
+ if (range->m_range_display_kind == SHOW_LINES_WITHOUT_RANGE)
+ /* Bail out early, so that such ranges don't affect underlining or
+ source colorization. */
+ continue;
+
if (range->contains_point (row, column))
{
out_state->range_idx = i;
/* Are we at the range's caret? is it visible? */
out_state->draw_caret_p = false;
- if (range->m_show_caret_p
+ if (range->m_range_display_kind == SHOW_RANGE_WITH_CARET
&& row == range->m_caret.m_line
&& column == range->m_caret.m_column)
out_state->draw_caret_p = true;
@@ -2267,11 +2276,11 @@ gcc_rich_location::add_location_if_nearby (location_t loc)
layout layout (global_dc, this, DK_ERROR);
location_range loc_range;
loc_range.m_loc = loc;
- loc_range.m_show_caret_p = false;
+ loc_range.m_range_display_kind = SHOW_RANGE_WITHOUT_CARET;
if (!layout.maybe_add_location_range (&loc_range, true))
return false;
- add_range (loc, false);
+ add_range (loc);
return true;
}
@@ -2421,8 +2430,8 @@ test_one_liner_multiple_carets_and_ranges ()
dc.caret_chars[2] = 'C';
rich_location richloc (line_table, foo);
- richloc.add_range (bar, true);
- richloc.add_range (field, true);
+ richloc.add_range (bar, SHOW_RANGE_WITH_CARET);
+ richloc.add_range (field, SHOW_RANGE_WITH_CARET);
diagnostic_show_locus (&dc, &richloc, DK_ERROR);
ASSERT_STREQ ("\n"
" foo = bar.field;\n"
@@ -2543,7 +2552,7 @@ test_one_liner_fixit_replace_equal_secondary_range ()
location_t finish = linemap_position_for_column (line_table, 15);
rich_location richloc (line_table, equals);
location_t field = make_location (start, start, finish);
- richloc.add_range (field, false);
+ richloc.add_range (field);
richloc.add_fixit_replace (field, "m_field");
diagnostic_show_locus (&dc, &richloc, DK_ERROR);
/* The replacement range is indicated in the annotation line,
@@ -2690,8 +2699,8 @@ test_one_liner_labels ()
text_range_label label1 ("1");
text_range_label label2 ("2");
gcc_rich_location richloc (foo, &label0);
- richloc.add_range (bar, false, &label1);
- richloc.add_range (field, false, &label2);
+ richloc.add_range (bar, SHOW_RANGE_WITHOUT_CARET, &label1);
+ richloc.add_range (field, SHOW_RANGE_WITHOUT_CARET, &label2);
{
test_diagnostic_context dc;
@@ -2722,8 +2731,8 @@ test_one_liner_labels ()
text_range_label label1 ("label 1");
text_range_label label2 ("label 2");
gcc_rich_location richloc (foo, &label0);
- richloc.add_range (bar, false, &label1);
- richloc.add_range (field, false, &label2);
+ richloc.add_range (bar, SHOW_RANGE_WITHOUT_CARET, &label1);
+ richloc.add_range (field, SHOW_RANGE_WITHOUT_CARET, &label2);
test_diagnostic_context dc;
diagnostic_show_locus (&dc, &richloc, DK_ERROR);
@@ -2744,8 +2753,8 @@ test_one_liner_labels ()
text_range_label label1 ("bbbb");
text_range_label label2 ("c");
gcc_rich_location richloc (foo, &label0);
- richloc.add_range (bar, false, &label1);
- richloc.add_range (field, false, &label2);
+ richloc.add_range (bar, SHOW_RANGE_WITHOUT_CARET, &label1);
+ richloc.add_range (field, SHOW_RANGE_WITHOUT_CARET, &label2);
test_diagnostic_context dc;
diagnostic_show_locus (&dc, &richloc, DK_ERROR);
@@ -2764,8 +2773,8 @@ test_one_liner_labels ()
text_range_label label1 ("1");
text_range_label label2 ("2");
gcc_rich_location richloc (field, &label0);
- richloc.add_range (bar, false, &label1);
- richloc.add_range (foo, false, &label2);
+ richloc.add_range (bar, SHOW_RANGE_WITHOUT_CARET, &label1);
+ richloc.add_range (foo, SHOW_RANGE_WITHOUT_CARET, &label2);
test_diagnostic_context dc;
diagnostic_show_locus (&dc, &richloc, DK_ERROR);
@@ -2784,8 +2793,8 @@ test_one_liner_labels ()
text_range_label label1 ("label 1");
text_range_label label2 ("label 2");
gcc_rich_location richloc (bar, &label0);
- richloc.add_range (bar, false, &label1);
- richloc.add_range (bar, false, &label2);
+ richloc.add_range (bar, SHOW_RANGE_WITHOUT_CARET, &label1);
+ richloc.add_range (bar, SHOW_RANGE_WITHOUT_CARET, &label2);
test_diagnostic_context dc;
diagnostic_show_locus (&dc, &richloc, DK_ERROR);