Commit 736a6efc by David Malcolm Committed by David Malcolm

Colorize %L and %C text to match diagnostic_show_locus (PR fortran/91426)

gcc/fortran/ChangeLog:
	PR fortran/91426
	* error.c (curr_diagnostic): New static variable.
	(gfc_report_diagnostic): New static function.
	(gfc_warning): Replace call to diagnostic_report_diagnostic with
	call to gfc_report_diagnostic.
	(gfc_format_decoder): Colorize the text of %L and %C to match the
	colorization used by diagnostic_show_locus.
	(gfc_warning_now_at): Replace call to diagnostic_report_diagnostic with
	call to gfc_report_diagnostic.
	(gfc_warning_now): Likewise.
	(gfc_warning_internal): Likewise.
	(gfc_error_now): Likewise.
	(gfc_fatal_error): Likewise.
	(gfc_error_opt): Likewise.
	(gfc_internal_error): Likewise.

From-SVN: r276132
parent b8670516
2019-09-25 David Malcolm <dmalcolm@redhat.com>
PR fortran/91426
* error.c (curr_diagnostic): New static variable.
(gfc_report_diagnostic): New static function.
(gfc_warning): Replace call to diagnostic_report_diagnostic with
call to gfc_report_diagnostic.
(gfc_format_decoder): Colorize the text of %L and %C to match the
colorization used by diagnostic_show_locus.
(gfc_warning_now_at): Replace call to diagnostic_report_diagnostic with
call to gfc_report_diagnostic.
(gfc_warning_now): Likewise.
(gfc_warning_internal): Likewise.
(gfc_error_now): Likewise.
(gfc_fatal_error): Likewise.
(gfc_error_opt): Likewise.
(gfc_internal_error): Likewise.
2019-09-23 Paul Thomas <pault@gcc.gnu.org> 2019-09-23 Paul Thomas <pault@gcc.gnu.org>
PR fortran/91729 PR fortran/91729
......
...@@ -760,6 +760,23 @@ gfc_clear_pp_buffer (output_buffer *this_buffer) ...@@ -760,6 +760,23 @@ gfc_clear_pp_buffer (output_buffer *this_buffer)
global_dc->last_location = UNKNOWN_LOCATION; global_dc->last_location = UNKNOWN_LOCATION;
} }
/* The currently-printing diagnostic, for use by gfc_format_decoder,
for colorizing %C and %L. */
static diagnostic_info *curr_diagnostic;
/* A helper function to call diagnostic_report_diagnostic, while setting
curr_diagnostic for the duration of the call. */
static bool
gfc_report_diagnostic (diagnostic_info *diagnostic)
{
gcc_assert (diagnostic != NULL);
curr_diagnostic = diagnostic;
bool ret = diagnostic_report_diagnostic (global_dc, diagnostic);
curr_diagnostic = NULL;
return ret;
}
/* This is just a helper function to avoid duplicating the logic of /* This is just a helper function to avoid duplicating the logic of
gfc_warning. */ gfc_warning. */
...@@ -789,7 +806,7 @@ gfc_warning (int opt, const char *gmsgid, va_list ap) ...@@ -789,7 +806,7 @@ gfc_warning (int opt, const char *gmsgid, va_list ap)
diagnostic_set_info (&diagnostic, gmsgid, &argp, &rich_loc, diagnostic_set_info (&diagnostic, gmsgid, &argp, &rich_loc,
DK_WARNING); DK_WARNING);
diagnostic.option_index = opt; diagnostic.option_index = opt;
bool ret = diagnostic_report_diagnostic (global_dc, &diagnostic); bool ret = gfc_report_diagnostic (&diagnostic);
if (buffered_p) if (buffered_p)
{ {
...@@ -954,7 +971,18 @@ gfc_format_decoder (pretty_printer *pp, text_info *text, const char *spec, ...@@ -954,7 +971,18 @@ gfc_format_decoder (pretty_printer *pp, text_info *text, const char *spec,
loc->lb->location, loc->lb->location,
offset); offset);
text->set_location (loc_num, src_loc, SHOW_RANGE_WITH_CARET); text->set_location (loc_num, src_loc, SHOW_RANGE_WITH_CARET);
/* Colorize the markers to match the color choices of
diagnostic_show_locus (the initial location has a color given
by the "kind" of the diagnostic, the secondary location has
color "range1"). */
gcc_assert (curr_diagnostic != NULL);
const char *color
= (loc_num
? "range1"
: diagnostic_get_color_for_kind (curr_diagnostic->kind));
pp_string (pp, colorize_start (pp_show_color (pp), color));
pp_string (pp, result[loc_num]); pp_string (pp, result[loc_num]);
pp_string (pp, colorize_stop (pp_show_color (pp)));
return true; return true;
} }
default: default:
...@@ -1153,7 +1181,7 @@ gfc_warning_now_at (location_t loc, int opt, const char *gmsgid, ...) ...@@ -1153,7 +1181,7 @@ gfc_warning_now_at (location_t loc, int opt, const char *gmsgid, ...)
va_start (argp, gmsgid); va_start (argp, gmsgid);
diagnostic_set_info (&diagnostic, gmsgid, &argp, &rich_loc, DK_WARNING); diagnostic_set_info (&diagnostic, gmsgid, &argp, &rich_loc, DK_WARNING);
diagnostic.option_index = opt; diagnostic.option_index = opt;
ret = diagnostic_report_diagnostic (global_dc, &diagnostic); ret = gfc_report_diagnostic (&diagnostic);
va_end (argp); va_end (argp);
return ret; return ret;
} }
...@@ -1172,7 +1200,7 @@ gfc_warning_now (int opt, const char *gmsgid, ...) ...@@ -1172,7 +1200,7 @@ gfc_warning_now (int opt, const char *gmsgid, ...)
diagnostic_set_info (&diagnostic, gmsgid, &argp, &rich_loc, diagnostic_set_info (&diagnostic, gmsgid, &argp, &rich_loc,
DK_WARNING); DK_WARNING);
diagnostic.option_index = opt; diagnostic.option_index = opt;
ret = diagnostic_report_diagnostic (global_dc, &diagnostic); ret = gfc_report_diagnostic (&diagnostic);
va_end (argp); va_end (argp);
return ret; return ret;
} }
...@@ -1191,7 +1219,7 @@ gfc_warning_internal (int opt, const char *gmsgid, ...) ...@@ -1191,7 +1219,7 @@ gfc_warning_internal (int opt, const char *gmsgid, ...)
diagnostic_set_info (&diagnostic, gmsgid, &argp, &rich_loc, diagnostic_set_info (&diagnostic, gmsgid, &argp, &rich_loc,
DK_WARNING); DK_WARNING);
diagnostic.option_index = opt; diagnostic.option_index = opt;
ret = diagnostic_report_diagnostic (global_dc, &diagnostic); ret = gfc_report_diagnostic (&diagnostic);
va_end (argp); va_end (argp);
return ret; return ret;
} }
...@@ -1209,7 +1237,7 @@ gfc_error_now (const char *gmsgid, ...) ...@@ -1209,7 +1237,7 @@ gfc_error_now (const char *gmsgid, ...)
va_start (argp, gmsgid); va_start (argp, gmsgid);
diagnostic_set_info (&diagnostic, gmsgid, &argp, &rich_loc, DK_ERROR); diagnostic_set_info (&diagnostic, gmsgid, &argp, &rich_loc, DK_ERROR);
diagnostic_report_diagnostic (global_dc, &diagnostic); gfc_report_diagnostic (&diagnostic);
va_end (argp); va_end (argp);
} }
...@@ -1225,7 +1253,7 @@ gfc_fatal_error (const char *gmsgid, ...) ...@@ -1225,7 +1253,7 @@ gfc_fatal_error (const char *gmsgid, ...)
va_start (argp, gmsgid); va_start (argp, gmsgid);
diagnostic_set_info (&diagnostic, gmsgid, &argp, &rich_loc, DK_FATAL); diagnostic_set_info (&diagnostic, gmsgid, &argp, &rich_loc, DK_FATAL);
diagnostic_report_diagnostic (global_dc, &diagnostic); gfc_report_diagnostic (&diagnostic);
va_end (argp); va_end (argp);
gcc_unreachable (); gcc_unreachable ();
...@@ -1310,7 +1338,7 @@ gfc_error_opt (int opt, const char *gmsgid, va_list ap) ...@@ -1310,7 +1338,7 @@ gfc_error_opt (int opt, const char *gmsgid, va_list ap)
} }
diagnostic_set_info (&diagnostic, gmsgid, &argp, &richloc, DK_ERROR); diagnostic_set_info (&diagnostic, gmsgid, &argp, &richloc, DK_ERROR);
diagnostic_report_diagnostic (global_dc, &diagnostic); gfc_report_diagnostic (&diagnostic);
if (buffered_p) if (buffered_p)
{ {
...@@ -1360,7 +1388,7 @@ gfc_internal_error (const char *gmsgid, ...) ...@@ -1360,7 +1388,7 @@ gfc_internal_error (const char *gmsgid, ...)
va_start (argp, gmsgid); va_start (argp, gmsgid);
diagnostic_set_info (&diagnostic, gmsgid, &argp, &rich_loc, DK_ICE); diagnostic_set_info (&diagnostic, gmsgid, &argp, &rich_loc, DK_ICE);
diagnostic_report_diagnostic (global_dc, &diagnostic); gfc_report_diagnostic (&diagnostic);
va_end (argp); va_end (argp);
gcc_unreachable (); gcc_unreachable ();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment