bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FYI: merge 2.5.90 into master


From: Akim Demaille
Subject: FYI: merge 2.5.90 into master
Date: Fri, 6 Jul 2012 11:02:52 +0200

commit 60aa04a236004d3d03f00aeaf07b643a52ef0760
Merge: ccdc157 a59a6dd
Author: Akim Demaille <address@hidden>
Date:   Fri Jul 6 10:58:26 2012 +0200

    Merge remote-tracking branch 'origin/maint'
    
    * origin/maint:
      maint: update release instructions
      maint: post-release administrivia
      version 2.5.90
      build: fix gen-ChangeLog call.
      gnulib: update.
      tests: fix SKIP_IF for Java.
      api.prefix: incompatible with %name-prefix.
      api.prefix: strengthen the tests and fix push-parsers.
      skeletons: style changes.
      NEWS: minor changes.
      api.prefix: improve the documentation for YYDEBUG.
      gnulib: update.
    
    Conflicts:
        NEWS
        cfg.mk
        data/bison.m4
        doc/bison.texi
        m4/.gitignore
        tests/calc.at
        tests/headers.at

diff --git a/.prev-version b/.prev-version
index 73462a5..b042f94 100644
--- a/.prev-version
+++ b/.prev-version
@@ -1 +1 @@
-2.5.1
+2.5.90
diff --git a/Makefile.am b/Makefile.am
index 5fae4ce..ab3460d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -88,13 +88,14 @@ update-package-copyright-year:
 gen_start_date = 2012-01-16
 .PHONY: gen-ChangeLog
 gen-ChangeLog:
-       $(AM_V_GEN)if test -d $(srcdir)/.git; then              \
-         $(top_srcdir)/build-aux/gitlog-to-changelog           \
-           --strip-tab                                         \
-           --strip-cherry-picked                               \
-           --no-cluster                                        \
-           --amend=$(srcdir)/build-aux/git-log-fix             \
-           --since=$(gen_start_date) > $(distdir)/cl-t;        \
-         rm -f $(distdir)/ChangeLog;                           \
-         mv $(distdir)/cl-t $(distdir)/ChangeLog;              \
+       $(AM_V_GEN)if test -d $(srcdir)/.git; then      \
+         cl=$(distdir)/ChangeLog &&                    \
+         rm -f $$cl.tmp &&                             \
+         $(top_srcdir)/build-aux/gitlog-to-changelog   \
+           --strip-tab                                 \
+           --strip-cherry-pick                         \
+           --no-cluster                                \
+           --amend=$(srcdir)/build-aux/git-log-fix     \
+           --since=$(gen_start_date) > $$cl.tmp &&     \
+         mv -f $$cl.tmp $$cl;                          \
        fi
diff --git a/NEWS b/NEWS
index eddfa8e..c17939a 100644
--- a/NEWS
+++ b/NEWS
@@ -121,7 +121,8 @@ GNU Bison NEWS
 
 * Noteworthy changes in release ?.? (????-??-??) [?]
 
-** Future changes
+
+* Noteworthy changes in release 2.5.90 (2012-07-05) [beta]
 
   The next major release of Bison will drop support for the following
   deprecated features.  Please report disagreements to address@hidden
@@ -151,7 +152,7 @@ GNU Bison NEWS
   because existing versions of ylwrap (e.g., Automake 1.12.1) do not support
   it.
 
-** Headers
+** Generated Parser Headers
 
 *** Guards (yacc.c, glr.c, glr.cc)
 
diff --git a/README-hacking b/README-hacking
index 3ba1d4f..f128c9c 100644
--- a/README-hacking
+++ b/README-hacking
@@ -259,7 +259,10 @@ that the skeletons insert into generated parsers, and 
check all
 occurrences of PACKAGE_COPYRIGHT_YEAR in configure.ac.
 
 ** Update NEWS, commit and tag.
-See do-release-commit-and-tag in README-release.
+See do-release-commit-and-tag in README-release.  For a while, we used
+beta names such as "2.6_rc1".  Now that we use gnulib in the release
+procedure, we must use "2.5.90", which has the additional benefit of
+being properly sorted in "git tag -l".
 
 ** make alpha, beta, or stable
 See README-release.
diff --git a/bootstrap b/bootstrap
index ce37a2c..e984910 100755
--- a/bootstrap
+++ b/bootstrap
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Print a version string.
-scriptversion=2012-05-15.06; # UTC
+scriptversion=2012-07-03.20; # UTC
 
 # Bootstrap this package from checked-out sources.
 
@@ -215,7 +215,7 @@ find_tool ()
   eval "export $find_tool_envvar"
 }
 
