]> git.saurik.com Git - bison.git/commitdiff
Merge branch 'maint'
authorAkim Demaille <akim@lrde.epita.fr>
Fri, 3 Aug 2012 08:52:55 +0000 (10:52 +0200)
committerAkim Demaille <akim@lrde.epita.fr>
Fri, 3 Aug 2012 09:04:29 +0000 (11:04 +0200)
* origin/maint:
  maint: post-release administrivia
  version 2.6.2
  NEWS: update.
  yacc: remove trailing end of line at end of file
  thanks: fix a contributor name
  gnulib: update
  tests: synch line -> syncline, for consistency
  tests: synclines: style changes
  tests: synclines: fix perl invocation
  regen
  c++: trailing end-of-lines in %parse-param
  tests: simplify

Conflicts:
cfg.mk
data/glr.cc
data/yacc.c
src/parse-gram.c
src/parse-gram.h
src/parse-gram.y

1  2 
NEWS
THANKS
cfg.mk
data/glr.c
data/glr.cc
data/yacc.c
src/parse-gram.y
tests/calc.at
tests/regression.at

diff --cc NEWS
index 9fb03bb31c5d36b75f6662d46ac7b2e36b4823be,7fdbc037a834d5baad1c11782d03e48b039dab78..fd749368d50ebcfa12ffcb784fd99b2ee572b346
--- 1/NEWS
--- 2/NEWS
+++ b/NEWS
@@@ -2,147 -2,23 +2,163 @@@ GNU Bison NEW
  
  * Noteworthy changes in release ?.? (????-??-??) [?]
  
 +** Incompatible changes
 +
 +*** Obsolete features
 +
 +  Support for YYFAIL is removed (deprecated in Bison 2.4.2).
 +  Support for yystype and yyltype (instead of YYSTYPE and YYLTYPE)
 +  is removed (deprecated in Bison 1.875).
 +  Support for YYPARSE_PARAM is removed (deprecated in Bison 1.875).
 +
 +** Warnings
 +
 +*** Warning categories are now displayed
 +
 +  For instance:
 +
 +  foo.y:4.6: warning: type clash on default action: <foo> != <bar> [-Wother]
 +
 +*** Useless semantic types
 +
 +  Bison now warns about useless (uninhabited) semantic types.  Since
 +  semantic types are not declared to Bison (they are defined in the opaque
 +  %union structure), it is %printer/%destructor directives about useless
 +  types that trigger the warning:
 +
 +    %token <type1> term
 +    %type  <type2> nterm
 +    %printer    {} <type1> <type3>
 +    %destructor {} <type2> <type4>
 +    %%
 +    nterm: term { $$ = $1; };
 +
 +    3.28-34: warning: type <type3> is used, but is not associated to any symbol
 +    4.28-34: warning: type <type4> is used, but is not associated to any symbol
 +
 +*** Undeclared symbols
 +
 +  Bison used to raise an error for %printer and %destructor directives for
 +  undefined symbols.
 +
 +    %printer    {} symbol1
 +    %destructor {} symbol2
 +    %%
 +    exp: "a";
 +
 +  This is now only a warning.
 +
 +*** Useless destructors or printers
 +
 +  Bison now warns about useless destructors or printers.  In the following
 +  example, the printer for <type1>, and the destructor for <type2> are
 +  useless: all symbols of <type1> (token1) already have a printer, and all
 +  symbols of type <type2> (token2) already have a destructor.
 +
 +    %token <type1> token1
 +           <type2> token2
 +           <type3> token3
 +           <type4> token4
 +    %printer    {} token1 <type1> <type3>
 +    %destructor {} token2 <type2> <type4>
 +
 +** Additional yylex/yyparse arguments
 +
 +  The new directive %param declares additional arguments to both yylex and
 +  yyparse.  The %lex-param, %parse-param, and %param directives support one
 +  or more arguments.  Instead of
 +
 +    %lex-param   {arg1_type *arg1}
 +    %lex-param   {arg2_type *arg2}
 +    %parse-param {arg1_type *arg1}
 +    %parse-param {arg2_type *arg2}
 +
 +  one may now declare
 +
 +    %param {arg1_type *arg1} {arg2_type *arg2}
 +
 +** Java skeleton improvements
 +
 +  The constants for token names were moved to the Lexer interface.
 +  Also, it is possible to add code to the parser's constructors using
 +  "%code init" and "%define init_throws".
 +
 +** C++ skeletons improvements
 +
 +*** parser header (%defines) is no longer mandatory (lalr1.cc)
 +
 +  In which case, if needed, the support classes are defined in the generated
 +  parser, instead of additional files (location.hh, position.hh and
 +  stack.hh).
 +
 +*** locations are no longer mandatory (lalr1.cc, glr.cc)
 +
 +  Both lalr1.cc and glr.cc no longer require %location.
 +
 +*** syntax_error exception (lalr1.cc)
 +
 +  The C++ parser features a syntax_error exception, which can be
 +  thrown from the scanner or from user rules to raise syntax errors.
 +  This facilitates reporting errors caught in sub-functions (e.g.,
 +  rejecting too large integral literals from a conversion function
 +  used by the scanner, or rejecting invalid combinations from a
 +  factory invoked by the user actions).
 +
 +** Variable api.tokens.prefix
 +
 +  The variable api.tokens.prefix changes the way tokens are identified in
 +  the generated files.  This is especially useful to avoid collisions
 +  with identifiers in the target language.  For instance
 +
 +    %token FILE for ERROR
 +    %define api.tokens.prefix "TOK_"
 +    %%
 +    start: FILE for ERROR;
 +
 +  will generate the definition of the symbols TOK_FILE, TOK_for, and
 +  TOK_ERROR in the generated sources.  In particular, the scanner must
 +  use these prefixed token names, although the grammar itself still
 +  uses the short names (as in the sample rule given above).
 +
 +** Variable api.namespace
 +
 +  The "namespace" variable is renamed "api.namespace".  Backward
 +  compatibility is ensured, but upgrading is recommended.
 +
 +** Variable parse.error
 +
 +  The variable error controls the verbosity of error messages.  The
 +  use of the %error-verbose directive is deprecated in favor of
 +  %define parse.error "verbose".
 +
 +** Semantic predicates
 +
 +  The new, experimental, semantic-predicate feature allows actions of
 +  the form %?{ BOOLEAN-EXPRESSION }, which cause syntax errors (as for
 +  YYERROR) if the expression evaluates to 0, and are evaluated immediately
 +  in GLR parsers, rather than being deferred.  The result is that they
 +  allow the programmer to prune possible parses based on the values of
 +  run-time expressions.
 +
 +* Noteworthy changes in release ?.? (????-??-??) [?]
 +
  
