On Wed, Jan 3, 2018 at 1:58 PM, Michael W. Bombardieri <m...@ii.net> wrote:
> Hello,
>
> In yacc the function print_grammar() writes the file y.output if
> the -v option is used. fprintf() can be used directly for writing
> "spacing" space characters of indentation so a loop can be removed.
>
> - Michael
>
>
> Index: reader.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/yacc/reader.c,v
> retrieving revision 1.34
> diff -u -p -u -r1.34 reader.c
> --- reader.c    25 May 2017 20:11:03 -0000      1.34
> +++ reader.c    3 Jan 2018 12:40:54 -0000
> @@ -1806,7 +1806,7 @@ pack_grammar(void)
>  void
>  print_grammar(void)
>  {
> -       int i, j, k;
> +       int i, k;
>         int spacing = 0;
>         FILE *f = verbose_file;
>
> @@ -1822,9 +1822,8 @@ print_grammar(void)
>                         spacing = strlen(symbol_name[rlhs[i]]) + 1;
>                 } else {
>                         fprintf(f, "%4d  ", i - 2);
> -                       j = spacing;
> -                       while (--j >= 0)
> -                               putc(' ', f);
> +                       if (spacing > 0)
> +                               fprintf(f, "%*s", spacing, "");
>                         putc('|', f);
>                 }


This takes longer to understand, requires a check for a special case,
and likely ends up being slower.

Reply via email to