diff options
Diffstat (limited to 'gcc/diagnostic-show-locus.c')
-rw-r--r-- | gcc/diagnostic-show-locus.c | 63 |
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); |