+ * Noteworthy changes in release 2.6.2 (2012-08-03) [stable]
+ ** Bug fixes
+   Buffer overruns, complaints from Flex, and portability issues in the test
+   suite have been fixed.
+ ** Spaces in %lex- and %parse-param (lalr1.cc, glr.cc)
+   Trailing end-of-lines in %parse-param or %lex-param would result in
+   invalid C++.  This is fixed.
+ ** Spurious spaces and end-of-lines
+   The generated files no longer end (nor start) with empty lines.
  * Noteworthy changes in release 2.6.1 (2012-07-30) [stable]
  
   Bison no longer executes user-specified M4 code when processing a grammar.
diff --cc THANKS
Simple merge
diff --cc cfg.mk
index af1e09e8d94cedef4c9ff5a76fd2766ba6d2e20b,3a70379ceff32ac9cc53b0bd7c977366b4262593..e50c6293ee60bc618b92b16eca4bbbe5f20dba0d
--- 1/cfg.mk
--- 2/cfg.mk
+++ b/cfg.mk
@@@ -64,11 -70,10 +64,10 @@@ $(call exclude,                                                            
    prohibit_always-defined_macros+=?|^src/(parse-gram.c|system.h)$$    \
    prohibit_always-defined_macros+=?|^tests/regression.at$$            \
    prohibit_defined_have_decl_tests=?|^lib/timevar.c$$                 \
-   prohibit_empty_lines_at_EOF=^src/parse-gram.h$$                     \
    prohibit_magic_number_exit=^doc/bison.texi$$                                \
    prohibit_magic_number_exit+=?|^tests/(conflicts|regression).at$$    \
 +  prohibit_strcmp=^doc/bison\.texi$$                                  \
    require_config_h_first=^(lib/yyerror|data/(glr|yacc))\.c$$          \
    space_tab=^tests/(input|c\+\+)\.at$$                                        \
 -  trailing_blank=^src/parse-gram.[ch]$$                                       \
    unmarked_diagnostics=^(djgpp/|doc/bison.texi$$)                     \
  )