-# Find sha1sum, named gsha1sum on MacPorts, and shasum on MacOS 10.6.
+# Find sha1sum, named gsha1sum on MacPorts, and shasum on Mac OS X 10.6.
 find_tool SHA1SUM sha1sum gsha1sum shasum
 
 # Override the default configuration, if necessary.
@@ -230,7 +230,6 @@ esac
 test -z "${gnulib_extra_files}" && \
   gnulib_extra_files="
         $build_aux/install-sh
-        $build_aux/missing
         $build_aux/mdate-sh
         $build_aux/texinfo.tex
         $build_aux/depcomp
@@ -855,7 +854,8 @@ echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
 $gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
 
 for file in $gnulib_files; do
-  symlink_to_dir "$GNULIB_SRCDIR" $file || exit
+  symlink_to_dir "$GNULIB_SRCDIR" $file \
+    || { echo "$0: failed to symlink $file" 1>&2; exit 1; }
 done
 
 bootstrap_post_import_hook \
@@ -896,7 +896,8 @@ for file in $gnulib_extra_files; do
   build-aux/*) dst=$build_aux/${file#build-aux/};;
   *) dst=$file;;
   esac
-  symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit
+  symlink_to_dir "$GNULIB_SRCDIR" $file $dst \
+    || { echo "$0: failed to symlink $file" 1>&2; exit 1; }
 done
 
 if test $with_gettext = yes; then
diff --git a/cfg.mk b/cfg.mk
index 392d211..6088b64 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -66,5 +66,5 @@ $(call exclude,                                               
                \
   prohibit_strcmp=^doc/bison\.texinfo$$                                        
\
   require_config_h_first=^(lib/yyerror|data/(glr|yacc))\.c$$           \
   space_tab=^tests/(input|c\+\+)\.at$$                                 \
-  unmarked_diagnostics=^djgpp/                                         \
+  unmarked_diagnostics=^(djgpp/|doc/bison.texi$$)                      \
 )
diff --git a/data/bison.m4 b/data/bison.m4
index 3e5c6f3..58ed5d8 100644
--- a/data/bison.m4
+++ b/data/bison.m4
@@ -186,21 +186,6 @@ m4_define([b4_fatal_at],
 m4_exit(1)])
 
 
-## ---------------- ##
-## Default values.  ##
-## ---------------- ##
-
-# m4_define_default([b4_lex_param], [])   dnl breaks other skeletons
-m4_define_default([b4_pre_prologue], [])
-m4_define_default([b4_post_prologue], [])
-m4_define_default([b4_epilogue], [])
-m4_define_default([b4_parse_param], [])
-
-# The initial column and line.
-m4_define_default([b4_location_initial_column], [1])
-m4_define_default([b4_location_initial_line],   [1])
-
-
 ## ------------ ##
 ## Data Types.  ##
 ## ------------ ##
@@ -822,3 +807,26 @@ m4_wrap_lifo([
 b4_check_user_names_wrap([[define]], [[variable]])
 b4_check_user_names_wrap([[code]], [[qualifier]])
 ])
+
+
+## ---------------- ##
+## Default values.  ##
+## ---------------- ##
+
+# m4_define_default([b4_lex_param], [])   dnl breaks other skeletons
+m4_define_default([b4_pre_prologue], [])
+m4_define_default([b4_post_prologue], [])
+m4_define_default([b4_epilogue], [])
+m4_define_default([b4_parse_param], [])
+
+# The initial column and line.
+m4_define_default([b4_location_initial_column], [1])
+m4_define_default([b4_location_initial_line],   [1])
+
+# Sanity checks.
+b4_percent_define_ifdef([api.prefix],
+[m4_ifdef([b4_prefix],
+[b4_complain_at(b4_percent_define_get_loc([api.prefix]),
+                [['%s' and '%s' cannot be used together]],
+                [%name-prefix],
+                [%define api.prefix])])])
diff --git a/data/yacc.c b/data/yacc.c
index a98c4ed..c279ec3 100644
--- a/data/yacc.c
+++ b/data/yacc.c
@@ -232,22 +232,27 @@ m4_define([b4_declare_parser_state_variables], 
[b4_pure_if([[
 # Declaration of yyparse (and dependencies) when using the push parser
 # (including in pull mode).
 m4_define([b4_declare_yyparse_push_],
-[[typedef struct ]b4_prefix[pstate ]b4_prefix[pstate;
+[[#ifndef YYPUSH_MORE_DEFINED
+# define YYPUSH_MORE_DEFINED
 enum { YYPUSH_MORE = 4 };
+#endif
+
+typedef struct ]b4_prefix[pstate ]b4_prefix[pstate;
+
 ]b4_pull_if([b4_c_function_decl([b4_prefix[parse]], [[int]], b4_parse_param)
 ])b4_c_function_decl([b4_prefix[push_parse]], [[int]],
-  [[b4_prefix[pstate *yyps]], [[yyps]]]b4_pure_if([,
-  [[[int yypushed_char]], [[yypushed_char]]],
-  [[[YYSTYPE const *yypushed_val]], [[yypushed_val]]]b4_locations_if([,
-  [[[YYLTYPE const *yypushed_loc]], 
[[yypushed_loc]]]])])m4_ifset([b4_parse_param], [,
+  [[b4_prefix[pstate *ps]], [[ps]]]b4_pure_if([,
+  [[[int pushed_char]], [[pushed_char]]],
+  [[b4_api_PREFIX[STYPE const *pushed_val]], [[pushed_val]]]b4_locations_if([,
+  [[b4_api_PREFIX[LTYPE const *pushed_loc]], 
[[pushed_loc]]]])])m4_ifset([b4_parse_param], [,
   b4_parse_param]))
 b4_pull_if([b4_c_function_decl([b4_prefix[pull_parse]], [[int]],
-  [[b4_prefix[pstate *yyps]], [[yyps]]]m4_ifset([b4_parse_param], [,
+  [[b4_prefix[pstate *ps]], [[ps]]]m4_ifset([b4_parse_param], [,
   b4_parse_param]))])
 b4_c_function_decl([b4_prefix[pstate_new]], [b4_prefix[pstate *]],
                     [[[void]], []])
 b4_c_function_decl([b4_prefix[pstate_delete]], [[void]],
-                   [[b4_prefix[pstate *yyps]], [[yyps]]])dnl
+                   [[b4_prefix[pstate *ps]], [[ps]]])dnl
 ])
 
 # b4_declare_yyparse_
diff --git a/doc/bison.texi b/doc/bison.texi
index 085c5a9..d4ac6e4 100644
--- a/doc/bison.texi
+++ b/doc/bison.texi
@@ -5156,7 +5156,7 @@ default location or at the location specified by 
@var{qualifier}.
 @end deffn
 
 @deffn {Directive} %debug
-Instrument the output parser for traces.  Obsoleted by @samp{%define
+Instrument the parser for traces.  Obsoleted by @samp{%define
 parse.trace}.
 @xref{Tracing, ,Tracing Your Parser}.
 @end deffn
@@ -5465,6 +5465,8 @@ The parser namespace is @code{foo} and @code{yylex} is 
referenced as
 @item Accepted Values: String
 
 @item Default Value: @code{yy}
+
address@hidden History: introduced in Bison 2.6
 @end itemize
 
 @c ================================================== api.pure
@@ -5690,12 +5692,16 @@ syntax error handling.  @xref{LAC}.
 @findex %define parse.trace
 
 @itemize
address@hidden Languages(s): C, C++
address@hidden Languages(s): C, C++, Java
 
 @item Purpose: Require parser instrumentation for tracing.
-In C/C++, define the macro @code{YYDEBUG} to 1 in the parser implementation
address@hidden, ,Tracing Your Parser}.
+
+In C/C++, define the macro @code{YYDEBUG} (or @address@hidden with
address@hidden api.prefix @var{prefix}}), see @ref{Multiple Parsers,
+,Multiple Parsers in the Same Program}) to 1 in the parser implementation
 file if it is not already defined, so that the debugging facilities are
-compiled.  @xref{Tracing, ,Tracing Your Parser}.
+compiled.
 
 @item Accepted Values: Boolean
 
@@ -5852,20 +5858,22 @@ also need to avoid conflicts on types and macros (e.g., 
@code{YYSTYPE})
 exported in the generated header.
 
 The easy way to do this is to define the @code{%define} variable
address@hidden (possibly using the option
address@hidden@var{prefix}}, see @ref{Invocation, ,Invoking Bison}).
-This renames the interface functions and variables of the Bison parser to
-start with @var{prefix} instead of @samp{yy}, and all the macros to start by
address@hidden (i.e., @var{prefix} upper cased) instead of @samp{YY}.  You can
-use this to give each parser distinct names that do not conflict.
address@hidden  With different @code{api.prefix}s it is guaranteed that
+headers do not conflict when included together, and that compiled objects
+can be linked together too.  Specifying @samp{%define api.prefix
address@hidden (or passing the option @address@hidden, see
address@hidden, ,Invoking Bison}) renames the interface functions and
+variables of the Bison parser to start with @var{prefix} instead of
address@hidden, and all the macros to start by @var{PREFIX} (i.e., @var{prefix}
+upper-cased) instead of @samp{YY}.
 
 The renamed symbols include @code{yyparse}, @code{yylex}, @code{yyerror},
 @code{yynerrs}, @code{yylval}, @code{yylloc}, @code{yychar} and
 @code{yydebug}.  If you use a push parser, @code{yypush_parse},
 @code{yypull_parse}, @code{yypstate}, @code{yypstate_new} and
 @code{yypstate_delete} will also be renamed.  The renamed macros include
address@hidden, @code{YYSTYPE_IS_TRIVIAL}, @code{YYSTYPE_IS_DECLARED},
address@hidden, @code{YYLTYPE_IS_TRIVIAL}, and @code{YYLTYPE_IS_DECLARED}.
address@hidden, @code{YYLTYPE}, and @code{YYDEBUG}, which is treated
+specifically --- more about this below.
 
 For example, if you use @samp{%define api.prefix c}, the names become
 @code{cparse}, @code{clex}, @dots{}, @code{CSTYPE}, @code{CLTYPE}, and so
@@ -5897,9 +5905,33 @@ extern CSTYPE clval;
 int cparse (void);
 @end example
 
-Previously, a similar feature was provided by the obsoleted directive
address@hidden (@pxref{Table of Symbols, ,Bison Symbols}) and option
address@hidden (@pxref{Bison Options}).
+The macro @code{YYDEBUG} is commonly used to enable the tracing support in
+parsers.  To comply with this tradition, when @code{api.prefix} is used,
address@hidden (not renamed) is used as a default value:
+
address@hidden
+/* Enabling traces.  */
+#ifndef CDEBUG
+# if defined YYDEBUG
+#  if YYDEBUG
+#   define CDEBUG 1
+#  else
+#   define CDEBUG 0
+#  endif
+# else
+#  define CDEBUG 0
+# endif
+#endif
+#if CDEBUG
+extern int cdebug;
+#endif
address@hidden example
+
address@hidden 2
+
+Prior to Bison 2.6, a feature similar to @code{api.prefix} was provided by
+the obsolete directive @code{%name-prefix} (@pxref{Table of Symbols, ,Bison
+Symbols}) and the option @code{--name-prefix} (@pxref{Bison Options}).
 
 @node Interface
 @chapter Parser C-Language Interface
