]> git.saurik.com Git - bison.git/commitdiff
* NEWS: Version 2.0b.
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 24 Jul 2005 07:24:22 +0000 (07:24 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 24 Jul 2005 07:24:22 +0000 (07:24 +0000)
* data/glr.c (ATTRIBUTE_UNUSED): Remove, since it infringes on
the user's name space.  All uses changed to __attribute__
((__unused__)).
(yyFail, yyMemoryExhausted, yyreportAmbiguity):
Add __attribute__ ((__noreturn__)).

* etc/clcommit: Remove.  We weren't using it, and it failed
"make maintainer-distcheck".
* Makefile.maint: Merge from coreutils.
(CVS_LIST, CVS_LIST_EXCEPT): New macros.
(syntax-check-rules): Change list of rules as described below.
(sc_cast_of_alloca_return_value, sc_dd_max_sym_length):
(sc_file_system, sc_obsolete_symbols, sc_prohibit_atoi_atof):
(sc_prohibit_jm_in_m4, sc_root_tests, sc_tight_scope):
(sc_trailing_space): New rules.
(sc_xalloc_h_in_src): Remove.
(sc_cast_of_argument_to_free, sc_cast_of_x_alloc_return_value):
(sc_space_tab, sc_error_exit_success, sc_changelog):
(sc_system_h_headers, sc_sun_os_names, sc_unmarked_diagnostics):
(makefile-check, po-check, author_mark_check):
(makefile_path_separator_check, copyright-check):
Use grep -n, to make it easier to find violations.
Use CVS_LIST and CVS_LIST_EXCEPT.
(header_regexp, h_re): Remove.
(dd_c): New macro.
(sc_dd_max_sym_length, .re-list, news-date-check): New rules.
(my-distcheck): Use more-modern GCC flags.
(signatures, %.asc): Remove.
(rel-files, announcement): Remove signatures.
Restore old updating code, even though we don't use it, so
that we're the same as coreutils.
(alpha, beta, major): Depend on news-date-check.
Make the upload commands.

* data/c.m4, data/lalr1.cc, data/yacc.c: Normalize white space.
* lib/abitset.h, lib/bbitset.h, lib/bitset.h: Likewise.
* lib/bitset_stats.c, lib/ebitset.h, lib/lbitset.c: Likewise.
* lib/libitset.h, lib/timevar.c, lib/vbitset.h: Likewise.
* src/Makefile.am, src/gram.c, src/muscle_tab.h: Likewise.
* src/parse-gram.y, src/system.h, src/tables.c, src/vcg.c: Likewise.
* src/vcg_defaults.h, tests/cxx-type.at, tests/existing.at: Likewise.
* tests/sets.at: Likewise.

* data/m4sugar/m4sugar.m4: Sync from Autoconf, except that
we comment out the Autoconf version number.
* doc/bison.texinfo (Calc++ Scanner): Don't use atoi, as
it's error-prone and "make maintainer-distcheck" rejects it.

* lib/subpipe.c: Include <fcntl.h> without checking for HAVE_FCNTL_H.
Indent calls to "error" to pacify "make maintainer-distcheck",
when the calls are not intended to be translated.
* m4/subpipe.m4 (BISON_PREREQ_SUBPIPE): Don't check for fcntl.h.

* src/Makefile.am (DEFS): Use +=, to pacify
"make maintainer-distcheck".
(bison_SOURCES): Add scan-skel.h.
(sc_tight_scope): New rule, from coreutils.

* src/files.c (src_extension, header_extension):
Now static, not extern.
* src/getargs.c (short_options): Likewise.
* src/muscle_tab.c (muscle_table): Likewise.
* src/parse-gram.y (current_class, current_type, current_prec):
Likewise.
* src/reader.c (grammar_end, previous_rule_end): Likewise.
* src/getargs.h: Redo comments to pacify "make maintainer-distcheck".
* src/main.c (main): Cast bindtextdomain and textdomain calls to
void, to avoid warning when NLS is disabled.
* src/output.c: Include scan-skel.h.
(scan_skel): Remove decl, since scan-skel.h does this.
(output_skeleton):
Indent calls to "error" to pacify "make maintainer-distcheck".
* src/print_graph.c: Don't include <obstack.h>, as system.h does this.
* src/reader.h (gram_end, gram_lineno): New decls to pacify
"make maintainer-distcheck".
* src/scan-skel.l (skel_lex, skel_get_lineno, skel_get_in):
(skel_get_out, skel_get_leng, skel_get_text, skel_set_lineno):
(skel_set_in, skel_set_out, skel_get_debug, skel_set_debug):
(skel_lex_destroy, scan_skel): Move these decls to...
* src/scan-skel.h: New file.
* src/uniqstr.c (uniqstr_assert):
Indent calls to "error" to pacify "make maintainer-distcheck".

* tests/Makefile.am ($(srcdir)/package.m4): Use $(VAR),
not @VAR@.

* tests/torture.at: Revamp to avoid misuse of atoi that
"make maintainer-distcheck" complained about.

46 files changed:
ChangeLog
Makefile.maint
NEWS
data/c.m4
data/lalr1.cc
data/m4sugar/m4sugar.m4
data/yacc.c
doc/bison.texinfo
etc/clcommit [deleted file]
examples/calc++/calc++-parser.yy [deleted file]
lib/abitset.h
lib/bbitset.h
lib/bitset.h
lib/bitset_stats.c
lib/ebitset.h
lib/lbitset.c
lib/lbitset.h
lib/subpipe.c
lib/timevar.c
lib/vbitset.h
m4/subpipe.m4
src/Makefile.am
src/files.c
src/getargs.c
src/getargs.h
src/gram.c
src/main.c
src/muscle_tab.c
src/muscle_tab.h
src/output.c
src/parse-gram.y
src/print_graph.c
src/reader.c
src/reader.h
src/scan-skel.h [new file with mode: 0644]
src/scan-skel.l
src/system.h
src/tables.c
src/uniqstr.c
src/vcg.c
src/vcg_defaults.h
tests/Makefile.am
tests/cxx-type.at
tests/existing.at
tests/sets.at
tests/torture.at

index a3deacb988b2dc48c7e101324244f7b97c87b755..6b30ded8e24bbb1c5fe97466c32c1223b5bb8190 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,139 @@
+2005-07-24  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * NEWS: Version 2.0b.
+
+       * data/glr.c (ATTRIBUTE_UNUSED): Remove, since it infringes on
+       the user's name space.  All uses changed to __attribute__
+       ((__unused__)).
+       (yyFail, yyMemoryExhausted, yyreportAmbiguity):
+       Add __attribute__ ((__noreturn__)).
+
+       * etc/clcommit: Remove.  We weren't using it, and it failed
+       "make maintainer-distcheck".
+       * Makefile.maint: Merge from coreutils.
+       (CVS_LIST, CVS_LIST_EXCEPT): New macros.
+       (syntax-check-rules): Change list of rules as described below.
+       (sc_cast_of_alloca_return_value, sc_dd_max_sym_length):
+       (sc_file_system, sc_obsolete_symbols, sc_prohibit_atoi_atof):
+       (sc_prohibit_jm_in_m4, sc_root_tests, sc_tight_scope):
+       (sc_trailing_space): New rules.
+       (sc_xalloc_h_in_src): Remove.
+       (sc_cast_of_argument_to_free, sc_cast_of_x_alloc_return_value):
+       (sc_space_tab, sc_error_exit_success, sc_changelog):
+       (sc_system_h_headers, sc_sun_os_names, sc_unmarked_diagnostics):
+       (makefile-check, po-check, author_mark_check):
+       (makefile_path_separator_check, copyright-check):
+       Use grep -n, to make it easier to find violations.
+       Use CVS_LIST and CVS_LIST_EXCEPT.
+       (header_regexp, h_re): Remove.
+       (dd_c): New macro.
+       (sc_dd_max_sym_length, .re-list, news-date-check): New rules.
+       (my-distcheck): Use more-modern GCC flags.
+       (signatures, %.asc): Remove.
+       (rel-files, announcement): Remove signatures.
+       Restore old updating code, even though we don't use it, so
+       that we're the same as coreutils.
+       (alpha, beta, major): Depend on news-date-check.
+       Make the upload commands.
+
+       * data/c.m4, data/lalr1.cc, data/yacc.c: Normalize white space.
+       * lib/abitset.h, lib/bbitset.h, lib/bitset.h: Likewise.
+       * lib/bitset_stats.c, lib/ebitset.h, lib/lbitset.c: Likewise.
+       * lib/libitset.h, lib/timevar.c, lib/vbitset.h: Likewise.
+       * src/Makefile.am, src/gram.c, src/muscle_tab.h: Likewise.
+       * src/parse-gram.y, src/system.h, src/tables.c, src/vcg.c: Likewise.
+       * src/vcg_defaults.h, tests/cxx-type.at, tests/existing.at: Likewise.
+       * tests/sets.at: Likewise.
+
+       * data/m4sugar/m4sugar.m4: Sync from Autoconf, except that
+       we comment out the Autoconf version number.
+       * doc/bison.texinfo (Calc++ Scanner): Don't use atoi, as
+       it's error-prone and "make maintainer-distcheck" rejects it.
+
+       * lib/subpipe.c: Include <fcntl.h> without checking for HAVE_FCNTL_H.
+       Indent calls to "error" to pacify "make maintainer-distcheck",
+       when the calls are not intended to be translated.
+       * m4/subpipe.m4 (BISON_PREREQ_SUBPIPE): Don't check for fcntl.h.
+
+       * src/Makefile.am (DEFS): Use +=, to pacify
+       "make maintainer-distcheck".
+       (bison_SOURCES): Add scan-skel.h.
+       (sc_tight_scope): New rule, from coreutils.
+
+       * src/files.c (src_extension, header_extension):
+       Now static, not extern.
+       * src/getargs.c (short_options): Likewise.
+       * src/muscle_tab.c (muscle_table): Likewise.
+       * src/parse-gram.y (current_class, current_type, current_prec):
+       Likewise.
+       * src/reader.c (grammar_end, previous_rule_end): Likewise.
+       * src/getargs.h: Redo comments to pacify "make maintainer-distcheck".
+       * src/main.c (main): Cast bindtextdomain and textdomain calls to
+       void, to avoid warning when NLS is disabled.
+       * src/output.c: Include scan-skel.h.
+       (scan_skel): Remove decl, since scan-skel.h does this.
+       (output_skeleton):
+       Indent calls to "error" to pacify "make maintainer-distcheck".
+       * src/print_graph.c: Don't include <obstack.h>, as system.h does this.
+       * src/reader.h (gram_end, gram_lineno): New decls to pacify
+       "make maintainer-distcheck".
+       * src/scan-skel.l (skel_lex, skel_get_lineno, skel_get_in):
+       (skel_get_out, skel_get_leng, skel_get_text, skel_set_lineno):
+       (skel_set_in, skel_set_out, skel_get_debug, skel_set_debug):
+       (skel_lex_destroy, scan_skel): Move these decls to...
+       * src/scan-skel.h: New file.
+       * src/uniqstr.c (uniqstr_assert):
+       Indent calls to "error" to pacify "make maintainer-distcheck".
+
+       * tests/Makefile.am ($(srcdir)/package.m4): Use $(VAR),
+       not @VAR@.
+
+       * tests/torture.at: Revamp to avoid misuse of atoi that
+       "make maintainer-distcheck" complained about.
+
+       * examples/extexi (message): Don't print a message more than once,
+       and omit line-number decoration that makes Emacs compile think
+       that informative messages are worth worrying about.
+
+2005-07-22  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * configure.ac: Update version number.
+
+       * Makefile.am (SUBDIRS): Add examples; somehow this got removed
+       accidentally.
+       * examples/calc++/calc++-parser.yy: Remove from CVS, as it's
+       autogenerated by the maintainer.
+       * examples/calc++/.cvsignore: Add *.yy.
+
+       * lib/bitset.c (bitset_alloc): Don't cast xcalloc result.
+       * lib/bitset_stats.c (bitset_stats_init): Likewise.
+       * lib/bitsetv.c (bitsetv_alloc): Likewise.
+
+       * po/POTFILES.in: Add lib/xalloc-die.c; remove lib/xmalloc.c.
+
+       * src/relation.c (relation_transpose): Rewrite to avoid bogus complaint
+       from maintainer-distcheck about casting the argument of 'free'.
+
+       * NEWS: Mention recent yytname changes.
+       * THANKS: Add Anthony Heading, twlevo@xs4all.nl.
+
+       * bootstrap: For translations that have not yet been upgraded to
+       the new runtime-po domain, prime the pump by extracting the
+       relevant strings from the obsolete translations.  This code can be
+       removed once the bison-runtime domain has been translated by each
+       team.
+
+       * src/scan-gram.l (<SC_PRE_CODE>.): Don't double-quote token names,
+       now that token names are already quoted.
+
+       Fix problem reported by Anthony Heading.
+       * data/glr.c (YYTOKEN_TABLE): New macro.
+       (yytname): Define if YYTOKEN_TABLE.
+       * data/yacc.c (YYTOKEN_TABLE, yytname): Likewise.
+       * data/lalr1.cc (YYTOKEN_TABLE, yytname_): Likewise.
+       (YYERROR_VERBOSE): Define the same way the other skeletons do.
+       * src/output.c (prepare_symbols): Output token_table_flag.
+
 2005-07-21  Paul Eggert  <eggert@cs.ucla.edu>
 
        * data/glr.c (yyinitGLRStack, yyreturn): Don't call malloc
 2005-07-21  Paul Eggert  <eggert@cs.ucla.edu>
 
        * data/glr.c (yyinitGLRStack, yyreturn): Don't call malloc
        line.
 
 2004-10-22  Akim Demaille  <akim@epita.fr>
        line.
 
 2004-10-22  Akim Demaille  <akim@epita.fr>
-       and  Paul Eggert  <eggert@cs.ucla.edu>
+       and Paul Eggert  <eggert@cs.ucla.edu>
 
        Remove some arbitrary limits on goto numbers and relations.
        * src/lalr.c (goto_map, ngotos, from_state, to_state): Omit
 
        Remove some arbitrary limits on goto numbers and relations.
        * src/lalr.c (goto_map, ngotos, from_state, to_state): Omit
 2004-09-06  Akim Demaille  <akim@epita.fr>
 
        * data/lalr1.cc: Adjust the indentation of the labels.
 2004-09-06  Akim Demaille  <akim@epita.fr>
 
        * data/lalr1.cc: Adjust the indentation of the labels.
-        (Parser::pop): New.
+       (Parser::pop): New.
        Use it.
 
 2004-09-06  Akim Demaille  <akim@epita.fr>
        Use it.
 
 2004-09-06  Akim Demaille  <akim@epita.fr>
 
        * REFERENCES: entered into RCS
 
 
        * REFERENCES: entered into RCS
 
------
-
-Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
-1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-
-This file is part of Bison, the GNU Compiler Compiler.
 
 
-Bison is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
+       -----
 
 
-Bison is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+       Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996,
+       1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software
+       Foundation, Inc.
 
 
-You should have received a copy of the GNU General Public License
-along with Bison; see the file COPYING.  If not, write to
-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA.
+       Copying and distribution of this file, with or without
+       modification, are permitted provided the copyright notice and this
+       notice are preserved.
index e803a810210ac63a12be68b54da246865faa1795..8656fbbad6a11491414b80dc9e42ea0ca6889e51 100644 (file)
@@ -2,7 +2,7 @@
 # This Makefile fragment is shared between the coreutils,
 # CPPI, Bison, and Autoconf.
 
 # This Makefile fragment is shared between the coreutils,
 # CPPI, Bison, and Autoconf.
 
-## Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+## Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 ##
 ## This program is free software; you can redistribute it and/or modify
 ## it under the terms of the GNU General Public License as published by
 ##
 ## This program is free software; you can redistribute it and/or modify
 ## it under the terms of the GNU General Public License as published by
@@ -24,6 +24,7 @@
 ME := Makefile.maint
 
 # Do not save the original name or timestamp in the .tar.gz file.
 ME := Makefile.maint
 
 # Do not save the original name or timestamp in the .tar.gz file.
+# Use --rsyncable if available.
 GZIP_ENV = \
   "--no-name --best$$( \
     case $$(gzip --help) in \
 GZIP_ENV = \
   "--no-name --best$$( \
     case $$(gzip --help) in \
@@ -33,6 +34,20 @@ GZIP_ENV = \
 
 CVS = cvs
 
 
 CVS = cvs
 
+CVS_LIST = sh -c ' \
+    (cvsu --find --types=AFGM $$*) 2>/dev/null || \
+    awk -F/ '\''{ \
+       if (!$$1 && $$3 !~ /^-/) { \
+         f=FILENAME; \
+         sub(/CVS\/Entries/, "", f); \
+         print f $$2; \
+       }}'\'' \
+      $$(find $${*-*} -name Entries -print) /dev/null \
+  ' dummy
+
+CVS_LIST_EXCEPT = \
+  $(CVS_LIST) | if test -f .x-$@; then grep -vEf .x-$@; else grep -v ChangeLog; fi
+
 ifeq ($(origin prev_version_file), undefined)
   prev_version_file = .prev-version
 endif
 ifeq ($(origin prev_version_file), undefined)
   prev_version_file = .prev-version
 endif
@@ -69,126 +84,184 @@ local-checks-available = \
 
 local-check = $(filter-out $(local-checks-to-skip), $(local-checks-available))
 
 
 local-check = $(filter-out $(local-checks-to-skip), $(local-checks-available))
 
-# Make sure C source files in src/ don't include xalloc.h directly,
-# since they all already include it via sys2.h.
-# It's not a big deal -- just aesthetics.
 .PHONY: $(syntax-check-rules)
 syntax-check-rules = \
   sc_cast_of_argument_to_free \
   sc_cast_of_x_alloc_return_value \
 .PHONY: $(syntax-check-rules)
 syntax-check-rules = \
   sc_cast_of_argument_to_free \
   sc_cast_of_x_alloc_return_value \
+  sc_cast_of_alloca_return_value \
   sc_changelog \
   sc_changelog \
+  sc_dd_max_sym_length \
   sc_error_exit_success \
   sc_error_exit_success \
+  sc_file_system \
+  sc_obsolete_symbols \
+  sc_prohibit_atoi_atof \
+  sc_prohibit_jm_in_m4 \
+  sc_root_tests \
   sc_space_tab \
   sc_sun_os_names \
   sc_system_h_headers \
   sc_space_tab \
   sc_sun_os_names \
   sc_system_h_headers \
-  sc_unmarked_diagnostics \
-  sc_xalloc_h_in_src
+  sc_tight_scope \
+  sc_trailing_space \
+  sc_unmarked_diagnostics
 
 syntax-check: $(syntax-check-rules)
 
 syntax-check: $(syntax-check-rules)
-#      @grep -E '#  *include <(limits|std(def|arg|bool))\.h>'          \
+#      @grep -nE '#  *include <(limits|std(def|arg|bool))\.h>'         \
 #          $$(find -type f -name '*.[chly]') &&                        \
 #        { echo '$(ME): found conditional include' 1>&2;               \
 #          exit 1; } || :
 
 #          $$(find -type f -name '*.[chly]') &&                        \
 #        { echo '$(ME): found conditional include' 1>&2;               \
 #          exit 1; } || :
 
-#      grep -E '^#  *include <(string|stdlib)\.h>'                     \
+#      grep -nE '^#  *include <(string|stdlib)\.h>'                    \
 #          $(srcdir)/{lib,src}/*.[chy] &&                              \
 #        { echo '$(ME): FIXME' 1>&2;                                   \
 #          exit 1; } || :
 # FIXME: don't allow `#include .strings\.h' anywhere
 
 #          $(srcdir)/{lib,src}/*.[chy] &&                              \
 #        { echo '$(ME): FIXME' 1>&2;                                   \
 #          exit 1; } || :
 # FIXME: don't allow `#include .strings\.h' anywhere
 
-# Look for diagnostics that aren't marked for translation.
-# This won't find any for which error's format string is on a separate line.
-sc_unmarked_diagnostics:
-       @grep --exclude=$(srcdir)/src/shred.c -E                        \
-           '\<error \([^"]*"[^"]*[a-z]{3}' $(srcdir)/{lib,src}/*.c     \
-         | grep -v '_(' &&                                             \
-         { echo '$(ME): found unmarked diagnostic(s)' 1>&2;            \
-           exit 1; } || :
-
 sc_cast_of_argument_to_free:
 sc_cast_of_argument_to_free:
-       @grep -E '\<free \(\(' $(srcdir)/{lib,src}/*.[chly] &&          \
+       @grep -nE '\<free \(\(' $(srcdir)/{lib,src}/*.[chly] &&         \
          { echo '$(ME): don'\''t cast free argument' 1>&2;             \
            exit 1; } || :
 
 sc_cast_of_x_alloc_return_value:
          { echo '$(ME): don'\''t cast free argument' 1>&2;             \
            exit 1; } || :
 
 sc_cast_of_x_alloc_return_value:
-       @grep -E --exclude=$(srcdir)/lib/regex.c                        \
-           '\*\) *x(m|c|re)alloc\>' $(srcdir)/{lib,src}/*.[chy] &&     \
+       @grep -nE --exclude=$(srcdir)/lib/regex.c                       \
+           '\*\) *x(m|c|re)alloc\>'                                    \
+           $(srcdir)/{lib,src}/*.[chy] &&                              \
          { echo '$(ME): don'\''t cast x*alloc return value' 1>&2;      \
            exit 1; } || :
 
          { echo '$(ME): don'\''t cast x*alloc return value' 1>&2;      \
            exit 1; } || :
 
+sc_cast_of_alloca_return_value:
+       @grep -nE '\*\) *alloca\>'                                      \
+           $(srcdir)/src/*.[chy] &&                                    \
+         { echo '$(ME): don'\''t cast alloca return value' 1>&2;       \
+           exit 1; } || :
+
 sc_space_tab:
 sc_space_tab:
-       @( cvsu --list ) > /dev/null 2>&1 || : &&                       \
-         grep '[ ]     '                                               \
-            $$(cvsu --list | grep -vEf .x-$@ ) &&                      \
+       @grep -n '[ ]   '                                               \
+            $$($(CVS_LIST_EXCEPT)) &&                                  \
          { echo '$(ME): found SPACE-TAB sequence; remove the SPACE'    \
                1>&2; exit 1; } || :
 
          { echo '$(ME): found SPACE-TAB sequence; remove the SPACE'    \
                1>&2; exit 1; } || :
 
+# Don't use the old ato* functions in `real' code.
+# They provide no error checking mechanism.
+# Instead, use strto* functions.
+sc_prohibit_atoi_atof:
+       @grep -nE '\<(ato[filq]|ato''ll)\>'                             \
+            $$($(CVS_LIST_EXCEPT)) &&                                  \
+         { echo '$(ME): do not use ato''f, ato''i, ato''l, ato''ll, or ato''q' \
+               1>&2; exit 1; } || :
+
 # Using EXIT_SUCCESS as the first argument to error is misleading,
 # since when that parameter is 0, error does not exit.  Use `0' instead.
 sc_error_exit_success:
 # Using EXIT_SUCCESS as the first argument to error is misleading,
 # since when that parameter is 0, error does not exit.  Use `0' instead.
 sc_error_exit_success:
-       @grep -F 'error (EXIT_SUCCESS,'                                 \
+       @grep -nF 'error (EXIT_SUCCESS,'                                        \
            $$(find -type f -name '*.[chly]') &&                        \
          { echo '$(ME): found error (EXIT_SUCCESS' 1>&2;               \
            exit 1; } || :
 
            $$(find -type f -name '*.[chly]') &&                        \
          { echo '$(ME): found error (EXIT_SUCCESS' 1>&2;               \
            exit 1; } || :
 
-# FIXME: merge this with sc_system_h_headers below.
-# xalloc.h is included via system.h, so should not be included
-# directly by any file in src/.
-sc_xalloc_h_in_src:
-       @if test -f $(srcdir)/src/sys2.h; then                          \
-         if grep 'xalloc\.h' $(srcdir)/src/*.c; then                   \
-           exit 1;                                                     \
-         fi;                                                           \
-       fi
+sc_file_system:
+       @grep -ni 'file''system'                                        \
+            $$($(CVS_LIST_EXCEPT)) &&                                  \
+         { echo '$(ME): found use of "file''system";'                  \
+           'rewrite to use "file system"' 1>&2;                        \
+           exit 1; } || :
+
+sc_obsolete_symbols:
+       @grep -nE '\<(HAVE_''FCNTL_H)\>'                                        \
+            $$($(CVS_LIST_EXCEPT)) &&                                  \
+         { echo '$(ME): do not use HAVE_''FCNTL_H'                     \
+               1>&2; exit 1; } || :
 
 # FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ
 
 # Each nonempty line must start with a year number, or a TAB.
 sc_changelog:
 
 # FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ
 
 # Each nonempty line must start with a year number, or a TAB.
 sc_changelog:
-       @grep '^[^12    ]' $$(find . -name ChangeLog -maxdepth 2) &&    \
+       @grep -n '^[^12 ]' $$(find . -maxdepth 2 -name ChangeLog) &&    \
          { echo '$(ME): found unexpected prefix in a ChangeLog' 1>&2;  \
            exit 1; } || :
 
          { echo '$(ME): found unexpected prefix in a ChangeLog' 1>&2;  \
            exit 1; } || :
 
-header_regexp = \
-  alloca\
-  |closeout\
-  |ctype\
-  |dirent\
-  |errno\
-  |fcntl\
-  |inttypes\
-  |limits\
-  |locale\
-  |pathmax\
-  |std(lib|bool)\
-  |string\
-  |sys/(stat|dir|time)\
-  |time\
-  |unistd\
-  |utime\
-  |version-etc\
-  |xalloc
-h_re := $(shell echo '$(header_regexp)'|tr -d ' ')
+# Ensure that dd's definition of LONGEST_SYMBOL stays in sync
+# with the strings from the two affected variables.
+dd_c = $(srcdir)/src/dd.c
+sc_dd_max_sym_length:
+ifneq ($(wildcard $(dd_c)),)
+       @len=$$( (sed -n '/conversions\[\] =$$/,/^};/p' $(dd_c);\
+                sed -n '/flags\[\] =$$/,/^};/p' $(dd_c) )      \
+               |sed -n '/"/s/^[^"]*"\([^"]*\)".*/\1/p'         \
+              | wc --max-line-length);                         \
+       max=$$(sed -n '/^#define LONGEST_SYMBOL /s///p' $(dd_c) \
+             |tr -d '"' | wc --max-line-length);               \
+       if test "$$len" = "$$max"; then :; else                 \
+         echo 'dd.c: LONGEST_SYMBOL is not longest' 1>&2;      \
+         exit 1;                                               \
+       fi
+endif
+
+# Many m4 macros names once began with `jm_'.
+# On 2004-04-13, they were all changed to start with gl_ instead.
+# Make sure that none are inadvertently reintroduced.
+sc_prohibit_jm_in_m4:
+       @grep -nE 'jm_[A-Z]'                                            \
+               $$($(CVS_LIST) $(srcdir)/m4 |grep '\.m4$$') &&          \
+           { echo '$(ME): do not use jm_ in m4 macro names'            \
+             1>&2; exit 1; } || :
+
+sc_root_tests:
+       @t1=sc-root.expected; t2=sc-root.actual;                        \
+       grep -nl '^PRIV_CHECK_ARG=require-root'                         \
+         $$($(CVS_LIST) tests) |sed s,tests,., |sort > $$t1;           \
+       sed -n 's,      cd \([^ ]*\) .*MAKE..check TESTS=\(.*\),./\1/\2,p' \
+         $(srcdir)/tests/Makefile.am |sort > $$t2;                     \
+       diff -u $$t1 $$t2 || diff=1;                                    \
+       rm -f $$t1 $$t2;                                                \
+       test "$$diff"                                                   \
+         && { echo 'tests/Makefile.am: missing check-root action'>&2;  \
+              exit 1; } || :
+
+# Create a list of regular expressions matching the names
+# of files included from system.h.  Exclude a couple.
+.re-list:
+       @sed -n '/^# *include /s///p' $(srcdir)/src/system.h \
+         | grep -Ev 'sys/(param|file)\.h' \
+         | sed 's/ .*//;;s/^["<]/^# *include [<"]/;s/\.h[">]$$/\\.h[">]/' \
+         > $@-t
+       @mv $@-t $@
 
 # Files in src/ should not include directly any of
 # the headers already included via system.h.
 
 # Files in src/ should not include directly any of
 # the headers already included via system.h.
-# Get list of candidates with this:
-# grep -h include src/sys*.h|sed 's/.*include //'|sort -
-sc_system_h_headers:
-       @( cvsu --list ) > /dev/null 2>&1 || : &&                       \
-       grep -E '^# *include ["<]($(h_re))\.h[">]'                      \
-           $$(cvsu --list src | grep -Ev 'sys(2|tem)\.h$$')            \
-         && { echo '$(ME): the above are already included via system.h'\
-               1>&2; exit 1; } || :
+sc_system_h_headers: .re-list
+       if test -f $(srcdir)/src/system.h; then                 \
+         trap 'rc=$$?; rm -f .re-list; exit $$rc' 0 1 2 3 15;          \
+         grep -nE -f .re-list                                          \
+             $$($(CVS_LIST) src |                                      \
+                grep -Ev '((copy|system)\.h|parse-gram\.c)$$')         \
+           && { echo '$(ME): the above are already included via system.h'\
+                 1>&2;  exit 1; } || :;                                \
+       fi
 
 sc_sun_os_names:
 
 sc_sun_os_names:
-       @( cvsu --list ) > /dev/null 2>&1 || : && \
-       grep -Ei \
+       @grep -nEi \
            'solaris[^[:alnum:]]*2\.(7|8|9|[1-9][0-9])|sunos[^[:alnum:]][6-9]' \
            'solaris[^[:alnum:]]*2\.(7|8|9|[1-9][0-9])|sunos[^[:alnum:]][6-9]' \
-         $$(cvsu --list | grep -vEf .x-$@ ) &&                 \
+         $$($(CVS_LIST_EXCEPT)) &&                                     \
          { echo '$(ME): found misuse of Sun OS version numbers' 1>&2;  \
            exit 1; } || :
 
          { echo '$(ME): found misuse of Sun OS version numbers' 1>&2;  \
            exit 1; } || :
 
+sc_tight_scope:
+       $(MAKE) -C src $@
+
+sc_trailing_space:
+       @grep -n '[      ]$$'                                           \
+            $$($(CVS_LIST_EXCEPT)) &&                                  \
+         { echo '$(ME): found trailing space(s)'                       \
+               1>&2; exit 1; } || :
+
+# Look for diagnostics that aren't marked for translation.
+# This won't find any for which error's format string is on a separate line.
+sc_unmarked_diagnostics:
+       @grep -nE                                                       \
+           '\<error \([^"]*"[^"]*[a-z]{3}' $(srcdir)/{lib,src}/*.c     \
+         | grep -v '_(' &&                                             \
+         { echo '$(ME): found unmarked diagnostic(s)' 1>&2;            \
+           exit 1; } || :
+
 # Ensure that date's --help output stays in sync with the info
 # documentation for GNU strftime.  The only exception is %N,
 # which date accepts but GNU strftime does not.
 # Ensure that date's --help output stays in sync with the info
 # documentation for GNU strftime.  The only exception is %N,
 # which date accepts but GNU strftime does not.
@@ -208,8 +281,17 @@ strftime-check:
 # not @...@ in Makefile.am, now that we can rely on automake
 # to emit a definition for each substituted variable.
 makefile-check:
 # not @...@ in Makefile.am, now that we can rely on automake
 # to emit a definition for each substituted variable.
 makefile-check:
-       grep -E '@[A-Z_0-9]+@' `find . -name Makefile.am` \
-         && { echo 'Makefile.maint: use $(...), not @...@' 1>&2; exit 1; } || :
+       grep -nE '@[A-Z_0-9]+@' `find . -name Makefile.am` \
+         && { echo 'Makefile.maint: use $$(...), not @...@' 1>&2; exit 1; } || :
+
+news-date-check: NEWS
+       today=`date +%Y-%m-%d`; \
+       if head NEWS | grep '^\*.*'$$today >/dev/null; then \
+         :; \
+       else \
+         echo "today's date is not in NEWS" 1>&2; \
+         exit 1; \
+       fi
 
 changelog-check:
        if head ChangeLog | grep 'Version $(VERSION)' >/dev/null; then \
 
 changelog-check:
        if head ChangeLog | grep 'Version $(VERSION)' >/dev/null; then \
@@ -225,28 +307,30 @@ m4-check:
               exit 1; } || :
 
 # Verify that all source files using _() are listed in po/POTFILES.in.
               exit 1; } || :
 
 # Verify that all source files using _() are listed in po/POTFILES.in.
+# FIXME: don't hard-code src/false.c below; use a more general mechanism.
 po-check:
 po-check:
-       if test -f po/POTFILES.in; then \
-         grep -E -v '^(#|$$)' po/POTFILES.in | sort > $@-1; \
-         files=; \
+       if test -f po/POTFILES.in; then                                 \
+         grep -E -v '^(#|$$)' po/POTFILES.in                           \
+           | grep -v '^src/false\.c$$' | sort > $@-1;                  \
+         files=;                                                       \
          for file in lib/*.[chly] src/*.[chly]; do \
          for file in lib/*.[chly] src/*.[chly]; do \
-           case $$file in \
-           *.[ch]) \
-             base=`expr " $$file" : ' \(.*\)\..'`; \
-             { test -f $$base.l || test -f $$base.y; } && continue;; \
-           esac; \
-           files="$$files $$file"; \
-         done; \
-         grep -E -l '\bN?_\([^)"]*("|$$)' $$files | sort > $@-2; \
-         diff -u $@-1 $@-2 || exit 1; \
-         rm -f $@-1 $@-2; \
+           case $$file in                                              \
+           *.[ch])                                                     \
+             base=`expr " $$file" : ' \(.*\)\..'`;                     \
+             { test -f $$base.l || test -f $$base.y; } && continue;;   \
+           esac;                                                       \
+           files="$$files $$file";                                     \
+         done;                                                         \
+         grep -E -l '\bN?_\([^)"]*("|$$)' $$files | sort > $@-2;       \
+         diff -u $@-1 $@-2 || exit 1;                                  \
+         rm -f $@-1 $@-2;                                              \
        fi
 
 # In a definition of #define AUTHORS "... and ..." where the RHS contains
 # the English word `and', the string must be marked with `N_ (...)' so that
 # gettext recognizes it as a string requiring translation.
 author_mark_check:
        fi
 
 # In a definition of #define AUTHORS "... and ..." where the RHS contains
 # the English word `and', the string must be marked with `N_ (...)' so that
 # gettext recognizes it as a string requiring translation.
 author_mark_check:
-       @grep '^# *define AUTHORS "[^"]* and ' src/*.c |grep -v ' N_ (' && \
+       @grep -n '^# *define AUTHORS "[^"]* and ' src/*.c |grep -v ' N_ (' && \
          { echo 'Makefile.maint: enclose the above strings in N_ (...)' 1>&2; \
            exit 1; } || :
 
          { echo 'Makefile.maint: enclose the above strings in N_ (...)' 1>&2; \
            exit 1; } || :
 
@@ -258,7 +342,7 @@ author_mark_check:
 # that we'd have to worry about limits on command line length.
 msg = 'Makefile.maint: Do not use `:'\'' above; use @PATH_SEPARATOR@ instead'
 makefile_path_separator_check:
 # that we'd have to worry about limits on command line length.
 msg = 'Makefile.maint: Do not use `:'\'' above; use @PATH_SEPARATOR@ instead'
 makefile_path_separator_check:
-       @grep 'PATH=.*:' `find $(srcdir) -name Makefile.am` \
+       @grep -n 'PATH=.*:' `find $(srcdir) -name Makefile.am` \
          && { echo $(msg) 1>&2; exit 1; } || :
 
 # Check that `make alpha' will not fail at the end of the process.
          && { echo $(msg) 1>&2; exit 1; } || :
 
 # Check that `make alpha' will not fail at the end of the process.
@@ -279,7 +363,7 @@ v_etc_file = lib/version-etc.c
 # Make sure that the copyright date in $(v_etc_file) is up to date.
 copyright-check:
        @if test -f $(v_etc_file); then \
 # Make sure that the copyright date in $(v_etc_file) is up to date.
 copyright-check:
        @if test -f $(v_etc_file); then \
-         grep '"Copyright (C) $(shell date +%Y) Free' $(v_etc_file) \
+         grep 'enum { COPYRIGHT_YEAR = 2005 };' $(v_etc_file) \
            >/dev/null \
          || { echo 'out of date copyright in $(v_etc_file); update it' 1>&2; \
               exit 1; }; \
            >/dev/null \
          || { echo 'out of date copyright in $(v_etc_file); update it' 1>&2; \
               exit 1; }; \
@@ -330,21 +414,23 @@ null_AM_MAKEFLAGS = \
 # Detect format-string/arg-list mismatches that would normally be obscured
 # by the use of _().  The --disable-nls effectively defines away that macro,
 # and building with CFLAGS='-Wformat -Werror' causes any format warning to be
 # Detect format-string/arg-list mismatches that would normally be obscured
 # by the use of _().  The --disable-nls effectively defines away that macro,
 # and building with CFLAGS='-Wformat -Werror' causes any format warning to be
-# treated as a failure.
+# treated as a failure.  Also, check for shadowing problems with -Wshadow.
+# These CFLAGS are pretty strict.  If you build this target, you probably
+# have to have a recent version of gcc and glibc headers.
 TMPDIR ?= /tmp
 t=$(TMPDIR)/$(PACKAGE)/test
 my-distcheck: $(local-check)
        -rm -rf $(t)
        mkdir -p $(t)
        GZIP=$(GZIP_ENV) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz
 TMPDIR ?= /tmp
 t=$(TMPDIR)/$(PACKAGE)/test
 my-distcheck: $(local-check)
        -rm -rf $(t)
        mkdir -p $(t)
        GZIP=$(GZIP_ENV) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz
-       cd $(t)/$(distdir) \
-         && ./configure --disable-nls \
-         && $(MAKE) CFLAGS='-Wformat -Werror' \
-             AM_MAKEFLAGS='$(null_AM_MAKEFLAGS)' \
-         && $(MAKE) dvi \
-         && $(MAKE) check \
+       cd $(t)/$(distdir)                              \
+         && ./configure --disable-nls                  \
+         && $(MAKE) CFLAGS='-Werror -Wall -Wformat -Wshadow' \
+             AM_MAKEFLAGS='$(null_AM_MAKEFLAGS)'       \
+         && $(MAKE) dvi                                \
+         && $(MAKE) check                              \
          && $(MAKE) distclean
          && $(MAKE) distclean
-       (cd $(t) && mv $(distdir) $(distdir).old \
+       (cd $(t) && mv $(distdir) $(distdir).old        \
          && $(AMTAR) -zxf - ) < $(distdir).tar.gz
        diff -ur $(t)/$(distdir).old $(t)/$(distdir)
        -rm -rf $(t)
          && $(AMTAR) -zxf - ) < $(distdir).tar.gz
        diff -ur $(t)/$(distdir).old $(t)/$(distdir)
        -rm -rf $(t)
@@ -377,15 +463,9 @@ rel-check:
 prev-tgz = $(PACKAGE)-$(PREV_VERSION).tar.gz
 xd-delta = $(PACKAGE)-$(PREV_VERSION)-$(VERSION).xdelta
 
 prev-tgz = $(PACKAGE)-$(PREV_VERSION).tar.gz
 xd-delta = $(PACKAGE)-$(PREV_VERSION)-$(VERSION).xdelta
 
-signatures ?= $(distdir).tar.bz2.asc $(distdir).tar.gz.asc
-%.asc: %
-       rm -f $@
-       gpg --armor --detach-sign -o $@ $<
-
-rel-files = $(xd-delta) $(distdir).tar.bz2 $(distdir).tar.gz $(signatures)
-announce_gen ?= ./announce-gen
-announcement: NEWS ChangeLog $(rel-files) $(signatures)
-       @$(announce_gen)                                                \
+rel-files = $(xd-delta) $(DIST_ARCHIVES)
+announcement: NEWS ChangeLog $(rel-files)
+       @./announce-gen                                                 \
            --release-type=$(RELEASE_TYPE)                              \
            --package=$(PACKAGE)                                        \
            --prev=$(PREV_VERSION)                                      \
            --release-type=$(RELEASE_TYPE)                              \
            --package=$(PACKAGE)                                        \
            --prev=$(PREV_VERSION)                                      \
@@ -395,25 +475,125 @@ announcement: NEWS ChangeLog $(rel-files) $(signatures)
            $(addprefix --url-dir=, $(url_dir_list))                    \
 
 
            $(addprefix --url-dir=, $(url_dir_list))                    \
 
 
-define emit-upload-commands
-       echo =====================================
-       echo =====================================
-       echo upload $(PACKAGE) $(PREV_VERSION) $(VERSION)
-       echo '# send the /tmp/announcement e-mail'
-       echo =====================================
-       echo =====================================
-endef
+## ---------------- ##
+## Updating files.  ##
+## ---------------- ##
+
+ftp-gnu = ftp://ftp.gnu.org/gnu
+www-gnu = http://www.gnu.org
+
+# Use mv, if you don't have/want move-if-change.
+move_if_change ?= move-if-change
+
+
+# --------------------- #
+# Updating everything.  #
+# --------------------- #
+
+.PHONY: update
+local_updates ?= wget-update cvs-update po-update
+update: $(local_updates)
+
+
+# ------------------- #
+# Updating PO files.  #
+# ------------------- #
+
+po_repo = http://www.iro.umontreal.ca/contrib/po/maint/$(PACKAGE)
+.PHONY: do-po-update po-update
+do-po-update:
+       tmppo=/tmp/$(PACKAGE)-$(VERSION)-po &&\
+       rm -rf $$tmppo && \
+       mkdir $$tmppo && \
+       (cd $$tmppo && \
+         $(WGET) $(WGETFLAGS) -r -l1 -nd --no-parent -A '*.po' $(po_repo)) &&\
+       cp $$tmppo/*.po po
+       cd po && $(MAKE) update-po
+       $(MAKE) po-check
+
+po-update:
+       if test -d "po"; then \
+         $(MAKE) do-po-update; \
+       fi
+
+# -------------------------- #
+# Updating GNU build tools.  #
+# -------------------------- #
+
+# The following pseudo table associates a local directory and a URL
+# with each of the files that belongs to some other package and is
+# regularly updated from the specified URL.
+wget_files ?= \
+  $(srcdir)/build-aux/config.guess \
+  $(srcdir)/build-aux/config.sub \
+  $(srcdir)/build-aux/texinfo.tex \
+  $(srcdir)/src/ansi2knr.c
+
+get-targets = $(patsubst %, get-%, $(wget_files))
+
+config.guess-url_prefix = $(ftp-gnu)/build-aux/
+config.sub-url_prefix = $(ftp-gnu)/build-aux/
+
+ansi2knr.c-url_prefix = ftp://ftp.cs.wisc.edu/ghost/
+
+texinfo.tex-url_prefix = $(ftp-gnu)/texinfo/
+
+standards.texi-url_prefix = $(www-gnu)/prep/
+make-stds.texi-url_prefix = $(standards.texi-url_prefix)
+
+target = $(patsubst get-%, %, $@)
+url = $($(notdir $(target))-url_prefix)$(notdir $(target))
+
+.PHONY: $(get-targets)
+$(get-targets):
+       $(WGET) $(WGETFLAGS) $(url) -O $(target).t \
+         && $(move_if_change) $(target).t $(target)
+
+cvs_files ?= \
+  $(srcdir)/build-aux/depcomp \
+  $(srcdir)/build-aux/install-sh \
+  $(srcdir)/build-aux/missing \
+  $(srcdir)/build-aux/mkinstalldirs \
+  $(srcdir)/src/ansi2knr.c
+automake_repo=:pserver:anoncvs:anoncvs@sources.redhat.com:/cvs/automake
+.PHONY: wget-update
+wget-update: $(get-targets)
+
+.PHONY: cvs-update
+cvs-update:
+       fail=;                                                          \
+       for f in $(cvs_files); do                                       \
+         test -f $$f || { echo "*** skipping $$f" 1>&2; continue; };   \
+         cvs diff $$f > /dev/null                                      \
+           || { echo "*** $$f is locally modified; skipping it" 1>&2;  \
+                fail=yes; continue; };                                 \
+         file=$$(basename $$f);                                        \
+         echo checking out $$file...;                                  \
+         $(CVS) -d $(automake_repo) co -p automake/lib/$$file> $$f.t   \
+           && $(move_if_change) $$f.t $$f;                             \
+       done;                                                           \
+       test "$$fail" && exit 1
+
+emit_upload_commands:
+       @echo =====================================
+       @echo =====================================
+       @echo "$(srcdir)/gnupload $(GNUPLOADFLAGS) \\"
+       @echo "    --to $(gnu_rel_host):coreutils \\"
+       @echo "  $(rel-files)"
+       @echo '# send the /tmp/announcement e-mail'
+       @echo =====================================
+       @echo =====================================
 
 $(xd-delta): $(release_archive_dir)/$(prev-tgz) $(distdir).tar.gz
        xdelta delta -9 $^ $@ || :
 
 .PHONY: alpha beta major
 
 $(xd-delta): $(release_archive_dir)/$(prev-tgz) $(distdir).tar.gz
        xdelta delta -9 $^ $@ || :
 
 .PHONY: alpha beta major
-alpha beta major: $(local-check)
+alpha beta major: news-date-check $(local-check)
        $(MAKE) cvs-dist
        $(MAKE) $(xd-delta)
        $(MAKE) -s announcement RELEASE_TYPE=$@ > /tmp/announce-$(my_distdir)
        ln $(rel-files) $(release_archive_dir)
        chmod a-w $(rel-files)
        $(MAKE) cvs-dist
        $(MAKE) $(xd-delta)
        $(MAKE) -s announcement RELEASE_TYPE=$@ > /tmp/announce-$(my_distdir)
        ln $(rel-files) $(release_archive_dir)
        chmod a-w $(rel-files)
+       $(MAKE) -s emit_upload_commands RELEASE_TYPE=$@
        echo $(VERSION) > $(prev_version_file)
        $(CVS) ci -m. $(prev_version_file)
        echo $(VERSION) > $(prev_version_file)
        $(CVS) ci -m. $(prev_version_file)
-       @$(emit-upload-commands)
diff --git a/NEWS b/NEWS
index ac3587ebf4a0fcda0dfeda0a7c43c57e50379afd..8593f27ff1e14f2653ed79ab8d0adbd21a54d33a 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,7 @@
 Bison News
 ----------
 
 Bison News
 ----------
 
-Changes in the next version (not yet released):
+Changes in version 2.0b, 2005-07-24:
 
 * Bison-generated parsers now support the translation of diagnostics like
   "syntax error" into languages other than English.  The default
 
 * Bison-generated parsers now support the translation of diagnostics like
   "syntax error" into languages other than English.  The default
@@ -19,7 +19,10 @@ Changes in the next version (not yet released):
   behind on the stack.  Also, the start symbol is now destroyed after a
   successful parse.  In both cases, the behavior was formerly inconsistent.
 
   behind on the stack.  Also, the start symbol is now destroyed after a
   successful parse.  In both cases, the behavior was formerly inconsistent.
 
-The following change was also in version 2.0a, 2005-05-22:
+* The yytname array now contains the same contents that it did in 2.0,
+  undoing an incompatible and undocumented change made in 2.0a.
+
+Changes in version 2.0a, 2005-05-22:
 
 * When generating verbose diagnostics, Bison-generated parsers no longer
   quote the literal strings associated with tokens.  For example, for
 
 * When generating verbose diagnostics, Bison-generated parsers no longer
   quote the literal strings associated with tokens.  For example, for
index 86aca1059d6b22262400e9d3ce4359d5d0a3bbae..e28954be2a345dfedb5b1f8066d53daa00c643a2 100644 (file)
--- a/data/c.m4
+++ b/data/c.m4
@@ -119,7 +119,7 @@ m4_define([b4_int_type],
 
        m4_eval([0 <= $1]),                [1], [unsigned int],
 
 
        m4_eval([0 <= $1]),                [1], [unsigned int],
 
-                                              [int])])
+                                              [int])])
 
 
 # b4_int_type_for(NAME)
 
 
 # b4_int_type_for(NAME)
index e6190c8b9e5b912eef629a2932e1d35a0cc0911c..7eddaf90afa17a6f1ab31bbf895dc8f0b130d017 100644 (file)
@@ -946,7 +946,7 @@ yy::]b4_parser_class_name[::yyreport_syntax_error_ ()
                   {
                     message += (!count++) ? ", expecting " : " or ";
                    message += yytnamerr_ (yytname_[x]);
                   {
                     message += (!count++) ? ", expecting " : " or ";
                    message += yytnamerr_ (yytname_[x]);
-                 }
+                 }
             }
        }
       else
             }
        }
       else
index ea5329306372574bd6f8ab0c3017ba256bae2e7a..bd6c8d68c10bb1a9f20a07bb21647dce21fd568f 100644 (file)
@@ -2,7 +2,9 @@ divert(-1)#                                                  -*- Autoconf -*-
 # This file is part of Autoconf.
 # Base M4 layer.
 # Requires GNU M4.
 # This file is part of Autoconf.
 # Base M4 layer.
 # Requires GNU M4.
-# Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+#
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software
+# Foundation, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -58,7 +60,7 @@ changequote([, ])
 # long macros we define.
 ifdef([__gnu__], ,
 [errprint(M4sugar requires GNU M4. Install it before installing M4sugar or
 # long macros we define.
 ifdef([__gnu__], ,
 [errprint(M4sugar requires GNU M4. Install it before installing M4sugar or
-set the M4 environment variable to its path name.)
+set the M4 environment variable to its absolute file name.)
 m4exit(2)])
 
 
 m4exit(2)])
 
 
@@ -83,12 +85,12 @@ m4_undefine([undefine])
 # Define DST as the definition of SRC.
 # What's the difference between:
 # 1. m4_copy([from], [to])
 # Define DST as the definition of SRC.
 # What's the difference between:
 # 1. m4_copy([from], [to])
-# 2. m4_define([from], [to($@)])
-# Well, obviously 1 is more expansive in space.  Maybe 2 is more expansive
+# 2. m4_define([to], [from($@)])
+# Well, obviously 1 is more expensive in space.  Maybe 2 is more expensive
 # in time, but because of the space cost of 1, it's not that obvious.
 # Nevertheless, one huge difference is the handling of `$0'.  If `from'
 # uses `$0', then with 1, `to''s `$0' is `to', while it is `from' in 2.
 # in time, but because of the space cost of 1, it's not that obvious.
 # Nevertheless, one huge difference is the handling of `$0'.  If `from'
 # uses `$0', then with 1, `to''s `$0' is `to', while it is `from' in 2.
-# The user will certainly prefer see `from'.
+# The user will certainly prefer to see `to'.
 m4_define([m4_copy],
 [m4_define([$2], m4_defn([$1]))])
 
 m4_define([m4_copy],
 [m4_define([$2], m4_defn([$1]))])
 
@@ -131,7 +133,7 @@ m4_rename_m4([eval])
 m4_rename_m4([format])
 m4_rename_m4([ifdef])
 m4_rename([ifelse], [m4_if])
 m4_rename_m4([format])
 m4_rename_m4([ifdef])
 m4_rename([ifelse], [m4_if])
-m4_rename_m4([include])
+m4_undefine([include])
 m4_rename_m4([incr])
 m4_rename_m4([index])
 m4_rename_m4([indir])
 m4_rename_m4([incr])
 m4_rename_m4([index])
 m4_rename_m4([indir])
@@ -144,7 +146,7 @@ m4_undefine([popdef])
 m4_rename_m4([pushdef])
 m4_rename([regexp], [m4_bregexp])
 m4_rename_m4([shift])
 m4_rename_m4([pushdef])
 m4_rename([regexp], [m4_bregexp])
 m4_rename_m4([shift])
-m4_rename_m4([sinclude])
+m4_undefine([sinclude])
 m4_rename_m4([substr])
 m4_rename_m4([symbols])
 m4_rename_m4([syscmd])
 m4_rename_m4([substr])
 m4_rename_m4([symbols])
 m4_rename_m4([syscmd])
@@ -199,76 +201,29 @@ m4_define([m4_assert],
        [m4_fatal([assert failed: $1], [$2])])])
 
 
        [m4_fatal([assert failed: $1], [$2])])])
 
 
+
 ## ------------- ##
 ## 3. Warnings.  ##
 ## ------------- ##
 
 
 ## ------------- ##
 ## 3. Warnings.  ##
 ## ------------- ##
 
 
-# m4_warning_ifelse(CATEGORY, IF-TRUE, IF-FALSE)
-# ----------------------------------------------
-# If the CATEGORY of warnings is enabled, expand IF_TRUE otherwise
-# IF-FALSE.
-#
-# The variable `m4_warnings' contains a comma separated list of
-# warnings which order is the converse from the one specified by
-# the user, i.e., if she specified `-W error,none,obsolete',
-# `m4_warnings' is `obsolete,none,error'.  We read it from left to
-# right, and:
-# - if none or noCATEGORY is met, run IF-FALSE
-# - if all or CATEGORY is met, run IF-TRUE
-# - if there is nothing left, run IF-FALSE.
-m4_define([m4_warning_ifelse],
-[_m4_warning_ifelse([$1], [$2], [$3], m4_warnings)])
-
-
-# _m4_warning_ifelse(CATEGORY, IF-TRUE, IF-FALSE, WARNING1, ...)
-# --------------------------------------------------------------
-# Implementation of the loop described above.
-m4_define([_m4_warning_ifelse],
-[m4_case([$4],
-         [$1],    [$2],
-         [all],   [$2],
-         [],      [$3],
-         [none],  [$3],
-         [no-$1], [$3],
-         [$0([$1], [$2], [$3], m4_shiftn(4, $@))])])
-
-
-# _m4_warning_error_ifelse(IF-TRUE, IF-FALSE)
-# -------------------------------------------
-# The same as m4_warning_ifelse, but scan for `error' only.
-m4_define([_m4_warning_error_ifelse],
-[__m4_warning_error_ifelse([$1], [$2], m4_warnings)])
-
-
-# __m4_warning_error_ifelse(IF-TRUE, IF-FALSE)
-# --------------------------------------------
-# The same as _m4_warning_ifelse, but scan for `error' only.
-m4_define([__m4_warning_error_ifelse],
-[m4_case([$3],
-         [error],    [$1],
-         [],         [$2],
-         [no-error], [$2],
-         [$0([$1], [$2], m4_shiftn(3, $@))])])
-
-
-
-# _m4_warn(MESSAGE)
-# -----------------
-# Report MESSAGE as a warning, unless the user requested -W error,
-# in which case report a fatal error.
-m4_define([_m4_warn],
-[_m4_warning_error_ifelse([m4_fatal([$1])],
-                          [m4_warning([$1])])])
+# _m4_warn(CATEGORY, MESSAGE, STACK-TRACE)
+# ----------------------------------------
+# Report a MESSAGE to the user if the CATEGORY of warnings is enabled.
+# This is for traces only.
+# The STACK-TRACE is a \n-separated list of "LOCATION: MESSAGE".
+m4_define([_m4_warn], [])
 
 
 # m4_warn(CATEGORY, MESSAGE)
 # --------------------------
 
 
 # m4_warn(CATEGORY, MESSAGE)
 # --------------------------
-# Report a MESSAGE to the autoconf user if the CATEGORY of warnings
-# is requested (in fact, not disabled).
+# Report a MESSAGE to the user if the CATEGORY of warnings is enabled.
 m4_define([m4_warn],
 m4_define([m4_warn],
-[m4_warning_ifelse([$1], [_m4_warn([$2])])])
-
+[_m4_warn([$1], [$2],
+m4_ifdef([m4_expansion_stack],
+         [m4_defn([m4_expansion_stack])
+m4_location[: the top level]]))dnl
+])
 
 
 
 
 
 
@@ -294,7 +249,7 @@ m4_define([m4_warn],
 # been included.
 m4_define([m4_include_unique],
 [m4_ifdef([m4_include($1)],
 # been included.
 m4_define([m4_include_unique],
 [m4_ifdef([m4_include($1)],
-          [m4_warn([syntax], [file `$1' included several times])])dnl
+         [m4_warn([syntax], [file `$1' included several times])])dnl
 m4_define([m4_include($1)])])
 
 
 m4_define([m4_include($1)])])
 
 
@@ -347,7 +302,7 @@ m4_define([m4_ifval],
 m4_define([m4_n],
 [m4_if([$1],
        [], [],
 m4_define([m4_n],
 [m4_if([$1],
        [], [],
-           [$1
+          [$1
 ])])
 
 
 ])])
 
 
@@ -358,7 +313,7 @@ m4_define([m4_n],
 m4_define([m4_ifvaln],
 [m4_if([$1],
        [],   [m4_n([$3])],
 m4_define([m4_ifvaln],
 [m4_if([$1],
        [],   [m4_n([$3])],
-             [m4_n([$2])])])
+            [m4_n([$2])])])
 
 
 # m4_ifset(MACRO, [IF-TRUE], [IF-FALSE])
 
 
 # m4_ifset(MACRO, [IF-TRUE], [IF-FALSE])
@@ -367,8 +322,8 @@ m4_define([m4_ifvaln],
 # expand IF-FALSE, otherwise IF-TRUE.
 m4_define([m4_ifset],
 [m4_ifdef([$1],
 # expand IF-FALSE, otherwise IF-TRUE.
 m4_define([m4_ifset],
 [m4_ifdef([$1],
-          [m4_if(m4_defn([$1]), [], [$3], [$2])],
-          [$3])])
+         [m4_ifval(m4_defn([$1]), [$2], [$3])],
+         [$3])])
 
 
 # m4_ifndef(NAME, [IF-NOT-DEFINED], [IF-DEFINED])
 
 
 # m4_ifndef(NAME, [IF-NOT-DEFINED], [IF-DEFINED])
@@ -419,23 +374,32 @@ m4_define([m4_case],
 # All the values are optional, and the macro is robust to active symbols
 # properly quoted.
 m4_define([m4_bmatch],
 # All the values are optional, and the macro is robust to active symbols
 # properly quoted.
 m4_define([m4_bmatch],
-[m4_if([$#], 0, [],
-       [$#], 1, [],
+[m4_if([$#], 0, [m4_fatal([$0: too few arguments: $#])],
+       [$#], 1, [m4_fatal([$0: too few arguments: $#: $1])],
        [$#], 2, [$2],
        [m4_if(m4_bregexp([$1], [$2]), -1, [$0([$1], m4_shiftn(3, $@))],
              [$3])])])
 
 
        [$#], 2, [$2],
        [m4_if(m4_bregexp([$1], [$2]), -1, [$0([$1], m4_shiftn(3, $@))],
              [$3])])])
 
 
+# m4_car(LIST)
+# m4_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+m4_define([m4_car], [[$1]])
+m4_define([m4_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+
+
 # m4_map(MACRO, LIST)
 # -------------------
 # Invoke MACRO($1), MACRO($2) etc. where $1, $2... are the elements
 # of LIST (which can be lists themselves, for multiple arguments MACROs).
 m4_define([m4_fst], [$1])
 m4_define([m4_map],
 # m4_map(MACRO, LIST)
 # -------------------
 # Invoke MACRO($1), MACRO($2) etc. where $1, $2... are the elements
 # of LIST (which can be lists themselves, for multiple arguments MACROs).
 m4_define([m4_fst], [$1])
 m4_define([m4_map],
-[m4_if([$2], [], [],
-       [$2], [[]], [],
-       [$1(m4_fst($2))[]dnl
-m4_map([$1], m4_cdr($2))])])
+[m4_ifval([$2],
+         [$1(m4_fst($2))[]m4_map([$1], m4_cdr($2))])])
 
 
 # m4_map_sep(MACRO, SEPARATOR, LIST)
 
 
 # m4_map_sep(MACRO, SEPARATOR, LIST)
@@ -444,20 +408,16 @@ m4_map([$1], m4_cdr($2))])])
 # are the elements of LIST (which can be lists themselves, for multiple
 # arguments MACROs).
 m4_define([m4_map_sep],
 # are the elements of LIST (which can be lists themselves, for multiple
 # arguments MACROs).
 m4_define([m4_map_sep],
-[m4_if([$3], [[]], [],
-       [$1(m4_fst($3))[]dnl
-m4_if(m4_cdr($3),
-      [[]], [],
-      [$2])[]dnl
-m4_map_sep([$1], [$2], m4_cdr($3))])])
+[m4_ifval([$3],
+         [$1(m4_fst($3))[]m4_map([$2[]$1], m4_cdr($3))])])
 
 
 ## ---------------------------------------- ##
 ## 6. Enhanced version of some primitives.  ##
 ## ---------------------------------------- ##
 
 
 
 ## ---------------------------------------- ##
 ## 6. Enhanced version of some primitives.  ##
 ## ---------------------------------------- ##
 
-# m4_patsubsts(STRING, RE1, SUBST1, RE2, SUBST2, ...)
-# ---------------------------------------------------
+# m4_bpatsubsts(STRING, RE1, SUBST1, RE2, SUBST2, ...)
+# ----------------------------------------------------
 # m4 equivalent of
 #
 #   $_ = STRING;
 # m4 equivalent of
 #
 #   $_ = STRING;
@@ -468,7 +428,7 @@ m4_map_sep([$1], [$2], m4_cdr($3))])])
 # All the values are optional, and the macro is robust to active symbols
 # properly quoted.
 #
 # All the values are optional, and the macro is robust to active symbols
 # properly quoted.
 #
-# I would have liked to name this macro `m4_patsubst', unfortunately,
+# I would have liked to name this macro `m4_bpatsubst', unfortunately,
 # due to quotation problems, I need to double quote $1 below, therefore
 # the anchors are broken :(  I can't let users be trapped by that.
 m4_define([m4_bpatsubsts],
 # due to quotation problems, I need to double quote $1 below, therefore
 # the anchors are broken :(  I can't let users be trapped by that.
 m4_define([m4_bpatsubsts],
@@ -476,7 +436,7 @@ m4_define([m4_bpatsubsts],
        [$#], 1, [m4_fatal([$0: too few arguments: $#: $1])],
        [$#], 2, [m4_builtin([patsubst], $@)],
        [$0(m4_builtin([patsubst], [[$1]], [$2], [$3]),
        [$#], 1, [m4_fatal([$0: too few arguments: $#: $1])],
        [$#], 2, [m4_builtin([patsubst], $@)],
        [$0(m4_builtin([patsubst], [[$1]], [$2], [$3]),
-           m4_shiftn(3, $@))])])
+          m4_shiftn(3, $@))])])
 
 
 
 
 
 
@@ -511,7 +471,7 @@ m4_define([m4_default],
 # undefined.
 m4_define([m4_defn],
 [m4_ifndef([$1],
 # undefined.
 m4_define([m4_defn],
 [m4_ifndef([$1],
-           [m4_fatal([$0: undefined macro: $1])])dnl
+          [m4_fatal([$0: undefined macro: $1])])dnl
 m4_builtin([defn], $@)])
 
 
 m4_builtin([defn], $@)])
 
 
@@ -519,7 +479,7 @@ m4_builtin([defn], $@)])
 # ---------------------
 m4_define([_m4_dumpdefs_up],
 [m4_ifdef([$1],
 # ---------------------
 m4_define([_m4_dumpdefs_up],
 [m4_ifdef([$1],
-          [m4_pushdef([_m4_dumpdefs], m4_defn([$1]))dnl
+         [m4_pushdef([_m4_dumpdefs], m4_defn([$1]))dnl
 m4_dumpdef([$1])dnl
 m4_popdef([$1])dnl
 _m4_dumpdefs_up([$1])])])
 m4_dumpdef([$1])dnl
 m4_popdef([$1])dnl
 _m4_dumpdefs_up([$1])])])
@@ -529,7 +489,7 @@ _m4_dumpdefs_up([$1])])])
 # -----------------------
 m4_define([_m4_dumpdefs_down],
 [m4_ifdef([_m4_dumpdefs],
 # -----------------------
 m4_define([_m4_dumpdefs_down],
 [m4_ifdef([_m4_dumpdefs],
-          [m4_pushdef([$1], m4_defn([_m4_dumpdefs]))dnl
+         [m4_pushdef([$1], m4_defn([_m4_dumpdefs]))dnl
 m4_popdef([_m4_dumpdefs])dnl
 _m4_dumpdefs_down([$1])])])
 
 m4_popdef([_m4_dumpdefs])dnl
 _m4_dumpdefs_down([$1])])])
 
@@ -549,7 +509,7 @@ _m4_dumpdefs_down([$1])])
 # undefined.
 m4_define([m4_popdef],
 [m4_ifndef([$1],
 # undefined.
 m4_define([m4_popdef],
 [m4_ifndef([$1],
-           [m4_fatal([$0: undefined macro: $1])])dnl
+          [m4_fatal([$0: undefined macro: $1])])dnl
 m4_builtin([popdef], $@)])
 
 
 m4_builtin([popdef], $@)])
 
 
@@ -594,7 +554,7 @@ m4_define([_m4_shiftn],
 # undefined.
 m4_define([m4_undefine],
 [m4_ifndef([$1],
 # undefined.
 m4_define([m4_undefine],
 [m4_ifndef([$1],
-           [m4_fatal([$0: undefined macro: $1])])dnl
+          [m4_fatal([$0: undefined macro: $1])])dnl
 m4_builtin([undefine], $@)])
 
 
 m4_builtin([undefine], $@)])
 
 
@@ -609,8 +569,8 @@ m4_builtin([undefine], $@)])
 # Both limits are included, and bounds are checked for consistency.
 m4_define([m4_for],
 [m4_case(m4_sign(m4_eval($3 - $2)),
 # Both limits are included, and bounds are checked for consistency.
 m4_define([m4_for],
 [m4_case(m4_sign(m4_eval($3 - $2)),
-         1, [m4_assert(m4_sign(m4_default($4, 1)) == 1)],
-        -1, [m4_assert(m4_sign(m4_default($4, -1)) == -1)])dnl
+        1, [m4_assert(m4_sign(m4_default($4, 1)) == 1)],
+       -1, [m4_assert(m4_sign(m4_default($4, -1)) == -1)])dnl
 m4_pushdef([$1], [$2])dnl
 m4_if(m4_eval([$3 > $2]), 1,
       [_m4_for([$1], [$3], m4_default([$4], 1), [$5])],
 m4_pushdef([$1], [$2])dnl
 m4_if(m4_eval([$3 > $2]), 1,
       [_m4_for([$1], [$3], m4_default([$4], 1), [$5])],
@@ -639,8 +599,8 @@ m4_if($1, [$2], [],
 # |        [m4_pushdef([$1])_foreach([$1], [$2], [$3])m4_popdef([$1])])
 # | m4_define([_arg1], [$1])
 # | m4_define([_foreach],
 # |        [m4_pushdef([$1])_foreach([$1], [$2], [$3])m4_popdef([$1])])
 # | m4_define([_arg1], [$1])
 # | m4_define([_foreach],
-# |          [m4_if([$2], [()], ,
-# |                 [m4_define([$1], _arg1$2)$3[]_foreach([$1],
+# |           [m4_if([$2], [()], ,
+# |                 [m4_define([$1], _arg1$2)$3[]_foreach([$1],
 # |                                                        (shift$2),
 # |                                                        [$3])])])
 #
 # |                                                        (shift$2),
 # |                                                        [$3])])])
 #
@@ -670,7 +630,7 @@ m4_if($1, [$2], [],
 # | m4_define([_arg1], [[$1]])
 # | m4_define([_foreach],
 # |  [m4_if($2, [()], ,
 # | m4_define([_arg1], [[$1]])
 # | m4_define([_foreach],
 # |  [m4_if($2, [()], ,
-# |        [m4_define([$1], [_arg1$2])$3[]_foreach([$1],
+# |         [m4_define([$1], [_arg1$2])$3[]_foreach([$1],
 # |                                                 [(shift$2)],
 # |                                                 [$3])])])
 #
 # |                                                 [(shift$2)],
 # |                                                 [$3])])])
 #
@@ -695,7 +655,7 @@ m4_if($1, [$2], [],
 # | m4_define([_arg1], [$1])
 # | m4_define([_foreach],
 # |  [m4_if($2, [], ,
 # | m4_define([_arg1], [$1])
 # | m4_define([_foreach],
 # |  [m4_if($2, [], ,
-# |        [m4_define([$1], [_arg1($2)])$3[]_foreach([$1],
+# |         [m4_define([$1], [_arg1($2)])$3[]_foreach([$1],
 # |                                                   [shift($2)],
 # |                                                   [$3])])])
 #
 # |                                                   [shift($2)],
 # |                                                   [$3])])])
 #
@@ -726,14 +686,25 @@ m4_if($1, [$2], [],
 m4_define([m4_foreach],
 [m4_pushdef([$1])_m4_foreach($@)m4_popdef([$1])])
 
 m4_define([m4_foreach],
 [m4_pushdef([$1])_m4_foreach($@)m4_popdef([$1])])
 
-# Low level macros used to define m4_foreach.
-m4_define([m4_car], [[$1]])
-m4_define([m4_cdr], [m4_dquote(m4_shift($@))])
 m4_define([_m4_foreach],
 m4_define([_m4_foreach],
-[m4_if([$2], [[]], [],
-       [m4_define([$1], m4_car($2))$3[]_m4_foreach([$1],
-                                                   m4_cdr($2),
-                                                   [$3])])])
+[m4_ifval([$2],
+         [m4_define([$1], m4_car($2))$3[]dnl
+_m4_foreach([$1], m4_cdr($2), [$3])])])
+
+
+# m4_foreach_w(VARIABLE, LIST, EXPRESSION)
+# ----------------------------------------
+#
+# Like m4_foreach, but the list is whitespace separated.
+#
+# This macro is robust to active symbols:
+#    m4_foreach_w([Var], [ active
+#    b act\
+#    ive  ], [-Var-])end
+#    => -active--b--active-end
+#
+m4_define([m4_foreach_w],
+[m4_foreach([$1], m4_split(m4_normalize([$2])), [$3])])
 
 
 
 
 
 
@@ -745,23 +716,29 @@ m4_define([_m4_foreach],
 # _m4_divert(DIVERSION-NAME or NUMBER)
 # ------------------------------------
 # If DIVERSION-NAME is the name of a diversion, return its number,
 # _m4_divert(DIVERSION-NAME or NUMBER)
 # ------------------------------------
 # If DIVERSION-NAME is the name of a diversion, return its number,
-# otherwise if is a NUMBER return it.
+# otherwise if it is a NUMBER return it.
 m4_define([_m4_divert],
 [m4_ifdef([_m4_divert($1)],
 m4_define([_m4_divert],
 [m4_ifdef([_m4_divert($1)],
-          [m4_indir([_m4_divert($1)])],
-          [$1])])
+         [m4_indir([_m4_divert($1)])],
+         [$1])])
 
 # KILL is only used to suppress output.
 m4_define([_m4_divert(KILL)],           -1)
 
 
 
 # KILL is only used to suppress output.
 m4_define([_m4_divert(KILL)],           -1)
 
 
+# _m4_divert_n_stack
+# ------------------
+# Print m4_divert_stack with newline prepended, if it's nonempty.
+m4_define([_m4_divert_n_stack],
+[m4_ifdef([m4_divert_stack], [
+m4_defn([m4_divert_stack])])])
+
+
 # m4_divert(DIVERSION-NAME)
 # -------------------------
 # Change the diversion stream to DIVERSION-NAME.
 m4_define([m4_divert],
 # m4_divert(DIVERSION-NAME)
 # -------------------------
 # Change the diversion stream to DIVERSION-NAME.
 m4_define([m4_divert],
-[m4_define([m4_divert_stack],
-           m4_location[: $0: $1]m4_ifdef([m4_divert_stack], [
-m4_defn([m4_divert_stack])]))dnl
+[m4_define([m4_divert_stack], m4_location[: $0: $1]_m4_divert_n_stack)dnl
 m4_builtin([divert], _m4_divert([$1]))dnl
 ])
 
 m4_builtin([divert], _m4_divert([$1]))dnl
 ])
 
@@ -770,11 +747,9 @@ m4_builtin([divert], _m4_divert([$1]))dnl
 # ------------------------------
 # Change the diversion stream to DIVERSION-NAME, while stacking old values.
 m4_define([m4_divert_push],
 # ------------------------------
 # Change the diversion stream to DIVERSION-NAME, while stacking old values.
 m4_define([m4_divert_push],
-[m4_pushdef([m4_divert_stack],
-            m4_location[: $0: $1]m4_ifdef([m4_divert_stack], [
-m4_defn([m4_divert_stack])]))dnl
+[m4_pushdef([m4_divert_stack], m4_location[: $0: $1]_m4_divert_n_stack)dnl
 m4_pushdef([_m4_divert_diversion], [$1])dnl
 m4_pushdef([_m4_divert_diversion], [$1])dnl
-m4_builtin([divert], _m4_divert(_m4_divert_diversion))dnl
+m4_builtin([divert], _m4_divert([$1]))dnl
 ])
 
 
 ])
 
 
@@ -782,18 +757,19 @@ m4_builtin([divert], _m4_divert(_m4_divert_diversion))dnl
 # -------------------------------
 # Change the diversion stream to its previous value, unstacking it.
 # If specified, verify we left DIVERSION-NAME.
 # -------------------------------
 # Change the diversion stream to its previous value, unstacking it.
 # If specified, verify we left DIVERSION-NAME.
+# When we pop the last value from the stack, we divert to -1.
 m4_define([m4_divert_pop],
 m4_define([m4_divert_pop],
-[m4_ifval([$1],
-     [m4_if(_m4_divert([$1]), m4_divnum, [],
-            [m4_fatal([$0($1): diversion mismatch: ]
-m4_defn([m4_divert_stack]))])])dnl
+[m4_ifndef([_m4_divert_diversion],
+           [m4_fatal([too many m4_divert_pop])])dnl
+m4_if([$1], [], [],
+      [$1], m4_defn([_m4_divert_diversion]), [],
+      [m4_fatal([$0($1): diversion mismatch: ]_m4_divert_n_stack)])dnl
+m4_popdef([m4_divert_stack])dnl
 m4_popdef([_m4_divert_diversion])dnl
 m4_popdef([_m4_divert_diversion])dnl
-dnl m4_ifndef([_m4_divert_diversion],
-dnl           [m4_fatal([too many m4_divert_pop])])dnl
 m4_builtin([divert],
 m4_builtin([divert],
-           m4_ifdef([_m4_divert_diversion],
-                    [_m4_divert(_m4_divert_diversion)], -1))dnl
-m4_popdef([m4_divert_stack])dnl
+          m4_ifdef([_m4_divert_diversion],
+                   [_m4_divert(m4_defn([_m4_divert_diversion]))],
+                   -1))dnl
 ])
 
 
 ])
 
 
@@ -866,18 +842,18 @@ m4_define([m4_undivert],
 # must keep the expansions of the various level of m4_require separated.
 # Right before executing the epilogue of TEST1, we have:
 #
 # must keep the expansions of the various level of m4_require separated.
 # Right before executing the epilogue of TEST1, we have:
 #
-#         GROW - 2: Test...3
-#         GROW - 1: Test...2
-#         GROW:     Test...1
-#         BODY:
+#         GROW - 2: Test...3
+#         GROW - 1: Test...2
+#         GROW:     Test...1
+#         BODY:
 #
 # Finally the epilogue of TEST1 undiverts GROW - 2, GROW - 1, and
 # GROW into the regular flow, BODY.
 #
 #
 # Finally the epilogue of TEST1 undiverts GROW - 2, GROW - 1, and
 # GROW into the regular flow, BODY.
 #
-#         GROW - 2:
-#         GROW - 1:
-#         GROW:
-#         BODY:        Test...3; Test...2; Test...1
+#         GROW - 2:
+#         GROW - 1:
+#         GROW:
+#         BODY:        Test...3; Test...2; Test...1
 #
 # (The semicolons are here for clarification, but of course are not
 # emitted.)  This is what Autoconf 2.0 (I think) to 2.13 (I'm sure)
 #
 # (The semicolons are here for clarification, but of course are not
 # emitted.)  This is what Autoconf 2.0 (I think) to 2.13 (I'm sure)
@@ -901,27 +877,27 @@ m4_define([m4_undivert],
 #
 # The dependencies between the macros are:
 #
 #
 # The dependencies between the macros are:
 #
-#               3 --- 2b
-#              /        \              is m4_require'd by
-#             /          \       left -------------------- right
-#          2a ------------ 1
+#               3 --- 2b
+#              /        \              is m4_require'd by
+#             /          \       left -------------------- right
+#          2a ------------ 1
 #
 # If you strictly apply the rules given in the previous section you get:
 #
 #
 # If you strictly apply the rules given in the previous section you get:
 #
-#         GROW - 2: TEST3
-#         GROW - 1: TEST2a; TEST2b
-#         GROW:     TEST1
-#         BODY:
+#         GROW - 2: TEST3
+#         GROW - 1: TEST2a; TEST2b
+#         GROW:     TEST1
+#         BODY:
 #
 # (TEST2a, although required by TEST3 is not expanded in GROW - 3
 # because is has already been expanded before in GROW - 1, so it has
 # been AC_PROVIDE'd, so it is not expanded again) so when you undivert
 # the stack of diversions, you get:
 #
 #
 # (TEST2a, although required by TEST3 is not expanded in GROW - 3
 # because is has already been expanded before in GROW - 1, so it has
 # been AC_PROVIDE'd, so it is not expanded again) so when you undivert
 # the stack of diversions, you get:
 #
-#         GROW - 2:
-#         GROW - 1:
-#         GROW:
-#         BODY:        TEST3; TEST2a; TEST2b; TEST1
+#         GROW - 2:
+#         GROW - 1:
+#         GROW:
+#         BODY:        TEST3; TEST2a; TEST2b; TEST1
 #
 # i.e., TEST2a is expanded after TEST3 although the latter required the
 # former.
 #
 # i.e., TEST2a is expanded after TEST3 although the latter required the
 # former.
@@ -939,48 +915,48 @@ m4_define([m4_undivert],
 # In the example above, when TEST2a is expanded, but it's epilogue is
 # not run yet, you have:
 #
 # In the example above, when TEST2a is expanded, but it's epilogue is
 # not run yet, you have:
 #
-#         GROW - 2:
-#         GROW - 1: TEST2a
-#         GROW:     Elaboration of TEST1
-#         BODY:
+#         GROW - 2:
+#         GROW - 1: TEST2a
+#         GROW:     Elaboration of TEST1
+#         BODY:
 #
 # The epilogue of TEST2a emits it immediately:
 #
 #
 # The epilogue of TEST2a emits it immediately:
 #
-#         GROW - 2:
-#         GROW - 1:
-#         GROW:     Elaboration of TEST1
-#         BODY:     TEST2a
+#         GROW - 2:
+#         GROW - 1:
+#         GROW:     Elaboration of TEST1
+#         BODY:     TEST2a
 #
 # TEST2b then requires TEST3, so right before the epilogue of TEST3, you
 # have:
 #
 #
 # TEST2b then requires TEST3, so right before the epilogue of TEST3, you
 # have:
 #
-#         GROW - 2: TEST3
-#         GROW - 1: Elaboration of TEST2b
-#         GROW:     Elaboration of TEST1
-#         BODY:      TEST2a
+#         GROW - 2: TEST3
+#         GROW - 1: Elaboration of TEST2b
+#         GROW:     Elaboration of TEST1
+#         BODY:      TEST2a
 #
 # The epilogue of TEST3 emits it:
 #
 #
 # The epilogue of TEST3 emits it:
 #
-#         GROW - 2:
-#         GROW - 1: Elaboration of TEST2b
-#         GROW:     Elaboration of TEST1
-#         BODY:     TEST2a; TEST3
+#         GROW - 2:
+#         GROW - 1: Elaboration of TEST2b
+#         GROW:     Elaboration of TEST1
+#         BODY:     TEST2a; TEST3
 #
 # TEST2b is now completely expanded, and emitted:
 #
 #
 # TEST2b is now completely expanded, and emitted:
 #
-#         GROW - 2:
-#         GROW - 1:
-#         GROW:     Elaboration of TEST1
-#         BODY:     TEST2a; TEST3; TEST2b
+#         GROW - 2:
+#         GROW - 1:
+#         GROW:     Elaboration of TEST1
+#         BODY:     TEST2a; TEST3; TEST2b
 #
 # and finally, TEST1 is finished and emitted:
 #
 #
 # and finally, TEST1 is finished and emitted:
 #
-#         GROW - 2:
-#         GROW - 1:
-#         GROW:
-#         BODY:     TEST2a; TEST3; TEST2b: TEST1
+#         GROW - 2:
+#         GROW - 1:
+#         GROW:
+#         BODY:     TEST2a; TEST3; TEST2b: TEST1
 #
 #
-# The idea, is simple, but the implementation is a bit evolved.  If you
+# The idea is simple, but the implementation is a bit evolved.  If you
 # are like me, you will want to see the actual functioning of this
 # implementation to be convinced.  The next section gives the full
 # details.
 # are like me, you will want to see the actual functioning of this
 # implementation to be convinced.  The next section gives the full
 # details.
@@ -991,18 +967,18 @@ m4_define([m4_undivert],
 #
 # We consider the macros above, and this configure.ac:
 #
 #
 # We consider the macros above, and this configure.ac:
 #
-#          AC_INIT
-#          TEST1
+#          AC_INIT
+#          TEST1
 #
 # You should keep the definitions of _m4_defun_pro, _m4_defun_epi, and
 # m4_require at hand to follow the steps.
 #
 #
 # You should keep the definitions of _m4_defun_pro, _m4_defun_epi, and
 # m4_require at hand to follow the steps.
 #
-# This implements tries not to assume that of the current diversion is
+# This implements tries not to assume that the current diversion is
 # BODY, so as soon as a macro (m4_defun'd) is expanded, we first
 # record the current diversion under the name _m4_divert_dump (denoted
 # DUMP below for short).  This introduces an important difference with
 # the previous versions of Autoconf: you cannot use m4_require if you
 # BODY, so as soon as a macro (m4_defun'd) is expanded, we first
 # record the current diversion under the name _m4_divert_dump (denoted
 # DUMP below for short).  This introduces an important difference with
 # the previous versions of Autoconf: you cannot use m4_require if you
-# were not inside an m4_defun'd macro, and especially, you cannot
+# are not inside an m4_defun'd macro, and especially, you cannot
 # m4_require directly from the top level.
 #
 # We have not tried to simulate the old behavior (better yet, we
 # m4_require directly from the top level.
 #
 # We have not tried to simulate the old behavior (better yet, we
@@ -1017,104 +993,64 @@ m4_define([m4_undivert],
 #   diversion stack:     BODY |-
 #
 # * TEST1 is expanded
 #   diversion stack:     BODY |-
 #
 # * TEST1 is expanded
-# The prologue of TEST1 sets AC_DIVERSION_DUMP, which is the diversion
+# The prologue of TEST1 sets _m4_divert_dump, which is the diversion
 # where the current elaboration will be dumped, to the current
 # diversion.  It also m4_divert_push to GROW, where the full
 # expansion of TEST1 and its dependencies will be elaborated.
 # where the current elaboration will be dumped, to the current
 # diversion.  It also m4_divert_push to GROW, where the full
 # expansion of TEST1 and its dependencies will be elaborated.
-#   DUMP:       BODY
-#   BODY:       empty
-#   diversions: GROW, BODY |-
-#
-# * TEST1 requires TEST2a: prologue
-# m4_require m4_divert_pushes another temporary diversion GROW - 1 (in
-# fact, the diversion whose number is one less than the current
-# diversion), and expands TEST2a in there.
-#   DUMP:       BODY
-#   BODY:       empty
-#   diversions: GROW-1, GROW, BODY |-
-#
-# * TEST2a is expanded.
-# Its prologue pushes the current diversion again.
-#   DUMP:       BODY
-#   BODY:       empty
-#   diversions: GROW - 1, GROW - 1, GROW, BODY |-
-# It is expanded in GROW - 1, and GROW - 1 is popped by the epilogue
-# of TEST2a.
 #   DUMP:        BODY
 #   DUMP:        BODY
-#   BODY:        nothing
+#   BODY:        empty
+#   diversions:  GROW, BODY |-
+#
+# * TEST1 requires TEST2a
+# _m4_require_call m4_divert_pushes another temporary diversion,
+# GROW - 1, and expands TEST2a in there.
+#   DUMP:        BODY
+#   BODY:        empty
 #   GROW - 1:    TEST2a
 #   diversions:  GROW - 1, GROW, BODY |-
 #   GROW - 1:    TEST2a
 #   diversions:  GROW - 1, GROW, BODY |-
+# Than the content of the temporary diversion is moved to DUMP and the
+# temporary diversion is popped.
+#   DUMP:        BODY
+#   BODY:        TEST2a
+#   diversions:  GROW, BODY |-
 #
 #
-# * TEST1 requires TEST2a: epilogue
-# The content of the current diversion is appended to DUMP (and removed
-# from the current diversion).  A diversion is popped.
-#   DUMP:       BODY
-#   BODY:       TEST2a
-#   diversions: GROW, BODY |-
-#
-# * TEST1 requires TEST2b: prologue
-# m4_require pushes GROW - 1 and expands TEST2b.
-#   DUMP:       BODY
-#   BODY:       TEST2a
-#   diversions: GROW - 1, GROW, BODY |-
-#
-# * TEST2b is expanded.
-# Its prologue pushes the current diversion again.
-#   DUMP:       BODY
-#   BODY:       TEST2a
-#   diversions: GROW - 1, GROW - 1, GROW, BODY |-
-# The body is expanded here.
-#
-# * TEST2b requires TEST3: prologue
-# m4_require pushes GROW - 2 and expands TEST3.
-#   DUMP:       BODY
-#   BODY:       TEST2a
-#   diversions: GROW - 2, GROW - 1, GROW - 1, GROW, BODY |-
-#
-# * TEST3 is expanded.
-# Its prologue pushes the current diversion again.
-#   DUMP:       BODY
-#   BODY:       TEST2a
-#   diversions: GROW-2, GROW-2, GROW-1, GROW-1, GROW, BODY |-
-# TEST3 requires TEST2a, but TEST2a has already been AC_PROVIDE'd, so
-# nothing happens.  It's body is expanded here, and its epilogue pops a
-# diversion.
-#   DUMP:       BODY
-#   BODY:       TEST2a
-#   GROW - 2:   TEST3
-#   diversions: GROW - 2, GROW - 1, GROW - 1, GROW, BODY |-
-#
-# * TEST2b requires TEST3: epilogue
-# The current diversion is appended to DUMP, and a diversion is popped.
-#   DUMP:       BODY
-#   BODY:       TEST2a; TEST3
-#   diversions: GROW - 1, GROW - 1, GROW, BODY |-
-# The content of TEST2b is expanded here.
-#   DUMP:       BODY
-#   BODY:       TEST2a; TEST3
-#   GROW - 1:   TEST2b,
-#   diversions: GROW - 1, GROW - 1, GROW, BODY |-
-# The epilogue of TEST2b pops a diversion.
-#   DUMP:       BODY
-#   BODY:       TEST2a; TEST3
-#   GROW - 1:   TEST2b,
-#   diversions: GROW - 1, GROW, BODY |-
-#
-# * TEST1 requires TEST2b: epilogue
-# The current diversion is appended to DUMP, and a diversion is popped.
-#   DUMP:       BODY
-#   BODY:       TEST2a; TEST3; TEST2b
-#   diversions: GROW, BODY |-
+# * TEST1 requires TEST2b
+# Again, _m4_require_call pushes GROW - 1 and heads to expand TEST2b.
+#   DUMP:        BODY
+#   BODY:        TEST2a
+#   diversions:  GROW - 1, GROW, BODY |-
+#
+# * TEST2b requires TEST3
+# _m4_require_call pushes GROW - 2 and expands TEST3 here.
+# (TEST3 requires TEST2a, but TEST2a has already been m4_provide'd, so
+# nothing happens.)
+#   DUMP:        BODY
+#   BODY:        TEST2a
+#   GROW - 2:    TEST3
+#   diversions:  GROW - 2, GROW - 1, GROW, BODY |-
+# Than the diversion is appended to DUMP, and popped.
+#   DUMP:        BODY
+#   BODY:        TEST2a; TEST3
+#   diversions:  GROW - 1, GROW, BODY |-
+#
+# * TEST1 requires TEST2b (contd.)
+# The content of TEST2b is expanded...
+#   DUMP:        BODY
+#   BODY:        TEST2a; TEST3
+#   GROW - 1:    TEST2b,
+#   diversions:  GROW - 1, GROW, BODY |-
+# ... and moved to DUMP.
+#   DUMP:        BODY
+#   BODY:        TEST2a; TEST3; TEST2b
+#   diversions:  GROW, BODY |-
 #
 # * TEST1 is expanded: epilogue
 #
 # * TEST1 is expanded: epilogue
-# TEST1's own content is in GROW, and it's epilogue pops a diversion.
-#   DUMP:       BODY
-#   BODY:       TEST2a; TEST3; TEST2b
-#   GROW:       TEST1
-#   diversions: BODY |-
-# Here, the epilogue of TEST1 notices the elaboration is done because
-# DUMP and the current diversion are the same, it then undiverts
-# GROW by hand, and undefines DUMP.
+# TEST1's own content is in GROW...
+#   DUMP:        BODY
+#   BODY:        TEST2a; TEST3; TEST2b
+#   GROW:        TEST1
+#   diversions:  BODY |-
+# ... and it's epilogue moves it to DUMP and then undefines DUMP.
 #   DUMP:       undefined
 #   BODY:       TEST2a; TEST3; TEST2b; TEST1
 #   diversions: BODY |-
 #   DUMP:       undefined
 #   BODY:       TEST2a; TEST3; TEST2b; TEST1
 #   diversions: BODY |-
@@ -1136,37 +1072,21 @@ m4_define([m4_undivert],
 # we prepend its name in m4_expansion_stack, and when we exit the
 # macro, we remove it (thanks to pushdef/popdef).
 #
 # we prepend its name in m4_expansion_stack, and when we exit the
 # macro, we remove it (thanks to pushdef/popdef).
 #
-# In addition, we want to use the expansion stack to detect circular
-# m4_require dependencies.  This means we need to browse the stack to
-# check whether a macro being expanded is m4_require'd.  For ease of
-# implementation, and certainly for the benefit of performances, we
-# don't browse the m4_expansion_stack, rather each time we expand a
-# macro FOO we define _m4_expanding(FOO).  Then m4_require(BAR) simply
-# needs to check whether _m4_expanding(BAR) is defined to diagnose a
-# circular dependency.
-#
-# To improve the diagnostic, in addition to keeping track of the stack
-# of macro calls, m4_expansion_stack also records the m4_require
-# stack.  Note that therefore an m4_defun'd macro being required will
-# appear twice in the stack: the first time because it is required,
-# the second because it is expanded.  We can avoid this, but it has
-# two small drawbacks: (i) the implementation is slightly more
-# complex, and (ii) it hides the difference between define'd macros
-# (which don't appear in m4_expansion_stack) and m4_defun'd macros
-# (which do).  The more debugging information, the better.
+# In addition, we want to detect circular m4_require dependencies.
+# Each time we expand a macro FOO we define _m4_expanding(FOO); and
+# m4_require(BAR) simply checks whether _m4_expanding(BAR) is defined.
 
 
 # m4_expansion_stack_push(TEXT)
 # -----------------------------
 m4_define([m4_expansion_stack_push],
 [m4_pushdef([m4_expansion_stack],
 
 
 # m4_expansion_stack_push(TEXT)
 # -----------------------------
 m4_define([m4_expansion_stack_push],
 [m4_pushdef([m4_expansion_stack],
-            [$1]m4_ifdef([m4_expansion_stack], [
+           [$1]m4_ifdef([m4_expansion_stack], [
 m4_defn([m4_expansion_stack])]))])
 
 
 # m4_expansion_stack_pop
 # ----------------------
 m4_defn([m4_expansion_stack])]))])
 
 
 # m4_expansion_stack_pop
 # ----------------------
-# Dump the expansion stack.
 m4_define([m4_expansion_stack_pop],
 [m4_popdef([m4_expansion_stack])])
 
 m4_define([m4_expansion_stack_pop],
 [m4_popdef([m4_expansion_stack])])
 
@@ -1176,7 +1096,7 @@ m4_define([m4_expansion_stack_pop],
 # Dump the expansion stack.
 m4_define([m4_expansion_stack_dump],
 [m4_ifdef([m4_expansion_stack],
 # Dump the expansion stack.
 m4_define([m4_expansion_stack_dump],
 [m4_ifdef([m4_expansion_stack],
-          [m4_errprintn(m4_defn([m4_expansion_stack]))])dnl
+         [m4_errprintn(m4_defn([m4_expansion_stack]))])dnl
 m4_errprintn(m4_location[: the top level])])
 
 
 m4_errprintn(m4_location[: the top level])])
 
 
@@ -1203,29 +1123,33 @@ m4_define([_m4_divert(GROW)],       10000)
 # -------------------------
 # The prologue for Autoconf macros.
 m4_define([_m4_defun_pro],
 # -------------------------
 # The prologue for Autoconf macros.
 m4_define([_m4_defun_pro],
-[m4_expansion_stack_push(m4_defn([m4_location($1)])[: $1 is expanded from...])dnl
+[m4_ifndef([m4_expansion_stack], [_m4_defun_pro_outer[]])dnl
+m4_expansion_stack_push(m4_defn([m4_location($1)])[: $1 is expanded from...])dnl
 m4_pushdef([_m4_expanding($1)])dnl
 m4_pushdef([_m4_expanding($1)])dnl
-m4_ifdef([_m4_divert_dump],
-         [m4_divert_push(m4_defn([_m4_divert_diversion]))],
-         [m4_copy([_m4_divert_diversion], [_m4_divert_dump])dnl
-m4_divert_push([GROW])])dnl
 ])
 
 ])
 
+m4_define([_m4_defun_pro_outer],
+[m4_copy([_m4_divert_diversion], [_m4_divert_dump])dnl
+m4_divert_push([GROW])dnl
+])
 
 # _m4_defun_epi(MACRO-NAME)
 # -------------------------
 # The Epilogue for Autoconf macros.  MACRO-NAME only helps tracing
 # the PRO/EPI pairs.
 m4_define([_m4_defun_epi],
 
 # _m4_defun_epi(MACRO-NAME)
 # -------------------------
 # The Epilogue for Autoconf macros.  MACRO-NAME only helps tracing
 # the PRO/EPI pairs.
 m4_define([_m4_defun_epi],
-[m4_divert_pop()dnl
-m4_if(_m4_divert_dump, _m4_divert_diversion,
-      [m4_undivert([GROW])dnl
-m4_undefine([_m4_divert_dump])])dnl
+[m4_popdef([_m4_expanding($1)])dnl
 m4_expansion_stack_pop()dnl
 m4_expansion_stack_pop()dnl
-m4_popdef([_m4_expanding($1)])dnl
+m4_ifndef([m4_expansion_stack], [_m4_defun_epi_outer[]])dnl
 m4_provide([$1])dnl
 ])
 
 m4_provide([$1])dnl
 ])
 
+m4_define([_m4_defun_epi_outer],
+[m4_undefine([_m4_divert_dump])dnl
+m4_divert_pop([GROW])dnl
+m4_undivert([GROW])dnl
+])
+
 
 # m4_defun(NAME, EXPANSION)
 # -------------------------
 
 # m4_defun(NAME, EXPANSION)
 # -------------------------
@@ -1240,7 +1164,7 @@ m4_provide([$1])dnl
 m4_define([m4_defun],
 [m4_define([m4_location($1)], m4_location)dnl
 m4_define([$1],
 m4_define([m4_defun],
 [m4_define([m4_location($1)], m4_location)dnl
 m4_define([$1],
-          [_m4_defun_pro([$1])$2[]_m4_defun_epi([$1])])])
+         [_m4_defun_pro([$1])$2[]_m4_defun_epi([$1])])])
 
 
 # m4_defun_once(NAME, EXPANSION)
 
 
 # m4_defun_once(NAME, EXPANSION)
@@ -1250,9 +1174,9 @@ m4_define([$1],
 m4_define([m4_defun_once],
 [m4_define([m4_location($1)], m4_location)dnl
 m4_define([$1],
 m4_define([m4_defun_once],
 [m4_define([m4_location($1)], m4_location)dnl
 m4_define([$1],
-          [m4_provide_if([$1],
-                         [m4_warn([syntax], [$1 invoked multiple times])],
-                         [_m4_defun_pro([$1])$2[]_m4_defun_epi([$1])])])])
+         [m4_provide_if([$1],
+                        [m4_warn([syntax], [$1 invoked multiple times])],
+                        [_m4_defun_pro([$1])$2[]_m4_defun_epi([$1])])])])
 
 
 # m4_pattern_forbid(ERE, [WHY])
 
 
 # m4_pattern_forbid(ERE, [WHY])
@@ -1278,7 +1202,7 @@ m4_define([m4_pattern_allow], [])
 # ---------------------------------------------
 m4_define([m4_before],
 [m4_provide_if([$2],
 # ---------------------------------------------
 m4_define([m4_before],
 [m4_provide_if([$2],
-               [m4_warn([syntax], [$2 was called before $1])])])
+              [m4_warn([syntax], [$2 was called before $1])])])
 
 
 # m4_require(NAME-TO-CHECK, [BODY-TO-EXPAND = NAME-TO-CHECK])
 
 
 # m4_require(NAME-TO-CHECK, [BODY-TO-EXPAND = NAME-TO-CHECK])
@@ -1314,34 +1238,48 @@ m4_define([m4_before],
 #   `extension' prevents `AC_LANG_COMPILER' from having actual arguments that
 #   it passes to `AC_LANG_COMPILER(C)'.
 m4_define([m4_require],
 #   `extension' prevents `AC_LANG_COMPILER' from having actual arguments that
 #   it passes to `AC_LANG_COMPILER(C)'.
 m4_define([m4_require],
-[m4_expansion_stack_push(m4_location[: $1 is required by...])dnl
-m4_ifdef([_m4_expanding($1)],
-         [m4_fatal([$0: circular dependency of $1])])dnl
+[m4_ifdef([_m4_expanding($1)],
+        [m4_fatal([$0: circular dependency of $1])])dnl
 m4_ifndef([_m4_divert_dump],
 m4_ifndef([_m4_divert_dump],
-          [m4_fatal([$0: cannot be used outside of an m4_defun'd macro])])dnl
+         [m4_fatal([$0($1): cannot be used outside of an m4_defun'd macro])])dnl
 m4_provide_if([$1],
 m4_provide_if([$1],
-              [],
-              [m4_divert_push(m4_eval(m4_divnum - 1))dnl
+             [],
+             [_m4_require_call([$1], [$2])])dnl
+])
+
+
+# _m4_require_call(BODY-TO-EXPAND)
+# --------------------------------
+# If m4_require decides to expand the body, it calls this macro.
+m4_define([_m4_require_call],
+[m4_define([_m4_divert_grow], m4_decr(_m4_divert_grow))dnl
+m4_divert_push(_m4_divert_grow)dnl
 m4_default([$2], [$1])
 m4_default([$2], [$1])
-m4_divert(m4_defn([_m4_divert_dump]))dnl
-m4_undivert(m4_defn([_m4_divert_diversion]))dnl
-m4_divert_pop(m4_defn([_m4_divert_dump]))])dnl
 m4_provide_if([$1],
 m4_provide_if([$1],
-              [],
-              [m4_warn([syntax],
-                       [$1 is m4_require'd but is not m4_defun'd])])dnl
-m4_expansion_stack_pop()dnl
+             [],
+             [m4_warn([syntax],
+                      [$1 is m4_require'd but not m4_defun'd])])dnl
+m4_divert(m4_defn([_m4_divert_dump]))dnl
+m4_undivert(_m4_divert_grow)dnl
+m4_divert_pop(_m4_divert_grow)dnl
+m4_define([_m4_divert_grow], m4_incr(_m4_divert_grow))dnl
 ])
 
 
 ])
 
 
+# _m4_divert_grow
+# ---------------
+# The counter for _m4_require_call.
+m4_define([_m4_divert_grow], _m4_divert([GROW]))
+
+
 # m4_expand_once(TEXT, [WITNESS = TEXT])
 # --------------------------------------
 # If TEXT has never been expanded, expand it *here*.  Use WITNESS as
 # as a memory that TEXT has already been expanded.
 m4_define([m4_expand_once],
 [m4_provide_if(m4_ifval([$2], [[$2]], [[$1]]),
 # m4_expand_once(TEXT, [WITNESS = TEXT])
 # --------------------------------------
 # If TEXT has never been expanded, expand it *here*.  Use WITNESS as
 # as a memory that TEXT has already been expanded.
 m4_define([m4_expand_once],
 [m4_provide_if(m4_ifval([$2], [[$2]], [[$1]]),
-               [],
-               [m4_provide(m4_ifval([$2], [[$2]], [[$1]]))[]$1])])
+              [],
+              [m4_provide(m4_ifval([$2], [[$2]], [[$1]]))[]$1])])
 
 
 # m4_provide(MACRO-NAME)
 
 
 # m4_provide(MACRO-NAME)
@@ -1358,7 +1296,7 @@ m4_define([m4_provide],
 # information is coded.
 m4_define([m4_provide_if],
 [m4_ifdef([m4_provide($1)],
 # information is coded.
 m4_define([m4_provide_if],
 [m4_ifdef([m4_provide($1)],
-          [$2], [$3])])
+         [$2], [$3])])
 
 
 ## -------------------- ##
 
 
 ## -------------------- ##
@@ -1397,17 +1335,18 @@ m4_defn([m4_cr_digits])dnl
 
 # m4_re_escape(STRING)
 # --------------------
 
 # m4_re_escape(STRING)
 # --------------------
-# Escape BRE active characters in STRING.
+# Escape RE active characters in STRING.
 m4_define([m4_re_escape],
 [m4_bpatsubst([$1],
 m4_define([m4_re_escape],
 [m4_bpatsubst([$1],
-              [[][+*.]], [\\\&])])
+             [[][*+.?\^$]], [\\\&])])
 
 
 # m4_re_string
 # ------------
 # Regexp for `[a-zA-Z_0-9]*'
 
 
 # m4_re_string
 # ------------
 # Regexp for `[a-zA-Z_0-9]*'
+# m4_dquote provides literal [] for the character class.
 m4_define([m4_re_string],
 m4_define([m4_re_string],
-m4_defn([m4_cr_symbols2])dnl
+m4_dquote(m4_defn([m4_cr_symbols2]))dnl
 [*]dnl
 )
 
 [*]dnl
 )
 
@@ -1416,7 +1355,7 @@ m4_defn([m4_cr_symbols2])dnl
 # ----------
 # Regexp for `[a-zA-Z_][a-zA-Z_0-9]*'
 m4_define([m4_re_word],
 # ----------
 # Regexp for `[a-zA-Z_][a-zA-Z_0-9]*'
 m4_define([m4_re_word],
-m4_defn([m4_cr_symbols1])dnl
+m4_dquote(m4_defn([m4_cr_symbols1]))dnl
 m4_defn([m4_re_string])dnl
 )
 
 m4_defn([m4_re_string])dnl
 )
 
@@ -1440,11 +1379,11 @@ m4_define([m4_toupper],
 #
 # REGEXP specifies where to split.  Default is [\t ]+.
 #
 #
 # REGEXP specifies where to split.  Default is [\t ]+.
 #
-# Pay attention to the m4_changequotes.  Inner m4_changequotes exist for
-# obvious reasons (we want to insert square brackets).  Outer
-# m4_changequotes are needed because otherwise the m4 parser, when it
-# sees the closing bracket we add to the result, believes it is the
-# end of the body of the macro we define.
+# If STRING is empty, the result is an empty list.
+#
+# Pay attention to the m4_changequotes.  When m4 reads the definition of
+# m4_split, it still has quotes set to [ and ].  Luckily, these are matched
+# in the macro body, so the definition is stored correctly.
 #
 # Also, notice that $1 is quoted twice, since we want the result to
 # be quoted.  Then you should understand that the argument of
 #
 # Also, notice that $1 is quoted twice, since we want the result to
 # be quoted.  Then you should understand that the argument of
@@ -1455,16 +1394,17 @@ m4_define([m4_toupper],
 #   m4_split([active active ])end
 #   => [active], [active], []end
 
 #   m4_split([active active ])end
 #   => [active], [active], []end
 
-m4_changequote(<<, >>)
-m4_define(<<m4_split>>,
-<<m4_changequote(``, '')dnl
+m4_define([m4_split],
+[m4_ifval([$1], [_m4_split($@)])])
+
+m4_define([_m4_split],
+[m4_changequote(``, '')dnl
 [dnl Can't use m4_default here instead of m4_if, because m4_default uses
 dnl [ and ] as quotes.
 m4_bpatsubst(````$1'''',
 [dnl Can't use m4_default here instead of m4_if, because m4_default uses
 dnl [ and ] as quotes.
 m4_bpatsubst(````$1'''',
-            m4_if(``$2'',, ``[         ]+'', ``$2''),
+            m4_if(``$2'',, ``[  ]+'', ``$2''),
             ``], ['')]dnl
             ``], ['')]dnl
-m4_changequote([, ])>>)
-m4_changequote([, ])
+m4_changequote([, ])])
 
 
 
 
 
 
@@ -1491,13 +1431,10 @@ m4_define([m4_flatten],
 #
 # This macro is robust to active symbols.
 #    m4_define(active, ACTIVE)
 #
 # This macro is robust to active symbols.
 #    m4_define(active, ACTIVE)
-#    m4_strip([  active                active ])end
+#    m4_strip([  active <tab> <tab>active ])end
 #    => active activeend
 #
 #    => active activeend
 #
-# This macro is fun!  Because we want to preserve active symbols, STRING
-# must be quoted for each evaluation, which explains there are 4 levels
-# of brackets around $1 (don't forget that the result must be quoted
-# too, hence one more quoting than applications).
+# Because we want to preserve active symbols, STRING must be double-quoted.
 #
 # Then notice the 2 last patterns: they are in charge of removing the
 # leading/trailing spaces.  Why not just `[^ ]'?  Because they are
 #
 # Then notice the 2 last patterns: they are in charge of removing the
 # leading/trailing spaces.  Why not just `[^ ]'?  Because they are
@@ -1506,9 +1443,9 @@ m4_define([m4_flatten],
 # character, since there are two leading `['; equally for the last pattern.
 m4_define([m4_strip],
 [m4_bpatsubsts([[$1]],
 # character, since there are two leading `['; equally for the last pattern.
 m4_define([m4_strip],
 [m4_bpatsubsts([[$1]],
-               [[      ]+], [ ],
-               [^\(..\) ],    [\1],
-               [ \(..\)$],    [\1])])
+              [[        ]+], [ ],
+              [^\(..\) ],    [\1],
+              [ \(..\)$],    [\1])])
 
 
 # m4_normalize(STRING)
 
 
 # m4_normalize(STRING)
@@ -1533,9 +1470,9 @@ m4_define([m4_normalize],
 # Produce ARG1SEPARG2...SEPARGn.
 m4_defun([m4_join],
 [m4_case([$#],
 # Produce ARG1SEPARG2...SEPARGn.
 m4_defun([m4_join],
 [m4_case([$#],
-         [1], [],
-         [2], [[$2]],
-         [[$2][$1]$0([$1], m4_shiftn(2, $@))])])
+        [1], [],
+        [2], [[$2]],
+        [[$2][$1]$0([$1], m4_shiftn(2, $@))])])
 
 
 
 
 
 
@@ -1573,7 +1510,7 @@ m4_defun([m4_join],
 #    => active
 m4_define([m4_append],
 [m4_define([$1],
 #    => active
 m4_define([m4_append],
 [m4_define([$1],
-           m4_ifdef([$1], [m4_defn([$1])$3])[$2])])
+          m4_ifdef([$1], [m4_defn([$1])$3])[$2])])
 
 
 # m4_append_uniq(MACRO-NAME, STRING, [SEPARATOR])
 
 
 # m4_append_uniq(MACRO-NAME, STRING, [SEPARATOR])
@@ -1581,18 +1518,18 @@ m4_define([m4_append],
 # As `m4_append', but append only if not yet present.
 m4_define([m4_append_uniq],
 [m4_ifdef([$1],
 # As `m4_append', but append only if not yet present.
 m4_define([m4_append_uniq],
 [m4_ifdef([$1],
-          [m4_bmatch([$3]m4_defn([$1])[$3], m4_re_escape([$3$2$3]), [],
-                     [m4_append($@)])],
-          [m4_append($@)])])
+         [m4_bmatch([$3]m4_defn([$1])[$3], m4_re_escape([$3$2$3]), [],
+                    [m4_append($@)])],
+         [m4_append($@)])])
 
 
 # m4_text_wrap(STRING, [PREFIX], [FIRST-PREFIX], [WIDTH])
 # -------------------------------------------------------
 # Expands into STRING wrapped to hold in WIDTH columns (default = 79).
 
 
 # m4_text_wrap(STRING, [PREFIX], [FIRST-PREFIX], [WIDTH])
 # -------------------------------------------------------
 # Expands into STRING wrapped to hold in WIDTH columns (default = 79).
-# If prefix is set, each line is prefixed with it.  If FIRST-PREFIX is
-# specified, then the first line is prefixed with it.  As a special
-# case, if the length of the first prefix is greater than that of
-# PREFIX, then FIRST-PREFIX will be left alone on the first line.
+# If PREFIX is given, each line is prefixed with it.  If FIRST-PREFIX is
+# specified, then the first line is prefixed with it.  As a special case,
+# if the length of FIRST-PREFIX is greater than that of PREFIX, then
+# FIRST-PREFIX will be left alone on the first line.
 #
 # Typical outputs are:
 #
 #
 # Typical outputs are:
 #
@@ -1612,19 +1549,22 @@ m4_define([m4_append_uniq],
 #
 # m4_text_wrap([Super long documentation.], [          ], [  --too-wide ], 30)
 #  =>   --too-wide
 #
 # m4_text_wrap([Super long documentation.], [          ], [  --too-wide ], 30)
 #  =>   --too-wide
-#  =>    Super long
-#  =>    documentation.
+#  =>      Super long
+#  =>      documentation.
 #
 # FIXME: there is no checking of a longer PREFIX than WIDTH, but do
 # we really want to bother with people trying each single corner
 # of a software?
 #
 #
 # FIXME: there is no checking of a longer PREFIX than WIDTH, but do
 # we really want to bother with people trying each single corner
 # of a software?
 #
+# more important:
+# FIXME: handle quadrigraphs correctly, both in TEXT and in FIRST_PREFIX.
+#
 # This macro does not leave a trailing space behind the last word,
 # what complicates it a bit.  The algorithm is stupid simple: all the
 # words are preceded by m4_Separator which is defined to empty for the
 # first word, and then ` ' (single space) for all the others.
 m4_define([m4_text_wrap],
 # This macro does not leave a trailing space behind the last word,
 # what complicates it a bit.  The algorithm is stupid simple: all the
 # words are preceded by m4_Separator which is defined to empty for the
 # first word, and then ` ' (single space) for all the others.
 m4_define([m4_text_wrap],
-[m4_pushdef([m4_Prefix], m4_default([$2], []))dnl
+[m4_pushdef([m4_Prefix], [$2])dnl
 m4_pushdef([m4_Prefix1], m4_default([$3], [m4_Prefix]))dnl
 m4_pushdef([m4_Width], m4_default([$4], 79))dnl
 m4_pushdef([m4_Cursor], m4_len(m4_Prefix1))dnl
 m4_pushdef([m4_Prefix1], m4_default([$3], [m4_Prefix]))dnl
 m4_pushdef([m4_Width], m4_default([$4], 79))dnl
 m4_pushdef([m4_Cursor], m4_len(m4_Prefix1))dnl
@@ -1633,13 +1573,13 @@ m4_Prefix1[]dnl
 m4_if(m4_eval(m4_Cursor > m4_len(m4_Prefix)),
       1, [m4_define([m4_Cursor], m4_len(m4_Prefix))
 m4_Prefix])[]dnl
 m4_if(m4_eval(m4_Cursor > m4_len(m4_Prefix)),
       1, [m4_define([m4_Cursor], m4_len(m4_Prefix))
 m4_Prefix])[]dnl
-m4_foreach([m4_Word], m4_quote(m4_split(m4_normalize([$1]))),
+m4_foreach_w([m4_Word], [$1],
 [m4_define([m4_Cursor], m4_eval(m4_Cursor + m4_len(m4_defn([m4_Word])) + 1))dnl
 dnl New line if too long, else insert a space unless it is the first
 dnl of the words.
 m4_if(m4_eval(m4_Cursor > m4_Width),
       1, [m4_define([m4_Cursor],
 [m4_define([m4_Cursor], m4_eval(m4_Cursor + m4_len(m4_defn([m4_Word])) + 1))dnl
 dnl New line if too long, else insert a space unless it is the first
 dnl of the words.
 m4_if(m4_eval(m4_Cursor > m4_Width),
       1, [m4_define([m4_Cursor],
-                    m4_eval(m4_len(m4_Prefix) + m4_len(m4_defn([m4_Word])) + 1))]
+                   m4_eval(m4_len(m4_Prefix) + m4_len(m4_defn([m4_Word])) + 1))]
 m4_Prefix,
        [m4_Separator])[]dnl
 m4_defn([m4_Word])[]dnl
 m4_Prefix,
        [m4_Separator])[]dnl
 m4_defn([m4_Word])[]dnl
@@ -1661,6 +1601,21 @@ m4_define([m4_text_box],
 ])
 
 
 ])
 
 
+# m4_qlen(STRING)
+# ---------------
+# Expands to the length of STRING after autom4te converts all quadrigraphs.
+m4_define([m4_qlen],
+[m4_len(m4_bpatsubsts([[$1]], [@\(<:\|:>\|S|\|%:\)@], [P], [@&t@]))])
+
+
+# m4_qdelta(STRING)
+# -----------------
+# Expands to the net change in the length of STRING from autom4te converting the
+# quadrigraphs in STRING.  This number is always negative or zero.
+m4_define([m4_qdelta],
+[m4_eval(m4_qlen([$1]) - m4_len([$1]))])
+
+
 
 ## ----------------------- ##
 ## 10. Number processing.  ##
 
 ## ----------------------- ##
 ## 10. Number processing.  ##
@@ -1672,9 +1627,9 @@ m4_define([m4_text_box],
 # The sign of the integer A.
 m4_define([m4_sign],
 [m4_bmatch([$1],
 # The sign of the integer A.
 m4_define([m4_sign],
 [m4_bmatch([$1],
-           [^-], -1,
-           [^0+], 0,
-                  1)])
+          [^-], -1,
+          [^0+], 0,
+                 1)])
 
 # m4_cmp(A, B)
 # ------------
 
 # m4_cmp(A, B)
 # ------------
@@ -1703,9 +1658,9 @@ m4_define([m4_list_cmp],
        [$1], [()], [$0((0), [$2])],
        [$2], [()], [$0([$1], (0))],
        [m4_case(m4_cmp(m4_car$1, m4_car$2),
        [$1], [()], [$0((0), [$2])],
        [$2], [()], [$0([$1], (0))],
        [m4_case(m4_cmp(m4_car$1, m4_car$2),
-                -1, -1,
-                 1, 1,
-                 0, [$0((m4_shift$1), (m4_shift$2))])])])
+               -1, -1,
+                1, 1,
+                0, [$0((m4_shift$1), (m4_shift$2))])])])
 
 
 
 
 
 
@@ -1725,14 +1680,14 @@ m4_define([m4_list_cmp],
 # reasonable version numbers and is valid up to `z', no double letters.
 m4_define([m4_version_unletter],
 [m4_translit(m4_bpatsubsts([$1],
 # reasonable version numbers and is valid up to `z', no double letters.
 m4_define([m4_version_unletter],
 [m4_translit(m4_bpatsubsts([$1],
-                           [\([0-9]+\)\([abcdefghi]\)],
-                             [m4_eval(\1 + 1).-1.\2],
-                           [\([0-9]+\)\([jklmnopqrs]\)],
-                             [m4_eval(\1 + 1).-1.1\2],
-                           [\([0-9]+\)\([tuvwxyz]\)],
-                             [m4_eval(\1 + 1).-1.2\2]),
-             [abcdefghijklmnopqrstuvwxyz],
-             [12345678901234567890123456])])
+                          [\([0-9]+\)\([abcdefghi]\)],
+                            [m4_eval(\1 + 1).-1.\2],
+                          [\([0-9]+\)\([jklmnopqrs]\)],
+                            [m4_eval(\1 + 1).-1.1\2],
+                          [\([0-9]+\)\([tuvwxyz]\)],
+                            [m4_eval(\1 + 1).-1.2\2]),
+            [abcdefghijklmnopqrstuvwxyz],
+            [12345678901234567890123456])])
 
 
 # m4_version_compare(VERSION-1, VERSION-2)
 
 
 # m4_version_compare(VERSION-1, VERSION-2)
@@ -1743,7 +1698,16 @@ m4_define([m4_version_unletter],
 #   1 if           >
 m4_define([m4_version_compare],
 [m4_list_cmp((m4_split(m4_version_unletter([$1]), [\.])),
 #   1 if           >
 m4_define([m4_version_compare],
 [m4_list_cmp((m4_split(m4_version_unletter([$1]), [\.])),
-             (m4_split(m4_version_unletter([$2]), [\.])))])
+            (m4_split(m4_version_unletter([$2]), [\.])))])
+
+
+# m4_PACKAGE_NAME
+# m4_PACKAGE_TARNAME
+# m4_PACKAGE_VERSION
+# m4_PACKAGE_STRING
+# m4_PACKAGE_BUGREPORT
+# --------------------
+#m4_include([m4sugar/version.m4]) # This is needed for Autoconf, but not Bison.
 
 
 # m4_version_prereq(VERSION, [IF-OK], [IF-NOT = FAIL])
 
 
 # m4_version_prereq(VERSION, [IF-OK], [IF-NOT = FAIL])
@@ -1752,7 +1716,8 @@ m4_define([m4_version_compare],
 m4_define([m4_version_prereq],
 [m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]), [$1]), -1,
        [m4_default([$3],
 m4_define([m4_version_prereq],
 [m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]), [$1]), -1,
        [m4_default([$3],
-                   [m4_fatal([Autoconf version $1 or higher is required])])],
+                  [m4_fatal([Autoconf version $1 or higher is required],
+                            63)])],
        [$2])[]dnl
 ])
 
        [$2])[]dnl
 ])
 
@@ -1795,8 +1760,7 @@ m4_pattern_forbid([^dnl$])
 
 # Check the divert push/pop perfect balance.
 m4_wrap([m4_ifdef([_m4_divert_diversion],
 
 # Check the divert push/pop perfect balance.
 m4_wrap([m4_ifdef([_m4_divert_diversion],
-                  [m4_fatal([$0: unbalanced m4_divert_push:]
-m4_defn([m4_divert_stack]))])[]])
+          [m4_fatal([$0: unbalanced m4_divert_push:]_m4_divert_n_stack)])[]])
 
 m4_divert_push([KILL])
 m4_wrap([m4_divert_pop([KILL])[]])
 
 m4_divert_push([KILL])
 m4_wrap([m4_divert_pop([KILL])[]])
index f4b1b1b9a811d7693225b163cd0ad2f2783df550..982747d418625ac2524375150e4caebe33a5aaf3 100644 (file)
@@ -82,7 +82,7 @@ m4_define([b4_int_type],
 
        m4_eval([0 <= $1]),                [1], [unsigned int],
 
 
        m4_eval([0 <= $1]),                [1], [unsigned int],
 
-                                              [int])])
+                                              [int])])
 
 
 ## ----------------- ##
 
 
 ## ----------------- ##
@@ -390,7 +390,7 @@ union yyalloc
 #define YYUNDEFTOK  ]b4_undef_token_number[
 #define YYMAXUTOK   ]b4_user_token_number_max[
 
 #define YYUNDEFTOK  ]b4_undef_token_number[
 #define YYMAXUTOK   ]b4_user_token_number_max[
 
-#define YYTRANSLATE(YYX)                                               \
+#define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
@@ -529,7 +529,7 @@ do                                                          \
       goto yybackup;                                           \
     }                                                          \
   else                                                         \
       goto yybackup;                                           \
     }                                                          \
   else                                                         \
-    {                                                          \
+    {                                                          \
       yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")); \
       YYERROR;                                                 \
     }                                                          \
       yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")); \
       YYERROR;                                                 \
     }                                                          \
@@ -609,7 +609,7 @@ do {                                                                \
   if (yydebug)                                                 \
     {                                                          \
       YYFPRINTF (stderr, "%s ", Title);                                \
   if (yydebug)                                                 \
     {                                                          \
       YYFPRINTF (stderr, "%s ", Title);                                \
-      yysymprint (stderr,                                      \
+      yysymprint (stderr,                                      \
                   Type, Value]b4_location_if([, Location])[);  \
       YYFPRINTF (stderr, "\n");                                        \
     }                                                          \
                   Type, Value]b4_location_if([, Location])[);  \
       YYFPRINTF (stderr, "\n");                                        \
     }                                                          \
index c25813fb608f8216c7cc72fd1ab01681a81ebdd1..d2264621504c395a04fbcbabd694721e4c7bb4bb 100644 (file)
@@ -7425,6 +7425,9 @@ parser's to get the set of defined tokens.
 @comment file: calc++-scanner.ll
 @example
 %@{                                            /* -*- C++ -*- */
 @comment file: calc++-scanner.ll
 @example
 %@{                                            /* -*- C++ -*- */
+# include <cstdlib>
+# include <errno.h>
+# include <limits.h>
 # include <string>
 # include "calc++-driver.hh"
 # include "calc++-parser.hh"
 # include <string>
 # include "calc++-driver.hh"
 # include "calc++-parser.hh"
@@ -7482,7 +7485,14 @@ errors.
 @example
 [-+*/]     return yytext[0];
 ":="       return TOKEN_ASSIGN;
 @example
 [-+*/]     return yytext[0];
 ":="       return TOKEN_ASSIGN;
-@{int@}      yylval->ival = atoi (yytext); return TOKEN_NUMBER;
+@{int@}      @{
+  errno = 0;
+  long n = strtol (yytext, NULL, 10);
+  if (! (INT_MIN <= n && n <= INT_MAX && errno != ERANGE))
+    driver.error (*yylloc, "integer is out of range");
+  yylval->ival = n;
+  return TOKEN_NUMBER;
+@}
 @{id@}       yylval->sval = new std::string (yytext); return TOKEN_IDENTIFIER;
 .          driver.error (*yylloc, "invalid character");
 %%
 @{id@}       yylval->sval = new std::string (yytext); return TOKEN_IDENTIFIER;
 .          driver.error (*yylloc, "invalid character");
 %%
diff --git a/etc/clcommit b/etc/clcommit
deleted file mode 100755 (executable)
index 7797218..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-#! /bin/sh
-
-# clcommit version 0.9.5
-
-# Copyright (C) 1999, 2000, Free Software Foundation
-
-# This script is Free Software, and it can be copied, distributed and
-# modified as defined in the GNU General Public License.  A copy of
-# its license can be downloaded from http://www.gnu.org/copyleft/gpl.html
-
-# Originally by Gary V. Vaughan <gvaughan@oranda.demon.co.uk>
-# Pretty much rewritten by Alexandre Oliva <aoliva@redhat.com>
-
-# This scripts eases checking in changes to CVS-maintained projects
-# with ChangeLog files.  It will check that there have been no
-# conflicting commits in the CVS repository and print which files it
-# is going to commit to stderr.  A list of files to compare and to
-# check in can be given in the command line.  If it is not given, all
-# files in the current directory (and below, unless `-l' is given) are
-# considered for check in.
-
-# The commit message will be extracted from the differences between a
-# file named ChangeLog* in the commit list, or named after -C, and the
-# one in the repository (unless a message was specified with `-m' or
-# `-F').  An empty message is not accepted (but a blank line is).  If
-# the message is acceptable, it will be presented for verification
-# (and possible edition) using the $PAGER environment variable (or
-# `more', if it is not set, or `cat', if the `-f' switch is given).
-# If $PAGER exits successfully, the modified files (at that moment)
-# are checked in, unless `-n' was specified, in which case nothing is
-# checked in.
-
-# usage: clcommit [-v] [-h] [-f] [-l] [-n] [-q] [-z N] [-C ChangeLog_file]
-#                 [-m msg|-F msg_file|-1] [--] [file|dir ...]
-
-# -f      --force       don't check (unless *followed* by -n), and just
-#                       display commit message instead of running $PAGER
-# -l      --local       don't descend into subdirectories
-# -m msg  --message=msg set commit message
-#         --msg=msg     same as -m
-# -F file --file=file   read commit message from file
-# -1      --first       extract first entry from ChangeLog, no cvs diff
-# -C file --changelog=file extract commit message from specified ChangeLog
-#         --fast        same as --force --first
-# -n      --dry-run     don't commit anything
-# -q      --quiet       run cvs in quiet mode
-# -zN     --compress=N  set compression level (0-9, 0=none, 9=max)
-# -v      --version     print version information
-# -h,-?   --help        print short or long help message
-
-name=clcommit
-: ${CVS=cvs}
-cvsopt=
-updateopt=
-commitopt=
-dry_run=false
-commit=:
-update=:
-log_file="${TMPDIR-/tmp}/commitlog.$$"
-first=false
-
-rm -f "$log_file"
-trap 'rm -f "$log_file"; exit 1' 1 2 15
-
-# this just eases exit handling
-main_repeat=":"
-while $main_repeat; do
-
-repeat="test $# -gt 0"
-while $repeat; do
-    case "$1" in
-    --fast)
-        shift
-       set fnord --force --first ${1+"$@"}
-       shift
-       ;;
-    -f|--force)
-       update=false
-       PAGER=cat
-       shift
-       ;;
-    -l|--local)
-       updateopt="$updateopt -l"
-       commitopt="$commitopt -l"
-       shift
-       ;;
-    -m|--message|--msg)
-       if test $# = 1; then
-           echo "$name: missing argument for $1" >&2
-           break
-       fi
-       if $first || test -f "$log_file"; then
-           echo "$name: you can have at most one of -m, -F and -1" >&2
-           break
-       fi
-       shift
-       echo "$1" > "$log_file"
-       shift
-       ;;
-    -F|--file)
-       if $first || test -f "$log_file"; then
-           echo "$name: you can have at most one of -m, -F and -1" >&2
-           break
-       fi
-       if test $# = 1; then
-           echo "$name: missing argument for $1" >&2
-           break
-       fi
-       shift
-       if cat < "$1" > "$log_file"; then :; else
-           break
-       fi
-       shift
-       ;;
-    -1|--first)
-        if test -f "$log_File"; then
-           echo "$name: you can have at most one of -m, -F and -1" >&2
-           break
-       fi
-       first=:
-       shift
-       ;;
-    -C|--[cC]hange[lL]og)
-        if test $# = 1; then
-           echo "$name: missing argument for $1" >&2
-           break
-       fi
-       shift
-       if test ! -f "$1"; then
-           echo "$name: ChangeLog file \`$1' does not exist" >&2
-           break
-       fi
-       ChangeLog="$1"
-       shift
-       ;;
-    -n|--dry-run)
-       commit=false
-       update=true
-       shift
-       ;;
-    -q|--quiet)
-       cvsopt="$cvsopt -q"
-       shift
-       ;;
-    -v|--verbose)
-       cvsopt="$cvsopt -t"
-       shift
-       ;;
-    -z|--compress)
-       if test $# = 1; then
-           echo "$name: missing argument for $1" >&2
-           break
-       fi
-       case "$2" in
-       [0-9]) :;;
-       *)  echo "$name: invalid argument for $1" >&2
-           break
-           ;;
-       esac
-       cvsopt="$cvsopt -z$2"
-       shift
-       shift
-       ;;
-
-    -m*|-F*|-C*|-z*)
-       opt=`echo "$1" | sed '1s/^\(..\).*$/\1/;q'`
-       arg=`echo "$1" | sed '1s/^-[a-zA-Z0-9]//'`
-       shift
-       set -- "$opt" "$arg" ${1+"$@"}
-       ;;
-    --message=*|--msg=*|--file=*|--[Cc]hange[Ll]og=*|--compress=*)
-       opt=`echo "$1" | sed '1s/^\(--[^=]*\)=.*/\1/;q'`
-       arg=`echo "$1" | sed '1s/^--[^=]*=//'`
-       shift
-       set -- "$opt" "$arg" ${1+"$@"}
-       ;;
-
-    -v|--version)
-       sed '/^# '$name' version /,/^# Heavily modified by/ { s/^# //; p; }; d' < $0
-       exit 0
-       ;;
-    -\?|-h)
-       sed '/^# usage:/,/# -h/ { s/^# //; p; }; d' < $0 &&
-       echo
-       echo "run \`$name --help | more' for full usage"
-       exit 0
-       ;;
-    --help)
-       sed '/^# '$name' version /,/^[^#]/ { /^[^#]/ d; s/^# //; p; }; d' < $0
-       exit 0
-       ;;
-    --)
-       shift
-       repeat=false
-       ;;
-    -*)
-       echo "$name: invalid flag $1" >&2
-       break
-       ;;
-    *)
-       repeat=false
-       ;;
-    esac
-done
-# might have used break 2 within the previous loop, but so what
-$repeat && break
-
-$update && \
-if echo "$name: checking for conflicts..." >&2
-   ($CVS $cvsopt -q -n update $updateopt ${1+"$@"} 2>/dev/null \
-    | while read line; do
-       echo "$line"
-       echo "$line" >&3
-      done | grep '^C') 3>&1 >/dev/null; then
-  echo "$name: some conflicts were found, aborting..." >&2
-  break
-fi
-
-if test ! -f "$log_file"; then
-  if test -z "$ChangeLog"; then
-    for f in ${1+"$@"}; do
-      case "$f" in
-      ChangeLog* | */ChangeLog*)
-        if test -z "$ChangeLog"; then
-           ChangeLog="$f"
-       else
-           echo "$name: multiple ChangeLog files: $ChangeLog and $f" >&2
-           break
-       fi
-       ;;
-      esac
-    done
-  fi
-
-  echo "$name: checking commit message..." >&2
-  if $first; then
-    skipping=:
-    sed 's,^,+,' < ${ChangeLog-ChangeLog} |
-    while read line; do
-      case "$line" in
-      "+2"*) if $skipping; then skipping=false; else break; fi;;
-      "+ "*)
-       echo "$name: *** Warning: lines should start with tabs, not spaces; ignoring line:" >&2
-       echo "$line" | sed 's/^.//' >&2;;
-      "+       "*)
-        $skipping || echo "$line" ;;
-      esac
-    done |
-    sed 's,^\+ ,,' > "$log_file" || break
-  else
-    $CVS $cvsopt diff -u ${ChangeLog-ChangeLog} |
-    while read line; do
-      case $line in
-      "--- "*) :;;
-      "-"*)
-       echo "$name: *** Warning: the following line in ChangeLog diff is suspicious:" >&2
-       echo "$line" | sed 's/^.//' >&2;;
-      "+ "*)
-       echo "$name: *** Warning: lines should start with tabs, not spaces; ignoring line:" >&2
-       echo "$line" | sed 's/^.//' >&2;;
-      "+") echo;;
-      "+       "*) echo "$line";;
-      esac
-    done |
-    sed -e 's,\+       ,,' -e '/./p' -e '/./d' -e '1d' -e '$d' > "$log_file" \
-    || break
-  fi
-# The sed script above removes "+TAB" from the beginning of a line, then
-# deletes the first and/or the last line, when they happen to be empty
-fi
-
-if grep '[^    ]' < "$log_file" > /dev/null; then :; else
-  echo "$name: empty commit message, aborting" >&2
-  break
-fi
-
-if grep '^$' < "$log_file" > /dev/null; then
-  echo "$name: *** Warning: blank lines should not appear within commit messages." >&2
-  echo "$name: *** They should be used to separate distinct commits." >&2
-fi
-
-${PAGER-more} "$log_file" || break
-
-sleep 1 # give the user some time for a ^C
-
-# Do not check for empty $log_file again, even though the user might have
-# zeroed it out.  If s/he did, it was probably intentional.
-
-if $commit; then
-  $CVS $cvsopt commit $commitopt -F $log_file ${1+"$@"} || break
-fi
-
-main_repeat=false
-done
-
-rm -f "$log_file"
-
-# if main_repeat was not set to `false', we failed
-$main_repeat && exit 1
-exit 0
diff --git a/examples/calc++/calc++-parser.yy b/examples/calc++/calc++-parser.yy
deleted file mode 100644 (file)
index 141d1da..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#line 7195 "../../doc/bison.texinfo"
-%skeleton "lalr1.cc"                          /*  -*- C++ -*- */
-%define "parser_class_name" "calcxx_parser"
-%defines
-%{
-# include <string>
-# include "calc++-driver.hh"
-%}
-#line 7211 "../../doc/bison.texinfo"
-// The parsing context.
-%parse-param { calcxx_driver& driver }
-%lex-param   { calcxx_driver& driver }
-#line 7224 "../../doc/bison.texinfo"
-%locations
-%initial-action
-{
-  // Initialize the initial location.
-  @$.begin.filename = @$.end.filename = &driver.file;
-};
-#line 7238 "../../doc/bison.texinfo"
-%debug
-%error-verbose
-#line 7248 "../../doc/bison.texinfo"
-// Symbols.
-%union
-{
-  int          ival;
-  std::string *sval;
-};
-#line 7265 "../../doc/bison.texinfo"
-%token        YYEOF          0 "end of file"
-%token        TOKEN_ASSIGN     ":="
-%token <sval> TOKEN_IDENTIFIER "identifier"
-%token <ival> TOKEN_NUMBER     "number"
-%type  <ival> exp              "expression"
-#line 7278 "../../doc/bison.texinfo"
-%printer    { debug_stream () << *$$; } "identifier"
-%destructor { delete $$; } "identifier"
-
-%printer    { debug_stream () << $$; } "number" "expression"
-#line 7289 "../../doc/bison.texinfo"
-%%
-%start unit;
-unit: assignments exp  { driver.result = $2; };
-
-assignments: assignments assignment {}
-           | /* Nothing. */         {};
-
-assignment: TOKEN_IDENTIFIER ":=" exp { driver.variables[*$1] = $3; };
-
-%left '+' '-';
-%left '*' '/';
-exp: exp '+' exp   { $$ = $1 + $3; }
-   | exp '-' exp   { $$ = $1 - $3; }
-   | exp '*' exp   { $$ = $1 * $3; }
-   | exp '/' exp   { $$ = $1 / $3; }
-   | TOKEN_IDENTIFIER  { $$ = driver.variables[*$1]; }
-   | TOKEN_NUMBER      { $$ = $1; };
-%%
-#line 7315 "../../doc/bison.texinfo"
-void
-yy::calcxx_parser::error (const yy::calcxx_parser::location_type& l,
-                          const std::string& m)
-{
-  driver.error (l, m);
-}
index 2218915a7e950611fc620c19476eb50188dc2e10..a22c9191ce5074849c05f9dc9fa0b5ef6d37c370 100644 (file)
@@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef _ABITSET_H
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef _ABITSET_H
-#define _ABITSET_H 
+#define _ABITSET_H
 
 #include "bitset.h"
 
 
 #include "bitset.h"
 
