From 8e1687aef68e5955ecd3140149d5f97337c222f1 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 12 Sep 2006 17:26:02 +0000 Subject: [PATCH] * data/c.m4 (b4_null, b4_case): Define. * src/output.c (prepare_symbols): Use b4_null. (user_actions_output): Use b4_case. --- ChangeLog | 6 ++++++ data/c.m4 | 22 +++++++++++++++++++--- src/output.c | 16 +++++----------- 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 16802bb4..0e17efaa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-09-12 Paolo Bonzini (tiny change) + + * data/c.m4 (b4_null, b4_case): Define. + * src/output.c (prepare_symbols): Use b4_null. + (user_actions_output): Use b4_case. + 2006-09-11 Paul Eggert * data/glr.c (b4_shared_declarations): Put start-header first, diff --git a/data/c.m4 b/data/c.m4 index 2ef88b15..ffb04c20 100644 --- a/data/c.m4 +++ b/data/c.m4 @@ -81,7 +81,6 @@ m4_define([b4_identification], ]) - ## ---------------- ## ## Default values. ## ## ---------------- ## @@ -100,7 +99,6 @@ m4_define_default([b4_location_initial_line], [1]) ## Pure/impure interfaces. ## ## ------------------------ ## - # b4_user_args # ------------ m4_define([b4_user_args], @@ -137,11 +135,11 @@ m4_define([b4_parse_param_use], ])dnl ]) + ## ------------ ## ## Data Types. ## ## ------------ ## - # b4_ints_in(INT1, INT2, LOW, HIGH) # --------------------------------- # Return 1 iff both INT1 and INT2 are in [LOW, HIGH], 0 otherwise. @@ -173,6 +171,17 @@ m4_define([b4_int_type_for], [b4_int_type($1_min, $1_max)]) +## ---------## +## Values. ## +## ---------## + +# b4_null +--------- +# Return a null pointer constant. NULL infringes on the user name +# space in C, so use 0 rather than NULL. +m4_define([b4_null], [0]) + + ## ------------------ ## ## Decoding options. ## ## ------------------ ## @@ -458,6 +467,13 @@ b4_define_user_code([stype]) ## User actions. ## ## -------------- ## +# b4_case(LABEL, STATEMENTS) +# -------------------------- +m4_define([b4_case], +[ case $1: +$2 + break;]) + # b4_symbol_actions(FILENAME, LINENO, # SYMBOL-TAG, SYMBOL-NUM, # SYMBOL-ACTION, SYMBOL-TYPENAME) diff --git a/src/output.c b/src/output.c index 5aa029ec..1a7769df 100644 --- a/src/output.c +++ b/src/output.c @@ -176,9 +176,7 @@ prepare_symbols (void) obstack_1grow (&format_obstack, ','); j += width; } - /* Add a NULL entry to list of tokens (well, 0, as NULL might not be - defined). */ - obstack_sgrow (&format_obstack, " 0"); + obstack_sgrow (&format_obstack, " ]b4_null["); /* Finish table and store. */ obstack_1grow (&format_obstack, 0); @@ -290,20 +288,16 @@ user_actions_output (FILE *out) { rule_number r; - fputs ("m4_define([b4_actions], \n[[", out); + fputs ("m4_define([b4_actions], \n[", out); for (r = 0; r < nrules; ++r) if (rules[r].action) { - fprintf (out, " case %d:\n", r + 1); - - fprintf (out, "]b4_syncline(%d, ", + fprintf (out, "b4_case(%d, [b4_syncline(%d, ", r + 1, rules[r].action_location.start.line); escaped_output (out, rules[r].action_location.start.file); - fprintf (out, ")[\n"); - fprintf (out, " %s\n break;\n\n", - rules[r].action); + fprintf (out, ")\n[ %s]])\n\n", rules[r].action); } - fputs ("]])\n\n", out); + fputs ("])\n\n", out); } /*--------------------------------------. -- 2.47.2