diff --cc data/glr.c
Simple merge
diff --cc data/glr.cc
Simple merge
diff --cc data/yacc.c
index 5b5b1bc4d008ee41cff74bb54976be6db8443183,01756884a1fa344d385050d9fd7bb5d4f4a12c67..da4e9e390fff1d6311eb430551d483bc9acde02a
@@@ -1931,9 -2040,11 +1931,8 @@@ yypushreturn:]])
    if (yymsg != yymsgbuf)
      YYSTACK_FREE (yymsg);
  #endif
 -  /* Make sure YYID is used.  */
 -  return YYID (yyresult);
 +  return yyresult;
  }
 -
--
  ]b4_epilogue[]dnl
  b4_defines_if(
  [@output(b4_spec_defines_file@)@
index 518969948f0586a22d438f41606175240e32e19d,02af75e2968d5a2a237f9ff73beea3ba628a9c65..fbb9b54645addc40f365c052e552bd665023459e
@@@ -762,29 -722,28 +762,31 @@@ add_param (param_type type, char *decl
      "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
      "_"
      "0123456789";
 +
    char const *name_start = NULL;
 -  char *p;
 -
 -  /* Stop on last actual character.  */
 -  for (p = decl; p[1]; p++)
 -    if ((p == decl
 -       || ! memchr (alphanum, p[-1], sizeof alphanum))
 -      && memchr (alphanum, p[0], sizeof alphanum - 10))
 -      name_start = p;
 -
 -  /* Strip the surrounding '{' and '}', and any blanks just inside
 -     the braces.  */
 -  --p;
 -  while (isspace ((unsigned char) *p))
 +  {
 +    char *p;
 +    /* Stop on last actual character.  */
 +    for (p = decl; p[1]; p++)
 +      if ((p == decl
 +           || ! memchr (alphanum, p[-1], sizeof alphanum))
 +          && memchr (alphanum, p[0], sizeof alphanum - 10))
 +        name_start = p;
 +
 +    /* Strip the surrounding '{' and '}', and any blanks just inside
 +       the braces.  */
-     while (*--p == ' ' || *p == '\t')
-       continue;
+     --p;
 -  p[1] = '\0';
 -  ++decl;
 -  while (isspace ((unsigned char) *decl))
++    while (isspace ((unsigned char) *p))
++      --p;
 +    p[1] = '\0';
-     while (*++decl == ' ' || *decl == '\t')
-       continue;
+     ++decl;
++    while (isspace ((unsigned char) *decl))
++      ++decl;
 +  }
  
    if (! name_start)
 -    complain_at (loc, _("missing identifier in parameter declaration"));
 +    complain_at (loc, complaint,
 +                 _("missing identifier in parameter declaration"));
    else
      {
        char *name = xmemdup0 (name_start, strspn (name_start, alphanum));
diff --cc tests/calc.at
Simple merge
Simple merge