index 3bcb92cd628c797124aa004b790ebaf06f169d93..f06a4e2733f859d9976666c62b19b17c15e39875 100644 (file)
@@ -34,7 +34,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
    BITSET_TABLE:  Expandable table of pointers to arrays of bits
                  (variable size, less storage for large sparse sets).
                   Faster than BITSET_LIST for random access.
    BITSET_TABLE:  Expandable table of pointers to arrays of bits
                  (variable size, less storage for large sparse sets).
                   Faster than BITSET_LIST for random access.
-   BITSET_VARRAY: Variable array of bits (variable size, fast for 
+   BITSET_VARRAY: Variable array of bits (variable size, fast for
                   dense bitsets).
    BITSET_STATS:  Wrapper bitset for internal use only.  Used for gathering
                   statistics and/or better run-time checking.
                   dense bitsets).
    BITSET_STATS:  Wrapper bitset for internal use only.  Used for gathering
                   statistics and/or better run-time checking.
index 2ffebd502231c3ea0f74c525369dd0a24bf3d5a5..292f7894c268ab252a031878622a505e187308e7 100644 (file)
@@ -309,8 +309,8 @@ extern void bitset_dump (FILE *, bitset);
 */
 #define BITSET_FOR_EACH(ITER, BSET, INDEX, MIN)                                      \
   for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE;                       \
 */
 #define BITSET_FOR_EACH(ITER, BSET, INDEX, MIN)                                      \
   for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE;                       \
