summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2006-09-12 17:26:02 +0000
committerPaul Eggert <eggert@cs.ucla.edu>2006-09-12 17:26:02 +0000
commit8e1687aef68e5955ecd3140149d5f97337c222f1 (patch)
tree1f2baa1d07da24a27d7d7dddd04ddb27878a0294
parentaef3da86899c5f2cd4eed728b63bd82413106a43 (diff)
downloadbison-8e1687aef68e5955ecd3140149d5f97337c222f1.tar.gz
* data/c.m4 (b4_null, b4_case): Define.
* src/output.c (prepare_symbols): Use b4_null. (user_actions_output): Use b4_case.
-rw-r--r--ChangeLog6
-rw-r--r--data/c.m422
-rw-r--r--src/output.c16
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 <bonzini@gnu.org> (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 <eggert@cs.ucla.edu>
* 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);
}
/*--------------------------------------.