mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-12 13:53:03 +00:00
preserve the indentation in the ouput
Preserve the actions' initial indentation. For instance, on
| %define api.value.type {int}
| %%
| exp: exp '/' exp { if ($3)
| $$ = $1 + $3;
| else
| $$ = 0; }
we used to generate
| { if (yyvsp[0])
| yyval = yyvsp[-2] + yyvsp[0];
| else
| yyval = 0; }
now we produce
| { if (yyvsp[0])
| yyval = yyvsp[-2] + yyvsp[0];
| else
| yyval = 0; }
See https://lists.gnu.org/archive/html/bison-patches/2019-06/msg00012.html.
* data/skeletons/bison.m4 (b4_symbol_action): Output the code in
column 0, leave indentation matters to the C code.
* src/output.c (user_actions_output): Preserve the incoming
indentation in the output.
(prepare_symbol_definitions): Likewise for %printer/%destructor.
* tests/synclines.at (Output columns): New.
This commit is contained in:
26
src/output.c
26
src/output.c
@@ -359,9 +359,9 @@ symbol_numbers_output (FILE *out)
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------.
|
||||
| Output the user actions to OUT. |
|
||||
`---------------------------------*/
|
||||
/*-------------------------------------------.
|
||||
| Output the user reduction actions to OUT. |
|
||||
`-------------------------------------------*/
|
||||
|
||||
static void
|
||||
user_actions_output (FILE *out)
|
||||
@@ -370,11 +370,19 @@ user_actions_output (FILE *out)
|
||||
for (rule_number r = 0; r < nrules; ++r)
|
||||
if (rules[r].action)
|
||||
{
|
||||
fprintf (out, "%s(%d, [b4_syncline(%d, ",
|
||||
fprintf (out, "%s(%d, [",
|
||||
rules[r].is_predicate ? "b4_predicate_case" : "b4_case",
|
||||
r + 1, rules[r].action_loc.start.line);
|
||||
string_output (out, rules[r].action_loc.start.file);
|
||||
fprintf (out, ")dnl\n[ %s]])\n\n", rules[r].action);
|
||||
r + 1);
|
||||
if (!no_lines_flag)
|
||||
{
|
||||
fprintf (out, "b4_syncline(%d, ",
|
||||
rules[r].action_loc.start.line);
|
||||
string_output (out, rules[r].action_loc.start.file);
|
||||
fprintf (out, ")dnl\n");
|
||||
}
|
||||
fprintf (out, "[%*s%s]])\n\n",
|
||||
rules[r].action_loc.start.column - 1, "",
|
||||
rules[r].action);
|
||||
}
|
||||
fputs ("])\n\n", out);
|
||||
}
|
||||
@@ -482,7 +490,9 @@ prepare_symbol_definitions (void)
|
||||
muscle_location_grow (key, p->location);
|
||||
|
||||
SET_KEY (pname);
|
||||
MUSCLE_INSERT_STRING_RAW (key, p->code);
|
||||
obstack_printf (&muscle_obstack,
|
||||
"%*s%s", p->location.start.column - 1, "", p->code);
|
||||
muscle_insert (key, obstack_finish0 (&muscle_obstack));
|
||||
}
|
||||
}
|
||||
#undef SET_KEY2
|
||||
|
||||
Reference in New Issue
Block a user