-       (ITER.num == BITSET_LIST_SIZE)                                        \
-       && (ITER.num = bitset_list (BSET, ITER.list,                          \
+       (ITER.num == BITSET_LIST_SIZE)                                        \
+       && (ITER.num = bitset_list (BSET, ITER.list,                          \
                                   BITSET_LIST_SIZE, &ITER.next));)           \
     for (ITER.i = 0;                                                         \
         ITER.i < ITER.num && ((INDEX) = ITER.list[ITER.i], 1);               \
                                   BITSET_LIST_SIZE, &ITER.next));)           \
     for (ITER.i = 0;                                                         \
         ITER.i < ITER.num && ((INDEX) = ITER.list[ITER.i], 1);               \
@@ -331,7 +331,7 @@ extern void bitset_dump (FILE *, bitset);
 */
 #define BITSET_FOR_EACH_REVERSE(ITER, BSET, INDEX, MIN)                              \
   for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE;                       \
 */
 #define BITSET_FOR_EACH_REVERSE(ITER, BSET, INDEX, MIN)                              \
   for (ITER.next = (MIN), ITER.num = BITSET_LIST_SIZE;                       \
-       (ITER.num == BITSET_LIST_SIZE)                                        \
+       (ITER.num == BITSET_LIST_SIZE)                                        \
        && (ITER.num = bitset_list_reverse (BSET, ITER.list,                  \
                                           BITSET_LIST_SIZE, &ITER.next));)   \
     for (ITER.i = 0;                                                         \
        && (ITER.num = bitset_list_reverse (BSET, ITER.list,                  \
                                           BITSET_LIST_SIZE, &ITER.next));)   \
     for (ITER.i = 0;                                                         \
@@ -386,4 +386,3 @@ extern void debug_bitset (bitset);
 extern void debug_bitset_stats (void);
 
 #endif /* _BITSET_H  */
 extern void debug_bitset_stats (void);
 
 #endif /* _BITSET_H  */
-
index 6cb971a8bf5ac2819458e9767ea821a339da4062..bc771584472240d0e5fe5cc7ac68b909ecc05198 100644 (file)
 
 
 /* Accessor macros.  */
 
 
 /* Accessor macros.  */
-#define BITSET_STATS_ALLOCS_INC(TYPE)                  \
+#define BITSET_STATS_ALLOCS_INC(TYPE)                  \
     bitset_stats_info->types[(TYPE)].allocs++
     bitset_stats_info->types[(TYPE)].allocs++
-#define BITSET_STATS_FREES_INC(BSET)                   \
+#define BITSET_STATS_FREES_INC(BSET)                   \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].frees++
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].frees++
-#define BITSET_STATS_SETS_INC(BSET)                    \
+#define BITSET_STATS_SETS_INC(BSET)                    \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].sets++
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].sets++
-#define BITSET_STATS_CACHE_SETS_INC(BSET)              \
+#define BITSET_STATS_CACHE_SETS_INC(BSET)              \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_sets++
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_sets++
-#define BITSET_STATS_RESETS_INC(BSET)                  \
+#define BITSET_STATS_RESETS_INC(BSET)                  \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].resets++
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].resets++
-#define BITSET_STATS_CACHE_RESETS_INC(BSET)            \
+#define BITSET_STATS_CACHE_RESETS_INC(BSET)            \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_resets++
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_resets++
-#define BITSET_STATS_TESTS_INC(BSET)                   \
+#define BITSET_STATS_TESTS_INC(BSET)                   \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].tests++
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].tests++
-#define BITSET_STATS_CACHE_TESTS_INC(BSET)             \
+#define BITSET_STATS_CACHE_TESTS_INC(BSET)             \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_tests++
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_tests++
-#define BITSET_STATS_LISTS_INC(BSET)                   \
+#define BITSET_STATS_LISTS_INC(BSET)                   \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].lists++
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].lists++
-#define BITSET_STATS_LIST_COUNTS_INC(BSET, I)          \
+#define BITSET_STATS_LIST_COUNTS_INC(BSET, I)          \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_counts[(I)]++
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_counts[(I)]++
-#define BITSET_STATS_LIST_SIZES_INC(BSET, I)           \
+#define BITSET_STATS_LIST_SIZES_INC(BSET, I)           \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_sizes[(I)]++
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_sizes[(I)]++
-#define BITSET_STATS_LIST_DENSITY_INC(BSET, I)                 \
+#define BITSET_STATS_LIST_DENSITY_INC(BSET, I)         \
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_density[(I)]++
 
 
     bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_density[(I)]++
 
 