@@ -6015,9 +6047,9 @@ function is available if either the @samp{%define 
api.push-pull push} or
 @xref{Push Decl, ,A Push Parser}.
 
 @deftypefun int yypush_parse (yypstate *yyps)
-The value returned by @code{yypush_parse} is the same as for yyparse with the
-following exception.  @code{yypush_parse} will return YYPUSH_MORE if more input
-is required to finish parsing the grammar.
+The value returned by @code{yypush_parse} is the same as for yyparse with
+the following exception: it returns @code{YYPUSH_MORE} if more input is
+required to finish parsing the grammar.
 @end deftypefun
 
 @node Pull Parser Function
@@ -8788,9 +8820,17 @@ parser.  This is compliant with POSIX Yacc.  You could 
use
 YYDEBUG 1} in the prologue of the grammar file (@pxref{Prologue, , The
 Prologue}).
 
address@hidden the option @option{-t}, @option{--debug}
-Use the @samp{-t} option when you run Bison (@pxref{Invocation,
-,Invoking Bison}).  This is POSIX compliant too.
+If the @code{%define} variable @code{api.prefix} is used (@xref{Multiple
+Parsers, ,Multiple Parsers in the Same Program}), for instance @samp{%define
+api.prefix x}, then if @code{CDEBUG} is defined, its value controls the
+tracing feature (enabled iff nonzero); otherwise tracing is enabled iff
address@hidden is nonzero.
+
address@hidden the option @option{-t} (POSIX Yacc compliant)
address@hidden the option @option{--debug} (Bison extension)
+Use the @samp{-t} option when you run Bison (@pxref{Invocation, ,Invoking
+Bison}).  With @samp{%define api.prefix c}, it defines @code{CDEBUG} to 1,
+otherwise it defines @code{YYDEBUG} to 1.
 
 @item the directive @samp{%debug}
 @findex %debug
