On Sat, 15 Feb 2025 23:37:20 -0500
David Malcolm <[email protected]> wrote:
> + rich_location richloc (line_table, token_location);
> + bool ret = global_dc->diagnostic_impl (&richloc, nullptr,
> option_id,
> + gmsgid, &ap, DK_ERROR);
> + va_end (ap);
> + global_dc->end_group();
> +}
>
> For errors, just pass 0 as the diagnostic_option_id. Same for the
> various DK_SORRY and DK_FATAL.
OK, but is this a style thing? That's effectively what happens, using a name.
option_id is a file-scope static constant, initialized to 0. Instead of
passing an integer that the compiler uses to construct a temporary
diagnostic_option_id, we pass an already-constructed diagnostic_option_id by
value.
(Maybe zero_option_id would be a better name?)
> +bool
> +yywarn( const char gmsgid[], ... ) {
> + verify_format(gmsgid);
> + auto_diagnostic_group d;
> + va_list ap;
> + va_start (ap, gmsgid);
> + auto ret = emit_diagnostic_valist( DK_WARNING, token_location,
> + option_id, gmsgid, &ap );
> + va_end (ap);
> + return ret;
> +}
>
> For warnings, ideally this should take a diagnostic_option_id
> controlling the warning as the initial parameter, rather than have a
> global variable for this.
Yes, absolutely. That's on the to do list. I wanted to get a set of patches
submitted for consideration, and drew the line ahead of that item.
> Is this something that yacc is imposing on you?
Not at all. I need to go into gcc/cobol/lang.opt and enumerate the warnings.
Then I need to pass the warning ID into yywarn (which will be renamed
warn_msg() because the "yy" prefix is properly reserved for yacc).
As we say, just a small matter of programming. :-)
--jkl