index 2d1986092be126a7132bb783570f9a2da6e98fe2..dc602734a0169baeb2035693bd6beb4c4f7f2f26 100644 (file)
@@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef _EBITSET_H
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef _EBITSET_H
-#define _EBITSET_H 
+#define _EBITSET_H
 
 #include "bitset.h"
 
 
 #include "bitset.h"
 
index aeaa5b21fb425c6fecd8b7276e1990ea563bfac5..9d3d95734221df11505d9422fd9ad61f5014dffb 100644 (file)
@@ -41,7 +41,7 @@
 /* Number of words to use for each element.  The larger the value the
    greater the size of the cache and the shorter the time to find a given bit
    but the more memory wasted for sparse bitsets and the longer the time
 /* Number of words to use for each element.  The larger the value the
    greater the size of the cache and the shorter the time to find a given bit
    but the more memory wasted for sparse bitsets and the longer the time
-   to search for set bits. 
+   to search for set bits.
 
    The routines that dominate timing profiles are lbitset_elt_find
    and lbitset_elt_link, especially when accessing the bits randomly.  */
 
    The routines that dominate timing profiles are lbitset_elt_find
    and lbitset_elt_link, especially when accessing the bits randomly.  */
@@ -888,18 +888,18 @@ lbitset_unused_clear (bitset dst)
 
   n_bits = BITSET_SIZE_ (dst);
   last_bit = n_bits % LBITSET_ELT_BITS;
 
   n_bits = BITSET_SIZE_ (dst);
   last_bit = n_bits % LBITSET_ELT_BITS;