diff --git a/gnulib b/gnulib
index b42157d..be2b039 160000
--- a/gnulib
+++ b/gnulib
@@ -1 +1 @@
-Subproject commit b42157dd01e3243646f5a8270c09ee125a8aca21
+Subproject commit be2b039116133e5fd07e07c5d272b8adb91d72b2
diff --git a/m4/.gitignore b/m4/.gitignore
index 990b1a5..e157f19 100644
--- a/m4/.gitignore
+++ b/m4/.gitignore
@@ -180,3 +180,6 @@
 /xalloc.m4
 /xsize.m4
 /xstrndup.m4
+/off_t.m4
+/sys_types_h.m4
+/fseterr.m4
diff --git a/tests/calc.at b/tests/calc.at
index 55b9154..886122e 100644
--- a/tests/calc.at
+++ b/tests/calc.at
@@ -59,7 +59,7 @@ int
 ]AT_NAME_PREFIX[parse (]AT_PARAM_IF([semantic_value *result, int *count]))[
 {
   ]AT_NAME_PREFIX[::parser parser]AT_PARAM_IF([ (result, count)])[;
-#if YYDEBUG
+#if ]AT_API_PREFIX[DEBUG
   parser.set_debug_level (1);
 #endif
   return parser.parse ();
@@ -113,7 +113,7 @@ static int get_char (]AT_YYLEX_FORMALS[);
 static void unget_char (]AT_YYLEX_PRE_FORMALS[ int c);
 
 ]AT_LOCATION_IF([
-static YYLTYPE last_yylloc;
+static AT_YYLTYPE last_yylloc;
 ])[
 static int
 get_char (]AT_YYLEX_FORMALS[)
@@ -264,15 +264,11 @@ AT_SKEL_CC_IF(
 
 %code provides
 {
-#include <stdio.h>
-/* The input.  */
-extern FILE *input;
-extern semantic_value global_result;
-extern int global_count;]AT_SKEL_CC_IF([[
-#ifndef YYLTYPE
-# define YYLTYPE ]AT_NAME_PREFIX[::parser::location_type
-#endif
-]])[
+  #include <stdio.h>
+  /* The input.  */
+  extern FILE *input;
+  extern semantic_value global_result;
+  extern int global_count;
 }
 
 %code
@@ -285,7 +281,7 @@ FILE *input;
 static int power (int base, int exponent);
 
 ]AT_SKEL_CC_IF(,
-[static void yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *llocp, ])
+[static void yyerror (AT_YYERROR_ARG_LOC_IF([AT_YYLTYPE *llocp, ])
                      AT_PARAM_IF([semantic_value *result, int *count, ])
                      const char *s
                      );])[
@@ -373,7 +369,7 @@ power (int base, int exponent)
 AT_YYERROR_DEFINE],
 [/* A C error reporting function.  */
 static void
-yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *llocp, ])
+yyerror (AT_YYERROR_ARG_LOC_IF([AT_YYLTYPE *llocp, ])
          AT_PARAM_IF([semantic_value *result, int *count, ])
          const char *s)
 {
@@ -631,16 +627,17 @@ AT_CHECK_CALC_LALR([%define api.pure %locations])
 AT_CHECK_CALC_LALR([%define api.push-pull both %define api.pure %locations])
 AT_CHECK_CALC_LALR([%define parse.error verbose %locations])
 
-AT_CHECK_CALC_LALR([%define parse.error verbose %locations %defines 
%name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_LALR([%define parse.error verbose %locations %defines %define 
api.prefix "calc" %verbose %yacc])
 AT_CHECK_CALC_LALR([%define parse.error verbose %locations %defines 
%name-prefix "calc" %define api.tokens.prefix "TOK_" %verbose %yacc])
 
 AT_CHECK_CALC_LALR([%debug])
 AT_CHECK_CALC_LALR([%define parse.error verbose %debug %locations %defines 
%name-prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_LALR([%define parse.error verbose %debug %locations %defines 
%define api.prefix "calc" %verbose %yacc])
 
 AT_CHECK_CALC_LALR([%define api.pure %define parse.error verbose %debug 
%locations %defines %name-prefix "calc" %verbose %yacc])
-AT_CHECK_CALC_LALR([%define api.push-pull both %define api.pure %define 
parse.error verbose %debug %locations %defines %name-prefix "calc" %verbose 
%yacc])
+AT_CHECK_CALC_LALR([%define api.push-pull both %define api.pure %define 
parse.error verbose %debug %locations %defines %define api.prefix "calc" 
%verbose %yacc])
 
-AT_CHECK_CALC_LALR([%define api.pure %define parse.error verbose %debug 
%locations %defines %name-prefix "calc" %verbose %yacc %parse-param 
{semantic_value *result} %parse-param {int *count}])
+AT_CHECK_CALC_LALR([%define api.pure %define parse.error verbose %debug 
%locations %defines %define api.prefix "calc" %verbose %yacc %parse-param 
{semantic_value *result} %parse-param {int *count}])
 
 
 # ----------------------- #
@@ -662,6 +659,7 @@ AT_CHECK_CALC_GLR()
 AT_CHECK_CALC_GLR([%defines])
 AT_CHECK_CALC_GLR([%locations])
 AT_CHECK_CALC_GLR([%name-prefix "calc"])
+AT_CHECK_CALC_GLR([%define api.prefix "calc"])
 AT_CHECK_CALC_GLR([%verbose])
 AT_CHECK_CALC_GLR([%yacc])
 AT_CHECK_CALC_GLR([%define parse.error verbose])
@@ -673,11 +671,12 @@ AT_CHECK_CALC_GLR([%define parse.error verbose %locations 
%defines %name-prefix
 
 AT_CHECK_CALC_GLR([%debug])
 AT_CHECK_CALC_GLR([%define parse.error verbose %debug %locations %defines 
%name-prefix "calc" %verbose %yacc])
-AT_CHECK_CALC_GLR([%define parse.error verbose %debug %locations %defines 
%name-prefix "calc" %define api.tokens.prefix "TOK_" %verbose %yacc])
+AT_CHECK_CALC_GLR([%define parse.error verbose %debug %locations %defines 
%define api.prefix "calc" %define api.tokens.prefix "TOK_" %verbose %yacc])
 
 AT_CHECK_CALC_GLR([%define api.pure %define parse.error verbose %debug 
%locations %defines %name-prefix "calc" %verbose %yacc])
 
 AT_CHECK_CALC_GLR([%define api.pure %define parse.error verbose %debug 
%locations %defines %name-prefix "calc" %verbose %yacc %parse-param 
{semantic_value *result} %parse-param {int *count}])
+AT_CHECK_CALC_GLR([%define api.pure %define parse.error verbose %debug 
%locations %defines %define api.prefix "calc" %verbose %yacc %parse-param 
{semantic_value *result} %parse-param {int *count}])
 
 
 # ----------------------------- #
@@ -701,12 +700,14 @@ AT_CHECK_CALC_LALR1_CC([%locations])
 AT_CHECK_CALC_LALR1_CC([%locations %define location_type Span])
 AT_CHECK_CALC_LALR1_CC([%locations %define parse.error verbose %name-prefix 
"calc" %verbose %yacc])
 
+AT_CHECK_CALC_LALR1_CC([%locations %define parse.error verbose %define 
api.prefix "calc" %verbose %yacc])
 AT_CHECK_CALC_LALR1_CC([%locations %define parse.error verbose %debug 
%name-prefix "calc" %verbose %yacc])
 
-AT_CHECK_CALC_LALR1_CC([%locations %pure-parser %define parse.error verbose 
%debug %name-prefix "calc" %verbose %yacc])
-AT_CHECK_CALC_LALR1_CC([%locations %pure-parser %define parse.error verbose 
%debug %name-prefix "calc" %define api.tokens.prefix "TOK_" %verbose %yacc])
+AT_CHECK_CALC_LALR1_CC([%locations %pure-parser %define parse.error verbose 
%debug %define api.prefix "calc" %verbose %yacc])
+AT_CHECK_CALC_LALR1_CC([%locations %pure-parser %define parse.error verbose 
%debug %define api.prefix "calc" %define api.tokens.prefix "TOK_" %verbose 
%yacc])
 
 AT_CHECK_CALC_LALR1_CC([%locations %pure-parser %define parse.error verbose 
%debug %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} 
%parse-param {int *count}])
+AT_CHECK_CALC_LALR1_CC([%locations %pure-parser %define parse.error verbose 
%debug %define api.prefix "calc" %verbose %yacc %parse-param {semantic_value 
*result} %parse-param {int *count}])
 
 
 
@@ -729,6 +730,7 @@ m4_define([AT_CHECK_CALC_GLR_CC],
 AT_CHECK_CALC_GLR_CC([])
 AT_CHECK_CALC_GLR_CC([%define location_type Span])
 AT_CHECK_CALC_GLR_CC([%define parse.error verbose %name-prefix "calc" %verbose 
%yacc])
+AT_CHECK_CALC_GLR_CC([%define parse.error verbose %define api.prefix "calc" 
%verbose %yacc])
 
 AT_CHECK_CALC_GLR_CC([%debug])
 AT_CHECK_CALC_GLR_CC([%define parse.error verbose %debug %name-prefix "calc" 
%verbose %yacc])
@@ -737,3 +739,4 @@ AT_CHECK_CALC_GLR_CC([%pure-parser %define parse.error 
verbose %debug %name-pref
 AT_CHECK_CALC_GLR_CC([%pure-parser %define parse.error verbose %debug 
%name-prefix "calc" %define api.tokens.prefix "TOK_" %verbose %yacc])
 
 AT_CHECK_CALC_GLR_CC([%pure-parser %define parse.error verbose %debug 
%name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} 
%parse-param {int *count}])
+AT_CHECK_CALC_GLR_CC([%pure-parser %define parse.error verbose %debug %define 
api.prefix "calc" %verbose %yacc %parse-param {semantic_value *result} 
%parse-param {int *count}])
diff --git a/tests/headers.at b/tests/headers.at
index 36142cc..8475a09 100644
--- a/tests/headers.at
+++ b/tests/headers.at
@@ -124,15 +124,16 @@ AT_CLEANUP
 
 AT_SETUP([Several parsers])
 
-# AT_DATA_GRAMMAR_SEVERAL([PREFIX], [DIRECTIVES])
-# -----------------------------------------------
+# AT_TEST([PREFIX], [DIRECTIVES])
+# -------------------------------
 # Generate and compile to *.o.  Make sure there is no YY* nor yy* in
 # the header (but YYDEBUG and YYPARSE_PARAM).
-m4_define([AT_DATA_GRAMMAR_SEVERAL],
+m4_pushdef([AT_TEST],
 [AT_BISON_OPTION_PUSHDEFS([%define api.prefix "$1_" $2])
 AT_DATA_GRAMMAR([$1.AT_SKEL_CC_IF([yy], [y])],
 [[%define api.prefix "$1_"
 $2
+%error-verbose
 %union
 {
   int integer;
@@ -150,6 +151,8 @@ exp:
 | 'x' '4' { printf ("x4\n"); }
 | 'x' '5' { printf ("x5\n"); }
 | 'x' '6' { printf ("x6\n"); }
+| 'x' '7' { printf ("x7\n"); }
+| 'x' '8' { printf ("x8\n"); }
 ;
 
 %%
@@ -162,16 +165,21 @@ AT_BISON_CHECK([-d -o AT_SKEL_CC_IF([$1.cc $1.yy], [$1.c 
$1.y])])
 AT_SKEL_CC_IF([],
   [AT_CHECK([$EGREP yy $1.h], [1])])
 
-# Ignore comments. Ignore YYPARSE_PARAM.  YYDEBUG (not renamed) can be
-# read, but not changed.
+# Ignore comments. Ignore YYPARSE_PARAM (obsolete) and
+# YYPUSH_MORE(_DEFINED)? (whose definition is constant).
+#
+# YYDEBUG (not renamed) can be read, but not changed.
 AT_CHECK([[$PERL -0777 -e 's{/\*.*?\*/}{}sg;s,//.*,,;' \
             ]$1.AT_SKEL_CC_IF([hh], [h])[ |
          grep 'YY' |
-         $EGREP -wv '(YYPARSE_PARAM|defined YYDEBUG|if YYDEBUG)']],
+     $EGREP -wv 'YY(PARSE_PARAM|PUSH_MORE(_DEFINED)?)|(defined|if) YYDEBUG']],
          [1])
 AT_LANG_COMPILE([$1.o])
+
+AT_CHECK([[echo "$1" >>expout]])
+
 AT_BISON_OPTION_POPDEFS
-])
+])# AT_TEST
 
 AT_DATA([main.cc],
 [AT_DATA_SOURCE_PROLOGUE
@@ -181,47 +189,51 @@ AT_DATA([main.cc],
   #include "x2.h"
   #include "x3.h"
   #include "x4.h"
+  #include "x6.h"
+  #include "x7.h"
+  #include "x8.h"
 }
 #include "x5.hh"
 //#include "x6.hh"
 
-#define ECHO(S) std::cerr << #S": " << S << std::endl;
+#define RUN(S)                                  \
+  do {                                          \
+    int res = S;                                \
+    if (res)                                    \
+      std::cerr << #S": " << res << std::endl;  \
+  } while (false)
 
 int
 main (void)
 {
-  ECHO(x1_parse());
-  ECHO(x2_parse());
-  ECHO(x3_parse());
-  ECHO(x4_parse());
+  RUN(x1_parse());
+  RUN(x2_parse());
+  RUN(x3_parse());
+  RUN(x4_parse());
   x5_::parser p5;
-  ECHO(p5.parse());
+  RUN(p5.parse());
+  RUN(x6_parse());
+  RUN(x7_parse());
+  RUN(x8_parse());
 //  x6_::parser p6;
-//  ECHO(p6.parse());
+//  RUN(p6.parse());
   return 0;
 }
-]])
-
-AT_DATA_GRAMMAR_SEVERAL([x1], [])
-AT_DATA_GRAMMAR_SEVERAL([x2], [%locations %debug])
-AT_DATA_GRAMMAR_SEVERAL([x3], [%glr-parser])
-AT_DATA_GRAMMAR_SEVERAL([x4], [%locations %debug %glr-parser])
-AT_DATA_GRAMMAR_SEVERAL([x5], [%locations %debug %language "c++"])
-#AT_DATA_GRAMMAR_SEVERAL([x5], [%locations %language "c++" %glr-parser])
-
-AT_COMPILE_CXX([parser], [x1.o x2.o x3.o x4.o x5.o main.cc])
-AT_CHECK([./parser], [0],
-[[x1
-x2
-x3
-x4
-x5
-]],
-[[x1_parse(): 0
-x2_parse(): 0
-x3_parse(): 0
-x4_parse(): 0
-p5.parse(): 0
-]])
+]])# main.cc
+
+AT_TEST([x1], [])
+AT_TEST([x2], [%locations %debug])
+AT_TEST([x3], [%glr-parser])
+AT_TEST([x4], [%locations %debug %glr-parser])
+AT_TEST([x5], [%locations %debug %language "c++"])
+AT_TEST([x6], [%define api.pure])
+AT_TEST([x7], [%define api.push-pull both])
+AT_TEST([x8], [%define api.pure %define api.push-pull both])
+#AT_TEST([x5], [%locations %language "c++" %glr-parser])
+
+AT_COMPILE_CXX([parser], [[x[1-8].o main.cc]])
+AT_CHECK([./parser], [0], [[expout]])
+
+m4_popdef([AT_TEST])
 
 AT_CLEANUP
diff --git a/tests/input.at b/tests/input.at
index 25af100..694adf3 100644
--- a/tests/input.at
+++ b/tests/input.at
@@ -1442,3 +1442,32 @@ input.y:2.1-7: warning: POSIX Yacc forbids dashes in 
symbol names: foo-bar [-Wya
 AT_BISON_CHECK([[-Werror,no-all,yacc input.y]], [[1]], [[]], [[experr]])
 
 AT_CLEANUP
+
+
+## ------------------------------------------------------ ##
+## %name-prefix and %define api.prefix are incompatible.  ##
+## ------------------------------------------------------ ##
+
+AT_SETUP([[%name-prefix and %define api.prefix are incompatible]])
+
+# AT_TEST(DIRECTIVES, OPTIONS, ERROR-LOCATION)
+# --------------------------------------------
+m4_pushdef([AT_TEST],
+[AT_DATA([[input.y]],
+[[$1
+%%
+exp:;
+]])
+AT_BISON_CHECK([[$2 input.y]], [[1]], [[]],
+[[$3: '%name-prefix' and '%define api.prefix' cannot be used together
+]])
+])
+
+AT_TEST([%define api.prefix foo %name-prefix "bar"], [], [input.y:1.9-18])
+AT_TEST([], [-Dapi.prefix=foo -p bar], [<command line>:2])
+AT_TEST([%name-prefix "bar"], [-Dapi.prefix=foo], [<command line>:2])
+AT_TEST([%define api.prefix foo], [-p bar], [input.y:1.9-18])
+
+m4_popdef([AT_TEST])
+
+AT_CLEANUP
diff --git a/tests/local.at b/tests/local.at
index ebc8590..5d318ba 100644
--- a/tests/local.at
+++ b/tests/local.at
@@ -344,7 +344,7 @@ static
 # Must be called inside a AT_BISON_OPTION_PUSHDEFS/POPDEFS pair.
 m4_define([AT_YYERROR_FORMALS],
 [m4_case(AT_LANG,
-[c], [AT_YYERROR_ARG_LOC_IF([YYLTYPE *llocp, ])[const char *msg]])[]dnl
+[c], [AT_YYERROR_ARG_LOC_IF([AT_YYLTYPE *llocp, ])[const char *msg]])[]dnl
 ])
 
 m4_define([AT_YYERROR_PROTOTYPE],
@@ -599,7 +599,8 @@ AT_CHECK(m4_join([ ],
 # is not installed.
 m4_define([AT_JAVA_COMPILE],
 [AT_KEYWORDS(java)
-AT_SKIP_IF([[test -z "$CONF_JAVA$CONF_JAVAC"]])
+AT_SKIP_IF([[test -z "$CONF_JAVAC"]])
+AT_SKIP_IF([[test -z "$CONF_JAVA"]])
 AT_CHECK([[$SHELL ../../../javacomp.sh ]$1],
          [[0]], [ignore], [ignore])])
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]