-  
+
   if (last_bit)
     {
       lbitset_elt *elt;
       bitset_windex windex;
       bitset_word *srcp;
   if (last_bit)
     {
       lbitset_elt *elt;
       bitset_windex windex;
       bitset_word *srcp;
-      
+
       elt = LBITSET_TAIL (dst);
       srcp = elt->words;
       windex = n_bits / BITSET_WORD_BITS;
       elt = LBITSET_TAIL (dst);
       srcp = elt->words;
       windex = n_bits / BITSET_WORD_BITS;
-  
-      srcp[windex - elt->index] &= ((bitset_word) 1 << last_bit) - 1;    
+
+      srcp[windex - elt->index] &= ((bitset_word) 1 << last_bit) - 1;
       windex++;
 
       for (; (windex - elt->index) < LBITSET_ELT_WORDS; windex++)
       windex++;
 
       for (; (windex - elt->index) < LBITSET_ELT_WORDS; windex++)
index 28dce39b5642aaf054564fbcd8bc44480a8d19b0..aaad8345ef793e16c420047011778da28f75403d 100644 (file)
@@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef _LBITSET_H
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef _LBITSET_H
-#define _LBITSET_H 
+#define _LBITSET_H
 
 #include "bitset.h"
 
 
 #include "bitset.h"
 
index 10b62f2c30b9d7135233356b287fe031b0f68ed3..7f8e44f2a1a351280a8d27c320eb4f63ceb6d9af 100644 (file)
@@ -44,9 +44,7 @@
 # define STDOUT_FILENO 1
 #endif
 #if ! HAVE_DUP2 && ! defined dup2
 # define STDOUT_FILENO 1
 #endif
 #if ! HAVE_DUP2 && ! defined dup2
-# if HAVE_FCNTL_H
-#  include <fcntl.h>
-# endif
+# include <fcntl.h>
 # define dup2(f, t) (close (t), fcntl (f, F_DUPFD, t))
 #endif
 
 # define dup2(f, t) (close (t), fcntl (f, F_DUPFD, t))
 #endif
 
@@ -109,11 +107,13 @@ create_subpipe (char const * const *argv, int fd[2])
       || pipe (pipe_fd) != 0
       || (fd[1] = fd_safer (pipe_fd[0])) < 0
       || (child_fd[1] = fd_safer (pipe_fd[1])) < 0)
       || pipe (pipe_fd) != 0
       || (fd[1] = fd_safer (pipe_fd[0])) < 0
       || (child_fd[1] = fd_safer (pipe_fd[1])) < 0)
-    error (EXIT_FAILURE, errno, "pipe");
+    error (EXIT_FAILURE, errno,
+          "pipe");
 
   pid = vfork ();
   if (pid < 0)
 
   pid = vfork ();
   if (pid < 0)
-    error (EXIT_FAILURE, errno, "fork");
+    error (EXIT_FAILURE, errno,
+          "fork");
 
   if (! pid)
     {
 
   if (! pid)
     {
@@ -148,7 +148,8 @@ reap_subpipe (pid_t pid, char const *program)
 #if HAVE_WAITPID || defined waitpid
   int wstatus;
   if (waitpid (pid, &wstatus, 0) < 0)
 #if HAVE_WAITPID || defined waitpid
   int wstatus;
   if (waitpid (pid, &wstatus, 0) < 0)
-    error (EXIT_FAILURE, errno, "waitpid");
+    error (EXIT_FAILURE, errno,
+          "waitpid");
   else
     {
       int status = WIFEXITED (wstatus) ? WEXITSTATUS (wstatus) : -1;
   else
     {
       int status = WIFEXITED (wstatus) ? WEXITSTATUS (wstatus) : -1;
index 6de93d50807f3c033fd79e2c07ee40361fd62492..d647687fea7b018b2845a5fb7bc1a3a0e7bcb6f8 100644 (file)
@@ -31,7 +31,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
 /* This source file is taken from the GCC source code, with slight
    modifications that are under control of the IN_GCC preprocessor
    variable.  The !IN_GCC part of this file is specific to Bison.  */
 /* This source file is taken from the GCC source code, with slight
    modifications that are under control of the IN_GCC preprocessor
    variable.  The !IN_GCC part of this file is specific to Bison.  */
-   
+
 # include "../src/system.h"
 # if HAVE_SYS_TIME_H
 #  include <sys/time.h>
 # include "../src/system.h"
 # if HAVE_SYS_TIME_H
 #  include <sys/time.h>
index 752086df39805189d44c5d9c3f2b2c7c910c5b26..bab011c478a7c703f7f70bfb593c1e54150b6fb4 100644 (file)
@@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef _VBITSET_H
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 #ifndef _VBITSET_H
-#define _VBITSET_H 
+#define _VBITSET_H
 
 #include "bitset.h"
 
 
 #include "bitset.h"
 
index 7cf025b18ca7db5dda1d5a557cf8c5f0e3c9ebed..dbf909c9f12da85c0f104026626a0ac08ef85571 100644 (file)
@@ -1,7 +1,7 @@
 # -*- Autoconf -*-
 # Checks required to run `subpipe'.
 #
 # -*- Autoconf -*-
 # Checks required to run `subpipe'.
 #
-# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -23,7 +23,6 @@
 AC_DEFUN([BISON_PREREQ_SUBPIPE],
 [
  AC_TYPE_PID_T
 AC_DEFUN([BISON_PREREQ_SUBPIPE],
 [
  AC_TYPE_PID_T
- AC_CHECK_HEADERS([fcntl.h])
  AC_HEADER_SYS_WAIT
  AC_CHECK_FUNCS(dup2 waitpid)
  AC_FUNC_FORK
  AC_HEADER_SYS_WAIT
  AC_CHECK_FUNCS(dup2 waitpid)
  AC_FUNC_FORK
index 3c9e5695b848b443017389f190f0be971a988c6d..c4bc05c66fd93f84889dcb3c6d1f0b40de7eb77d 100644 (file)
@@ -15,9 +15,7 @@
 ## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 ## 02110-1301  USA
 
 ## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 ## 02110-1301  USA
 
-DEFS = @DEFS@ \
-  -DPKGDATADIR=\"$(pkgdatadir)\" \
-  -DLOCALEDIR=\"$(datadir)/locale\"
+DEFS += -DPKGDATADIR=\"$(pkgdatadir)\" -DLOCALEDIR=\"$(datadir)/locale\"
 
 AM_CFLAGS = $(WARNING_CFLAGS) $(WERROR_CFLAGS)
 AM_CPPFLAGS = -I$(top_srcdir)/lib -I../lib
 
 AM_CFLAGS = $(WARNING_CFLAGS) $(WERROR_CFLAGS)
 AM_CPPFLAGS = -I$(top_srcdir)/lib -I../lib
@@ -33,7 +31,7 @@ bin_PROGRAMS = bison
 bin_SCRIPTS = $(YACC_SCRIPT)
 EXTRA_SCRIPTS = yacc
 
 bin_SCRIPTS = $(YACC_SCRIPT)
 EXTRA_SCRIPTS = yacc
 
-bison_SOURCES =                                  \
+bison_SOURCES =                                          \
        LR0.c LR0.h                               \
        assoc.c assoc.h                           \
        closure.c closure.h                       \
        LR0.c LR0.h                               \
        assoc.c assoc.h                           \
        closure.c closure.h                       \
@@ -56,7 +54,7 @@ bison_SOURCES =                                 \
        reduce.c reduce.h                         \
        relation.c relation.h                     \
        scan-gram.l                               \
        reduce.c reduce.h                         \
        relation.c relation.h                     \
        scan-gram.l                               \
-       scan-skel.l                               \
+       scan-skel.h scan-skel.l                   \
        state.c state.h                           \
        symlist.c symlist.h                       \
        symtab.c symtab.h                         \
        state.c state.h                           \
        symlist.c symlist.h                       \
        symtab.c symtab.h                         \
@@ -77,3 +75,34 @@ yacc:
 
 echo:
        echo $(bison_SOURCES) $(noinst_HEADERS)
 
 echo:
        echo $(bison_SOURCES) $(noinst_HEADERS)
+
+# The following rule is not designed to be portable,
+# and relies on tools that not everyone has.
+
+# Most functions in src/*.c should have static scope.
+# Any that don't must be marked with `extern', but `main'
+# and `usage' are exceptions.  They're always extern, but
+# don't need to be marked.
+#
+# The second nm|grep checks for file-scope variables with `extern' scope.
+sc_tight_scope: $(all_programs)
+       @t=exceptions-$$$$;                                             \
+       trap 's=$$?; rm -f $$t; exit $$s' 0 1 2 13 15;                  \
+       ( printf '^main$$\n^usage$$\n';                                 \
+         grep -h -A1 '^extern .*[^;]$$' $(SOURCES)                     \
+           | grep -vE '^(extern |--)' |sed 's/^/^/;s/ .*/$$/' ) > $$t; \
+       if nm -e *.$(OBJEXT)                                            \
+           | sed -n 's/.* T //p'                                       \
+           | grep -Ev -f $$t; then                                     \
+         echo 'the above functions should have static scope' 1>&2;     \
+         exit 1;                                                       \
+       fi;                                                             \
+       ( printf '^program_name$$\n';                                   \
+         sed -n 's/^extern .*[* ]\([a-zA-Z_][a-zA-Z_0-9]*\);$$/^\1$$/p' \
+           $$(ls $(SOURCES) | grep '\.h$$') /dev/null) > $$t;          \
+       if nm -e *.$(OBJEXT)                                            \
+           | sed -n 's/.* [BD] //p'                                    \
+           | grep -Ev -f $$t; then                                     \
+         echo 'the above variables should have static scope' 1>&2;     \
+         exit 1;                                                       \
+       fi
index 5a0b2ea46d0574a8825b68b62bf7ed9cbe9cb5cd..00841dd379d125983190fb7f998d0a512a445004 100644 (file)
@@ -66,9 +66,9 @@ static char *full_base_name = NULL;
 char *short_base_name = NULL;
 
 /* C source file extension (the parser source).  */
 char *short_base_name = NULL;
 
 /* C source file extension (the parser source).  */
-const char *src_extension = NULL;
+static char const *src_extension = NULL;
 /* Header file extension (if option ``-d'' is specified).  */
 /* Header file extension (if option ``-d'' is specified).  */
-const char *header_extension = NULL;
+static char const *header_extension = NULL;
 \f
 /*-----------------------------------------------------------------.
 | Return a newly allocated string composed of the concatenation of |
 \f
 /*-----------------------------------------------------------------.
 | Return a newly allocated string composed of the concatenation of |
index 1a0432e7fefbd65a9fc0db9fa5f2ab87ae08bdf5..0170f8e34fd4e4516043ee0b13f4e8887d38f5b7 100644 (file)
@@ -285,7 +285,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
 `----------------------*/
 
 /* Shorts options.  */
 `----------------------*/
 
 /* Shorts options.  */
-const char *short_options = "yvegdhr:ltknVo:b:p:S:T::";
+static char const short_options[] = "yvegdhr:ltknVo:b:p:S:T::";
 
 /* Values for long options that do not have single-letter equivalents.  */
 enum
 
 /* Values for long options that do not have single-letter equivalents.  */
 enum
index ec4bf69532f5f757483c3ee433d0c7a5209fcdb4..2e02a76ae9a99fb0781999b48108d1079786c913 100644 (file)
@@ -1,5 +1,5 @@
 /* Parse command line arguments for bison.
 /* Parse command line arguments for bison.
-   Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003, 2004
+   Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003, 2004, 2005
    Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
    Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 # define GETARGS_H_
 
 /* flags set by % directives */
 # define GETARGS_H_
 
 /* flags set by % directives */
-extern const char *skeleton;           /* for -S */
-extern const char *include;            /* for -I */
+
+/* for -S */
+extern char const *skeleton;
+
+/* for -I */
+extern char const *include;
 
 extern bool debug_flag;                        /* for -t */
 extern bool defines_flag;              /* for -d */
 
 extern bool debug_flag;                        /* for -t */
 extern bool defines_flag;              /* for -d */
index e394478dfc37b460230aac25210ae05877d65f28..4636f4e14c11d286c9ee6a9f588b09a156aa286e 100644 (file)
@@ -269,7 +269,7 @@ grammar_dump (FILE *out, const char *title)
        rule *rule_i = &rules[i];
        item_number *rp = NULL;
        unsigned int rhs_itemno = rule_i->rhs - ritem;
        rule *rule_i = &rules[i];
        item_number *rp = NULL;
        unsigned int rhs_itemno = rule_i->rhs - ritem;
-       unsigned int rhs_count = 0;
+       unsigned int rhs_count = 0;
        /* Find the last RHS index in ritems. */
        for (rp = rule_i->rhs; *rp >= 0; ++rp)
          ++rhs_count;
        /* Find the last RHS index in ritems. */
        for (rp = rule_i->rhs; *rp >= 0; ++rp)
          ++rhs_count;
index b2f855996b372410d0af173e35d47a484b3a2675..ba594b47f1303a2f7784f2098c26e6d8defc6f99 100644 (file)
@@ -56,9 +56,9 @@ main (int argc, char *argv[])
 {
   program_name = argv[0];
   setlocale (LC_ALL, "");
 {
   program_name = argv[0];
   setlocale (LC_ALL, "");
-  bindtextdomain (PACKAGE, LOCALEDIR);
-  bindtextdomain ("bison-runtime", LOCALEDIR);
-  textdomain (PACKAGE);
+  (void) bindtextdomain (PACKAGE, LOCALEDIR);
+  (void) bindtextdomain ("bison-runtime", LOCALEDIR);
+  (void) textdomain (PACKAGE);
 
   uniqstrs_new ();
 
 
   uniqstrs_new ();
 
index 876f1c8969a085747fd811fa48399c0e12778d6b..6e7bd9bbd9e12995636250ec8b6dcc5b33081827 100644 (file)
@@ -41,7 +41,7 @@ struct obstack muscle_obstack;
 /* Initial capacity of muscles hash table.  */
 #define HT_INITIAL_CAPACITY 257
 
 /* Initial capacity of muscles hash table.  */
 #define HT_INITIAL_CAPACITY 257
 
-struct hash_table *muscle_table = NULL;
+static struct hash_table *muscle_table = NULL;
 
 static bool
 hash_compare_muscles (void const *x, void const *y)
 
 static bool
 hash_compare_muscles (void const *x, void const *y)
index ebd1c3bbc150052f5f0b0993b8692eba06c00c4c..9e8ac24f246ec9550402c4e1b5e667542bcedd9e 100644 (file)
@@ -40,14 +40,14 @@ extern struct obstack muscle_obstack;
 
 #define MUSCLE_INSERT_INT(Key, Value)                          \
 {                                                              \
 
 #define MUSCLE_INSERT_INT(Key, Value)                          \
 {                                                              \
-  obstack_fgrow1 (&muscle_obstack, "%d", Value);               \
+  obstack_fgrow1 (&muscle_obstack, "%d", Value);               \
   obstack_1grow (&muscle_obstack, 0);                          \
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
 
 #define MUSCLE_INSERT_LONG_INT(Key, Value)                     \
 {                                                              \
   obstack_1grow (&muscle_obstack, 0);                          \
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
 
 #define MUSCLE_INSERT_LONG_INT(Key, Value)                     \
 {                                                              \
-  obstack_fgrow1 (&muscle_obstack, "%ld", Value);              \
+  obstack_fgrow1 (&muscle_obstack, "%ld", Value);              \
   obstack_1grow (&muscle_obstack, 0);                          \
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
   obstack_1grow (&muscle_obstack, 0);                          \
   muscle_insert (Key, obstack_finish (&muscle_obstack));       \
 }
index cd5846bcf8229734f0f9ff5e5f14da528db5d773..9bc806f14e4cc529e5e33c96cc20b6acac104d13 100644 (file)
 #include "muscle_tab.h"
 #include "output.h"
 #include "reader.h"
 #include "muscle_tab.h"
 #include "output.h"
 #include "reader.h"
+#include "scan-skel.h"
 #include "symtab.h"
 #include "tables.h"
 
 #include "symtab.h"
 #include "tables.h"
 
-/* From src/scan-skel.l. */
-void scan_skel (FILE *);
-
 
 static struct obstack format_obstack;
 
 
 static struct obstack format_obstack;
 
@@ -559,7 +557,8 @@ output_skeleton (void)
 
   out = fdopen (filter_fd[0], "w");
   if (! out)
 
   out = fdopen (filter_fd[0], "w");
   if (! out)
-    error (EXIT_FAILURE, get_errno (), "fdopen");
+    error (EXIT_FAILURE, get_errno (),
+          "fdopen");
 
   /* Output the definitions of all the muscles.  */
   fputs ("m4_init()\n", out);
 
   /* Output the definitions of all the muscles.  */
   fputs ("m4_init()\n", out);
@@ -580,7 +579,8 @@ output_skeleton (void)
   timevar_push (TV_M4);
   in = fdopen (filter_fd[1], "r");
   if (! in)
   timevar_push (TV_M4);
   in = fdopen (filter_fd[1], "r");
   if (! in)
-    error (EXIT_FAILURE, get_errno (), "fdopen");
+    error (EXIT_FAILURE, get_errno (),
+          "fdopen");
   scan_skel (in);
   xfclose (in);
   reap_subpipe (pid, m4);
   scan_skel (in);
   xfclose (in);
   reap_subpipe (pid, m4);
index 735a3fd730dad60424699b16a94281b487881683..a638cb06b19a6d3082f3af486a297c4373eb0290 100644 (file)
@@ -48,12 +48,12 @@ static void gram_error (location const *, char const *);
 
 static void add_param (char const *, char *, location);
 
 
 static void add_param (char const *, char *, location);
 
-symbol_class current_class = unknown_sym;
-uniqstr current_type = 0;
+static symbol_class current_class = unknown_sym;
+static uniqstr current_type = 0;
 symbol *current_lhs;
 location current_lhs_location;
 assoc current_assoc;
 symbol *current_lhs;
 location current_lhs_location;
 assoc current_assoc;
-int current_prec = 0;
+static int current_prec = 0;
 %}
 
 %debug
 %}
 
 %debug
@@ -206,7 +206,7 @@ declaration:
 | "%defines"                               { defines_flag = true; }
 | "%error-verbose"                         { error_verbose = true; }
 | "%expect" INT                            { expected_sr_conflicts = $2; }
 | "%defines"                               { defines_flag = true; }
 | "%error-verbose"                         { error_verbose = true; }
 | "%expect" INT                            { expected_sr_conflicts = $2; }
-| "%expect-rr" INT                        { expected_rr_conflicts = $2; }
+| "%expect-rr" INT                        { expected_rr_conflicts = $2; }
 | "%file-prefix" "=" string_content        { spec_file_prefix = $3; }
 | "%glr-parser"
   {
 | "%file-prefix" "=" string_content        { spec_file_prefix = $3; }
 | "%glr-parser"
   {
@@ -221,7 +221,7 @@ declaration:
 | "%locations"                             { locations_flag = true; }
 | "%name-prefix" "=" string_content        { spec_name_prefix = $3; }
 | "%no-lines"                              { no_lines_flag = true; }
 | "%locations"                             { locations_flag = true; }
 | "%name-prefix" "=" string_content        { spec_name_prefix = $3; }
 | "%no-lines"                              { no_lines_flag = true; }
-| "%nondeterministic-parser"              { nondeterministic_parser = true; }
+| "%nondeterministic-parser"              { nondeterministic_parser = true; }
 | "%output" "=" string_content             { spec_outfile = $3; }
 | "%parse-param {...}"                    { add_param ("parse_param", $1, @1); }
 | "%pure-parser"                           { pure_parser = true; }
 | "%output" "=" string_content             { spec_outfile = $3; }
 | "%parse-param {...}"                    { add_param ("parse_param", $1, @1); }
 | "%pure-parser"                           { pure_parser = true; }
index 187d2eb8c89a1c0f73136fe7e4133e45cfff9023..dc0f8306c70b46f411e70f1a1f8cdbebcf03abfb 100644 (file)
@@ -1,6 +1,6 @@
 /* Output a VCG description on generated parser, for Bison,
 
 /* Output a VCG description on generated parser, for Bison,
 
-   Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -21,7 +21,6 @@
 
 #include "system.h"
 
 
 #include "system.h"
 
-#include <obstack.h>
 #include <quotearg.h>
 
 #include "LR0.h"
 #include <quotearg.h>
 
 #include "LR0.h"
index 561b741976fccafc8eced7b213604624bae71cb0..6b247b7f2d845a764faadfc5ea3adefd79c51d97 100644 (file)
@@ -159,7 +159,7 @@ free_merger_functions (void)
 `-------------------------------------------------------------------*/
 
 /* The (currently) last symbol of GRAMMAR. */
 `-------------------------------------------------------------------*/
 
 /* The (currently) last symbol of GRAMMAR. */
-symbol_list *grammar_end = NULL;
+static symbol_list *grammar_end = NULL;
 
 /* Append SYM to the grammar.  */
 void
 
 /* Append SYM to the grammar.  */
 void
@@ -179,7 +179,7 @@ grammar_symbol_append (symbol *sym, location loc)
    CURRENT_RULE points to the first LHS of the current rule, while
    PREVIOUS_RULE_END points to the *end* of the previous rule (NULL).  */
 symbol_list *current_rule = NULL;
    CURRENT_RULE points to the first LHS of the current rule, while
    PREVIOUS_RULE_END points to the *end* of the previous rule (NULL).  */
 symbol_list *current_rule = NULL;
-symbol_list *previous_rule_end = NULL;
+static symbol_list *previous_rule_end = NULL;
 
 
 /*----------------------------------------------.
 
 
 /*----------------------------------------------.
index d7d53015e6fa0e67e5fd0bf9324cc5c7e937a0ac..3b746e3191a02bf678952b85217f3fd885b5ea5b 100644 (file)
@@ -43,6 +43,11 @@ void scanner_initialize (void);
 void scanner_free (void);
 void scanner_last_string_free (void);
 
 void scanner_free (void);
 void scanner_last_string_free (void);
 
+/* These are declared by the scanner, but not used.  We put them here
+   to pacify "make syntax-check".  */
+extern FILE *gram_out;
+extern int gram_lineno;
+
 # define YY_DECL int gram_lex (YYSTYPE *val, location *loc)
 YY_DECL;
 
 # define YY_DECL int gram_lex (YYSTYPE *val, location *loc)
 YY_DECL;
 
diff --git a/src/scan-skel.h b/src/scan-skel.h
new file mode 100644 (file)
index 0000000..c5b19ea
--- /dev/null
@@ -0,0 +1,41 @@
+/* Scan Bison Skeletons.
+
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+   This file is part of Bison, the GNU Compiler Compiler.
+
+   Bison is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   Bison is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with Bison; see the file COPYING.  If not, write to
+   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+void scan_skel (FILE *);
+
+/* Pacify "make syntax-check".  */
+extern FILE *skel_in;
+extern FILE *skel_out;
+extern int skel__flex_debug;
+extern int skel_lineno;
+
+/* Pacify "gcc -Wmissing-prototypes" when flex 2.5.31 is used.  */
+int skel_get_lineno (void);
+FILE *skel_get_in (void);
+FILE *skel_get_out (void);
+int skel_get_leng (void);
+char *skel_get_text (void);
+void skel_set_lineno (int);
+void skel_set_in (FILE *);
+void skel_set_out (FILE *);
+int skel_get_debug (void);
+void skel_set_debug (int);
+int skel_lex_destroy (void);
index 951a9fda5b3273b5583c51e24bf05a0aa4fc5299..c08c330ab0ee36d260a42ce1afdb224145384fa6 100644 (file)
 #include "complain.h"
 #include "getargs.h"
 #include "files.h"
 #include "complain.h"
 #include "getargs.h"
 #include "files.h"
-
-int skel_lex (void);
-
-/* Pacify "gcc -Wmissing-prototypes" when flex 2.5.31 is used.  */
-int skel_get_lineno (void);
-FILE *skel_get_in (void);
-FILE *skel_get_out (void);
-int skel_get_leng (void);
-char *skel_get_text (void);
-void skel_set_lineno (int);
-void skel_set_in (FILE *);
-void skel_set_out (FILE *);
-int skel_get_debug (void);
-void skel_set_debug (int);
-int skel_lex_destroy (void);
+#include "scan-skel.h"
 
 #define QPUTS(String) \
    fputs (quotearg_style (c_quoting_style, (String)), yyout)
 
 #define QPUTS(String) \
    fputs (quotearg_style (c_quoting_style, (String)), yyout)
@@ -110,8 +96,6 @@ int skel_lex_destroy (void);
 | Scan a Bison skeleton.  |
 `------------------------*/
 
 | Scan a Bison skeleton.  |
 `------------------------*/
 
-void scan_skel (FILE *);
-
 void
 scan_skel (FILE *in)
 {
 void
 scan_skel (FILE *in)
 {
index 1cd7deef362619adeee53a7d00e716c30f2238cd..755a75cb39cf55323179f08ebb464dcbef3fddaa 100644 (file)
@@ -130,9 +130,9 @@ typedef size_t uintptr_t;
 | Obstacks.  |
 `-----------*/
 
 | Obstacks.  |
 `-----------*/
 
-# define obstack_chunk_alloc xmalloc
-# define obstack_chunk_free  free
-# include <obstack.h>
+#define obstack_chunk_alloc xmalloc
+#define obstack_chunk_free  free
+#include <obstack.h>
 
 #define obstack_sgrow(Obs, Str) \
   obstack_grow (Obs, Str, strlen (Str))
 
 #define obstack_sgrow(Obs, Str) \
   obstack_grow (Obs, Str, strlen (Str))
index 3e534beadd2fa2d4b00b1f0da3b36cb664b7be97..4e99f4add99911adfa9978401f5d806ce0d2c3cf 100644 (file)
@@ -173,7 +173,7 @@ table_grow (int desired)
 
 /*-------------------------------------------------------------------.
 | For GLR parsers, for each conflicted token in S, as indicated      |
 
 /*-------------------------------------------------------------------.
 | For GLR parsers, for each conflicted token in S, as indicated      |
-| by non-zero entries in CONFLROW, create a list of possible        |
+| by non-zero entries in CONFLROW, create a list of possible        |
 | reductions that are alternatives to the shift or reduction        |
 | currently recorded for that token in S.  Store the alternative     |
 | reductions followed by a 0 in CONFLICT_LIST, updating                     |
 | reductions that are alternatives to the shift or reduction        |
 | currently recorded for that token in S.  Store the alternative     |
 | reductions followed by a 0 in CONFLICT_LIST, updating                     |
index 4a345d48c69b5a283efd727e795de3c27dfda5c2..f082f338b27979cf0654dea0a4c4413867020c03 100644 (file)
@@ -1,6 +1,6 @@
 /* Keep a unique copy of strings.
 
 /* Keep a unique copy of strings.
 
-   Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -63,7 +63,8 @@ uniqstr_assert (char const *str)
 {
   if (!hash_lookup (uniqstrs_table, str))
     {
 {
   if (!hash_lookup (uniqstrs_table, str))
     {
-      error (0, 0, "not a uniqstr: %s", quotearg (str));
+      error (0, 0,
+            "not a uniqstr: %s", quotearg (str));
       abort ();
     }
 }
       abort ();
     }
 }
index b680b3283912152d1e464f8d863331a022789d51..fa5133888b7e089e12a0f2652bed62bfaff7604c 100644 (file)
--- a/src/vcg.c
+++ b/src/vcg.c
@@ -203,7 +203,7 @@ new_edge (edge *e)
 }
 
 /*----------------------------------------------.
 }
 
 /*----------------------------------------------.
-| Get functions.                                       |
+| Get functions.                               |
 | Return string corresponding to an enum value. |
 `----------------------------------------------*/
 
 | Return string corresponding to an enum value. |
 `----------------------------------------------*/
 
@@ -374,7 +374,7 @@ get_arrowstyle_str (enum arrowstyle arrowstyle)
 }
 
 /*------------------------------.
 }
 
 /*------------------------------.
-| Add functions.                       |
+| Add functions.               |
 | Edge and nodes into a graph.  |
 `------------------------------*/
 
 | Edge and nodes into a graph.  |
 `------------------------------*/
 
index d20a327d718d817795adcb35f693b486e1f2627e..78e24b5c795e2ca8aa4b62ab6588c6426640d4ed 100644 (file)
 # define G_TEXTMODE            centered
 # define G_SHAPE               box
 
 # define G_TEXTMODE            centered
 # define G_SHAPE               box
 
-# define G_VERTICAL_ORDER      0       /* Unspecified for subgraphs. */
-# define G_HORIZONTAL_ORDER    0       /* Unspecified for subgraphs. */
+# define G_VERTICAL_ORDER      0       /* Unspecified for subgraphs.  */
+# define G_HORIZONTAL_ORDER    0       /* Unspecified for subgraphs.  */
 
 
-# define G_XMAX                        90      /* Not output */
-# define G_YMAX                        90      /* Not output */
+# define G_XMAX                        90      /* Not output */
+# define G_YMAX                        90      /* Not output */
 
 # define G_XBASE               5
 # define G_YBASE               5
 
 # define G_XBASE               5
 # define G_YBASE               5
@@ -65,9 +65,9 @@
 # define G_YRASTER             1
 # define G_XLRASTER            1
 
 # define G_YRASTER             1
 # define G_XLRASTER            1
 
-# define G_HIDDEN              (-1)    /* No default value. */
+# define G_HIDDEN              (-1)    /* No default value.  */
 
 
-# define G_CLASSNAME           NULL    /* No class name association */
+# define G_CLASSNAME           NULL    /* No class name association */
 # define G_INFONAME            NULL
 # define G_COLORENTRY          NULL
 
 # define G_INFONAME            NULL
 # define G_COLORENTRY          NULL
 
index 1d9b619e2ad5ee9ef651691c73abcdea1b2f3d19..b26a8653812d01a1a62ebffcdfa4860f0f09d702 100644 (file)
@@ -32,11 +32,11 @@ MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE)
 $(srcdir)/package.m4: $(top_srcdir)/configure.ac
        {                                       \
          echo '# Signature of the current package.'; \
 $(srcdir)/package.m4: $(top_srcdir)/configure.ac
        {                                       \
          echo '# Signature of the current package.'; \
-         echo 'm4_define([AT_PACKAGE_NAME],      [@PACKAGE_NAME@])'; \
-         echo 'm4_define([AT_PACKAGE_TARNAME],   [@PACKAGE_TARNAME@])'; \
-         echo 'm4_define([AT_PACKAGE_VERSION],   [@PACKAGE_VERSION@])'; \
-         echo 'm4_define([AT_PACKAGE_STRING],    [@PACKAGE_STRING@])'; \
-         echo 'm4_define([AT_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])'; \
+         echo 'm4_define([AT_PACKAGE_NAME],      [$(PACKAGE_NAME)])'; \
+         echo 'm4_define([AT_PACKAGE_TARNAME],   [$(PACKAGE_TARNAME)])'; \
+         echo 'm4_define([AT_PACKAGE_VERSION],   [$(PACKAGE_VERSION)])'; \
+         echo 'm4_define([AT_PACKAGE_STRING],    [$(PACKAGE_STRING)])'; \
+         echo 'm4_define([AT_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])'; \
        } >$(srcdir)/package.m4
 
 ## ------------ ##
        } >$(srcdir)/package.m4
 
 ## ------------ ##
index e551ad019a54d5e67cc1a8ffb4ad756df45e96ef..818c8f82bf08026247b30dcdcbbee62691d64c91 100644 (file)
@@ -83,7 +83,7 @@ prog :
 stmt : expr ';'  $2    { $$ = ]$[1; }
      | decl      $3
      | error ';'       { static char error_msg[] = "<error>"; $$ = error_msg; }
 stmt : expr ';'  $2    { $$ = ]$[1; }
      | decl      $3
      | error ';'       { static char error_msg[] = "<error>"; $$ = error_msg; }
-     | '@'             { YYACCEPT; }
+     | '@'             { YYACCEPT; }
      ;
 
 expr : ID
      ;
 
 expr : ID
@@ -145,7 +145,7 @@ yylex (LEX_PARAMETERS)
          break;
        case ' ': case '\f':
          colNum += 1;
          break;
        case ' ': case '\f':
          colNum += 1;
-         break;
+         break;
        case '\n':
          lineNum += 1;
          colNum = 0;
        case '\n':
          lineNum += 1;
          colNum = 0;
index 3568f4dcd89b9327a65786590760e8b54119460a..27ba3123511da28a85a7c12f818cd5585c199569 100644 (file)
@@ -408,7 +408,7 @@ AT_DATA([[input.y]],
         HBEGPAR HENDPAR
         HEQR HNER
         HADD HSUB HMUL HDIV HINTDIV HEXP
         HBEGPAR HENDPAR
         HEQR HNER
         HADD HSUB HMUL HDIV HINTDIV HEXP
-       HDOTDOTDOT
+       HDOTDOTDOT
 
 %token <ident> HIDENTIFIER
 %token <ival> HBOOLEANKONST HINTEGERKONST HCHARACTERKONST
 
 %token <ident> HIDENTIFIER
 %token <ival> HBOOLEANKONST HINTEGERKONST HCHARACTERKONST
@@ -450,7 +450,7 @@ AT_DATA([[input.y]],
 MAIN_MODULE     :       {        categ=CLOCAL; mout(MBLOCK);
                                   beginBlock(KBLOKK);separat_comp=FALSE;}
                        MODULS  { endBlock(NULL,CCNO);   mout(MENDBLOCK);}
 MAIN_MODULE     :       {        categ=CLOCAL; mout(MBLOCK);
                                   beginBlock(KBLOKK);separat_comp=FALSE;}
                        MODULS  { endBlock(NULL,CCNO);   mout(MENDBLOCK);}
-               |       error HSTATEMENTSEPARATOR MBEE_DECLSTMS
+               |       error HSTATEMENTSEPARATOR MBEE_DECLSTMS
                ;
 EXT_DECLARATION        :       HEXTERNAL
                        MBEE_TYPE
                ;
 EXT_DECLARATION        :       HEXTERNAL
                        MBEE_TYPE
@@ -548,7 +548,7 @@ MBEE_ELSE_PART  :       /*EMPT*/
 /*             |       HELSE
                        HIF
                         EXPRESSION
 /*             |       HELSE
                        HIF
                         EXPRESSION
-                        HTHEN   {                mout(MELSE);
+                        HTHEN   {                mout(MELSE);
                                                  mout(MIF);
                                   OBSBLOCK();}
                         BLOCK   { MBEEENDBLOCK();}
                                                  mout(MIF);
                                   OBSBLOCK();}
                         BLOCK   { MBEEENDBLOCK();}
@@ -588,7 +588,7 @@ WHEN_CLAUSE_LIST:       HWHEN
                         HIDENTIFIER
                         HDO    {   beginBlock(KCON);  mout(MIDENTIFIER);
                                    OBSBLOCK();     moutId($2);
                         HIDENTIFIER
                         HDO    {   beginBlock(KCON);  mout(MIDENTIFIER);
                                    OBSBLOCK();     moutId($2);
-                                                  mout(MWHEN);}
+                                                  mout(MWHEN);}
                         BLOCK  {   endBlock(NULL,CCNO);
                               MBEEENDBLOCK(); mout(MENDWHEN);}
                 |       WHEN_CLAUSE_LIST
                         BLOCK  {   endBlock(NULL,CCNO);
                               MBEEENDBLOCK(); mout(MENDWHEN);}
                 |       WHEN_CLAUSE_LIST
@@ -596,7 +596,7 @@ WHEN_CLAUSE_LIST:       HWHEN
                         HIDENTIFIER
                         HDO    { beginBlock(KCON);        mout(MIDENTIFIER);
                                  OBSBLOCK();       moutId($3);
                         HIDENTIFIER
                         HDO    { beginBlock(KCON);        mout(MIDENTIFIER);
                                  OBSBLOCK();       moutId($3);
-                                                  mout(MWHEN);}
+                                                  mout(MWHEN);}
                         BLOCK  { endBlock(NULL,CCNO);
                               MBEEENDBLOCK();    mout(MENDWHEN);}
                 ;
                         BLOCK  { endBlock(NULL,CCNO);
                               MBEEENDBLOCK();    mout(MENDWHEN);}
                 ;
@@ -645,8 +645,8 @@ MODULSTATEMENT  :       HWHILE
                         HDO     { STOPOBSBLOCK(); mout(MWHILE);
                                   OBSBLOCK();}
                         BLOCK   { MBEEENDBLOCK(); mout(MENDWHILE);
                         HDO     { STOPOBSBLOCK(); mout(MWHILE);
                                   OBSBLOCK();}
                         BLOCK   { MBEEENDBLOCK(); mout(MENDWHILE);
-                                                         $$=STATEMENT;}
-               |       HIF
+                                                         $$=STATEMENT;}
+               |       HIF
                         EXPRESSION
                         HTHEN   { STOPOBSBLOCK(); mout(MIF);
                                   OBSBLOCK();}
                         EXPRESSION
                         HTHEN   { STOPOBSBLOCK(); mout(MIF);
                                   OBSBLOCK();}
@@ -709,7 +709,7 @@ MODULSTATEMENT  :       HWHILE
                                 { STOPOBSBLOCK();         $$=STATEMENT;
                                                   mout(MENDASSIGN);}
                |       ACTIVATOR EXPRESSION SCHEDULE
                                 { STOPOBSBLOCK();         $$=STATEMENT;
                                                   mout(MENDASSIGN);}
                |       ACTIVATOR EXPRESSION SCHEDULE
-                                               {         $$=STATEMENT;
+                                               { $$=STATEMENT;
                                                  mout(MENDSEP);
                                                  mout(MARGUMENTSEP);
                                                  mout(MARGUMENTSEP);
                                                  mout(MENDSEP);
                                                  mout(MARGUMENTSEP);
                                                  mout(MARGUMENTSEP);
@@ -836,10 +836,10 @@ MBEE_DECLSTMSU  :       DECLSTATEMENT   { $$=$1;}
 MODULS         :       MODULSTATEMENT  { if($1==DECLARATION)
                                          {separat_comp=TRUE;gettimestamp();}
                                           $$=$1;}
 MODULS         :       MODULSTATEMENT  { if($1==DECLARATION)
                                          {separat_comp=TRUE;gettimestamp();}
                                           $$=$1;}
-               |       MODULS HSTATEMENTSEPARATOR MODULSTATEMENT
+               |       MODULS HSTATEMENTSEPARATOR MODULSTATEMENT
                                        { if($1>=STATEMENT && $3<=DECLARATION)
                                             yerror (26);else
                                        { if($1>=STATEMENT && $3<=DECLARATION)
                                             yerror (26);else
-                                                 if($1>=STATEMENT
+                                         if($1>=STATEMENT
                                             && $3!=EMPTYSTATEMENT)yerror (25);
                                           if(separat_comp && $3==STATEMENT)
                                              yerror (25);
                                             && $3!=EMPTYSTATEMENT)yerror (25);
                                           if(separat_comp && $3==STATEMENT)
                                              yerror (25);
@@ -939,7 +939,7 @@ FPP_CATEG       :       HNAME HLABELSEPARATOR
                 ;
 FPP_PROC_DECL_IN_SPEC: MBEE_TYPE HPROCEDURE
                         HIDENTIFIER
                 ;
 FPP_PROC_DECL_IN_SPEC: MBEE_TYPE HPROCEDURE
                         HIDENTIFIER
-                                       { $<ival>$=categ;
+                                       { $<ival>$=categ;
                                           regDecl($3, type, KPROC, categ);
                                           beginBlock(KPROC);}
                         FPP_HEADING
                                           regDecl($3, type, KPROC, categ);
                                           beginBlock(KPROC);}
                         FPP_HEADING
@@ -1008,7 +1008,7 @@ SPECIFIER       :       TYPE            { kind=KSIMPLE;}
                 ;
 PROC_DECL_IN_SPEC:     MBEE_TYPE HPROCEDURE
                         HIDENTIFIER
                 ;
 PROC_DECL_IN_SPEC:     MBEE_TYPE HPROCEDURE
                         HIDENTIFIER
-                                       { $<ival>$=categ;
+                                       { $<ival>$=categ;
                                           regDecl($3, type, KPROC, categ);
                                           beginBlock(KPROC);}
                         HEADING
                                           regDecl($3, type, KPROC, categ);
                                           beginBlock(KPROC);}
                         HEADING
@@ -1292,7 +1292,7 @@ AT_DATA([[input.y]],
 %token AND
 %token HERE
 %token DOT_N
 %token AND
 %token HERE
 %token DOT_N
-%token DOT_E   
+%token DOT_E
 %token DOT_W
 %token DOT_S
 %token DOT_NE
 %token DOT_W
 %token DOT_S
 %token DOT_NE
@@ -1378,7 +1378,7 @@ parses properly. */
 %left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED
 %left LABEL
 
 %left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED
 %left LABEL
 
-%left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST 
+%left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST
 %left ORDINAL HERE '`'
 
 %left BOX CIRCLE ELLIPSE ARC LINE ARROW SPLINE '[' /* ] */
 %left ORDINAL HERE '`'
 
 %left BOX CIRCLE ELLIPSE ARC LINE ARROW SPLINE '[' /* ] */
@@ -1518,7 +1518,7 @@ placeless_element:
                }
        | COPY TEXT THRU
                { delim_flag = 2; }
                }
        | COPY TEXT THRU
                { delim_flag = 2; }
-         DELIMITED 
+         DELIMITED
                { delim_flag = 0; }
          until
                {
                { delim_flag = 0; }
          until
                {
@@ -1542,13 +1542,13 @@ placeless_element:
                  a_delete $6;
                }
        | FOR VARIABLE '=' expr TO expr optional_by DO
                  a_delete $6;
                }
        | FOR VARIABLE '=' expr TO expr optional_by DO
-               { delim_flag = 1; }
+               { delim_flag = 1; }
          DELIMITED
          DELIMITED
-               {
+               {
                  delim_flag = 0;
                  if (yychar < 0)
                    do_lookahead();
                  delim_flag = 0;
                  if (yychar < 0)
                    do_lookahead();
-                 do_for($2, $4, $6, $7.is_multiplicative, $7.val, $10); 
+                 do_for($2, $4, $6, $7.is_multiplicative, $7.val, $10);
                }
        | simple_if
                {
                }
        | simple_if
                {
@@ -1617,7 +1617,7 @@ print_args:
        ;
 
 print_arg:
        ;
 
 print_arg:
-       expr                                                    %prec ','
+       expr                                                    %prec ','
                {
                  $$.str = new char[GDIGITS + 1];
                  sprintf($$.str, "%g", $1);
                {
                  $$.str = new char[GDIGITS + 1];
                  sprintf($$.str, "%g", $1);
@@ -1652,14 +1652,14 @@ until:
        | UNTIL TEXT
                { $$ = $2.str; }
        ;
        | UNTIL TEXT
                { $$ = $2.str; }
        ;
-       
+
 any_expr:
        expr
                { $$ = $1; }
        | text_expr
                { $$ = $1; }
        ;
 any_expr:
        expr
                { $$ = $1; }
        | text_expr
                { $$ = $1; }
        ;
-       
+
 text_expr:
        text EQUALEQUAL text
                {
 text_expr:
        text EQUALEQUAL text
                {
@@ -1831,7 +1831,7 @@ object_spec:
                                           $3.filename, $3.lineno);
                  a_delete $3.str;
                }
                                           $3.filename, $3.lineno);
                  a_delete $3.str;
                }
-       | '[' 
+       | '['
                {
                  saved_state *p = new saved_state;
                  $<pstate>$ = p;
                {
                  saved_state *p = new saved_state;
                  $<pstate>$ = p;
@@ -2014,7 +2014,7 @@ object_spec:
                  $$->segment_pos.y += $3.y;
                }
        | object_spec THEN
                  $$->segment_pos.y += $3.y;
                }
        | object_spec THEN
-               {
+               {
                  $$ = $1;
                  if ($$->flags & HAS_SEGMENT) {
                    $$->segment_list = new segment($$->segment_pos,
                  $$ = $1;
                  if ($$->flags & HAS_SEGMENT) {
                    $$->segment_list = new segment($$->segment_pos,
@@ -2088,7 +2088,7 @@ object_spec:
                  strcpy($$->outlined, $3.str);
                }
        | object_spec CHOP
                  strcpy($$->outlined, $3.str);
                }
        | object_spec CHOP
-               {
+               {
                  $$ = $1;
                  // line chop chop means line chop 0 chop 0
                  if ($$->flags & IS_DEFAULT_CHOPPED) {
                  $$ = $1;
                  // line chop chop means line chop 0 chop 0
                  if ($$->flags & IS_DEFAULT_CHOPPED) {
@@ -2258,10 +2258,10 @@ sprintf_args:
        ;
 
 position:
        ;
 
 position:
-       position_not_place
+       position_not_place
                { $$ = $1; }
        | place
                { $$ = $1; }
        | place
-               {
+               {
                  position pos = $1;
                  $$.x = pos.x;
                  $$.y = pos.y;
                  position pos = $1;
                  $$.x = pos.x;
                  $$.y = pos.y;
@@ -2377,7 +2377,7 @@ ordinal:
 optional_ordinal_last:
        LAST
                { $$ = 1; }
 optional_ordinal_last:
        LAST
                { $$ = 1; }
-       | ordinal LAST
+       | ordinal LAST
                { $$ = $1; }
        ;
 
                { $$ = $1; }
        ;
 
@@ -2416,7 +2416,7 @@ nth_primitive:
 
 object_type:
        BOX
 
 object_type:
        BOX
-               { $$ = BOX_OBJECT; }
+               { $$ = BOX_OBJECT; }
        | CIRCLE
                { $$ = CIRCLE_OBJECT; }
        | ELLIPSE
        | CIRCLE
                { $$ = CIRCLE_OBJECT; }
        | ELLIPSE
@@ -2436,7 +2436,7 @@ object_type:
        ;
 
 label_path:
        ;
 
 label_path:
-       '.' LABEL
+       '.' LABEL
                { $$ = new path($2); }
        | label_path '.' LABEL
                {
                { $$ = new path($2); }
        | label_path '.' LABEL
                {
@@ -2450,7 +2450,7 @@ relative_path:
                { $$ = new path($1); }
        /* give this a lower precedence than LEFT and RIGHT so that
           [A: box] with .A left == [A: box] with (.A left) */
                { $$ = new path($1); }
        /* give this a lower precedence than LEFT and RIGHT so that
           [A: box] with .A left == [A: box] with (.A left) */
-       | label_path                                            %prec TEXT
+       | label_path                                            %prec TEXT
                { $$ = $1; }
        | label_path corner
                {
                { $$ = $1; }
        | label_path corner
                {
@@ -2497,7 +2497,7 @@ path:
 corner:
        DOT_N
                { $$ = &object::north; }
 corner:
        DOT_N
                { $$ = &object::north; }
-       | DOT_E 
+       | DOT_E
                { $$ = &object::east; }
        | DOT_W
                { $$ = &object::west; }
                { $$ = &object::east; }
        | DOT_W
                { $$ = &object::west; }
@@ -2517,7 +2517,7 @@ corner:
                { $$ = &object::start; }
        | DOT_END
                { $$ = &object::end; }
                { $$ = &object::start; }
        | DOT_END
                { $$ = &object::end; }
-       | TOP
+       | TOP
                { $$ = &object::north; }
        | BOTTOM
                { $$ = &object::south; }
                { $$ = &object::north; }
        | BOTTOM
                { $$ = &object::south; }
@@ -2573,12 +2573,12 @@ expr:
        | NUMBER
                { $$ = $1; }
        | place DOT_X
        | NUMBER
                { $$ = $1; }
        | place DOT_X
-               {
+               {
                  if ($1.obj != 0)
                    $$ = $1.obj->origin().x;
                  else
                    $$ = $1.x;
                  if ($1.obj != 0)
                    $$ = $1.obj->origin().x;
                  else
                    $$ = $1.x;
-               }                       
+               }
        | place DOT_Y
                {
                  if ($1.obj != 0)
        | place DOT_Y
                {
                  if ($1.obj != 0)
index 9b83e9c7dcdb46d42a1a003311f4251c92755fe7..c33985da208577678de2e9e7e1007aa28b595744 100644 (file)
@@ -1,5 +1,5 @@
 # Exercising Bison Grammar Sets.                      -*- Autotest -*-
 # Exercising Bison Grammar Sets.                      -*- Autotest -*-
-# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -29,25 +29,25 @@ m4_define([AT_EXTRACT_SETS],
    :null
    p
    n
    :null
    p
    n
-   /^[         ]*$/ !b null
+   /^[  ]*$/ !b null
 }
 /^FIRSTS$/ {
    :firsts
    p
    n
 }
 /^FIRSTS$/ {
    :firsts
    p
    n
-   /^[         ]*$/ !b firsts
+   /^[  ]*$/ !b firsts
 }
 /^FDERIVES$/ {
    :fderiv
    p
    n
 }
 /^FDERIVES$/ {
    :fderiv
    p
    n
-   /^[         ]*$/ !b fderiv
+   /^[  ]*$/ !b fderiv
 }
 /^DERIVES$/ {
    :deriv
    p
    n
 }
 /^DERIVES$/ {
    :deriv
    p
    n
-   /^[         ]*$/ !b deriv
+   /^[  ]*$/ !b deriv
 }
 ]])
 AT_CHECK([sed -f extract.sed $1], 0, [stdout])
 }
 ]])
 AT_CHECK([sed -f extract.sed $1], 0, [stdout])
index af5019bc9ae901bd452312bbe46cb11463058430..16425f6a5c3fa0876fa626e53c5205c04072ad18 100644 (file)
@@ -388,6 +388,8 @@ m4_define([AT_DATA_STACK_TORTURE],
 # exp:
 AT_DATA([input.y],
 [[%{
 # exp:
 AT_DATA([input.y],
 [[%{
+#include <errno.h>
+#include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 ]$1[
 #include <stdio.h>
 #include <stdlib.h>
 ]$1[
@@ -406,9 +408,6 @@ yyerror (const char *msg)
   fprintf (stderr, "%s\n", msg);
 }
 
   fprintf (stderr, "%s\n", msg);
 }
 
-/* There are YYLVAL_MAX of WAIT_FOR_EOFs. */
-unsigned int yylval_max;
-
 static int
 yylex (void)
 {
 static int
 yylex (void)
 {
@@ -421,9 +420,14 @@ yylex (void)
 int
 main (int argc, const char **argv)
 {
 int
 main (int argc, const char **argv)
 {
+  char *endp;
   if (argc != 2)
     abort ();
   if (argc != 2)
     abort ();
-  yylval = atoi (argv[1]);
+  yylval = strtol (argv[1], &endp, 10);
+  if (! (argv[1] != endp
+        && 0 <= yylval && yylval <= INT_MAX
+        && errno != ERANGE))
+    abort ();
   yydebug = 1;
   return yyparse ();
 }
   yydebug = 1;
   return yyparse ();
 }