Merge branch 'maint'

* 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
This commit is contained in:
Akim Demaille
2012-08-03 10:52:55 +02:00
12 changed files with 160 additions and 47 deletions

View File

@@ -1 +1 @@
2.6.1 2.6.2

16
NEWS
View File

@@ -143,6 +143,22 @@ GNU Bison NEWS
* Noteworthy changes in release ?.? (????-??-??) [?] * 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] * Noteworthy changes in release 2.6.1 (2012-07-30) [stable]
Bison no longer executes user-specified M4 code when processing a grammar. Bison no longer executes user-specified M4 code when processing a grammar.

2
THANKS
View File

@@ -103,7 +103,7 @@ Sergei Steshenko sergstesh@yahoo.com
Shura debil_urod@ngs.ru Shura debil_urod@ngs.ru
Stefano Lattarini stefano.lattarini@gmail.com Stefano Lattarini stefano.lattarini@gmail.com
Steve Murphy murf@parsetree.com Steve Murphy murf@parsetree.com
Summum Bonum sum@geekhouse.org Sum Wu sum@geekhouse.org
Thiru Ramakrishnan thiru.ramakrishnan@gmail.com Thiru Ramakrishnan thiru.ramakrishnan@gmail.com
Tim Josling tej@melbpc.org.au Tim Josling tej@melbpc.org.au
Tim Landscheidt tim@tim-landscheidt.de Tim Landscheidt tim@tim-landscheidt.de

1
cfg.mk
View File

@@ -64,7 +64,6 @@ $(call exclude, \
prohibit_always-defined_macros+=?|^src/(parse-gram.c|system.h)$$ \ prohibit_always-defined_macros+=?|^src/(parse-gram.c|system.h)$$ \
prohibit_always-defined_macros+=?|^tests/regression.at$$ \ prohibit_always-defined_macros+=?|^tests/regression.at$$ \
prohibit_defined_have_decl_tests=?|^lib/timevar.c$$ \ 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=^doc/bison.texi$$ \
prohibit_magic_number_exit+=?|^tests/(conflicts|regression).at$$ \ prohibit_magic_number_exit+=?|^tests/(conflicts|regression).at$$ \
prohibit_strcmp=^doc/bison\.texi$$ \ prohibit_strcmp=^doc/bison\.texi$$ \

View File

@@ -2593,5 +2593,5 @@ b4_copyright([Skeleton interface for Bison GLR parsers in C],
]b4_cpp_guard_open([b4_spec_defines_file])[ ]b4_cpp_guard_open([b4_spec_defines_file])[
]b4_shared_declarations[ ]b4_shared_declarations[
]b4_cpp_guard_close([b4_spec_defines_file])[ ]b4_cpp_guard_close([b4_spec_defines_file])[
]])]) ]])])dnl
m4_divert_pop(0) m4_divert_pop(0)

View File

@@ -208,8 +208,7 @@ m4_pushdef([b4_parse_param], m4_defn([b4_parse_param_orig]))dnl
#endif #endif
]m4_popdef([b4_parse_param])dnl ]m4_popdef([b4_parse_param])dnl
b4_namespace_close[ b4_namespace_close])
]])
# Let glr.c believe that the user arguments include the parser itself. # Let glr.c believe that the user arguments include the parser itself.

View File

@@ -1933,7 +1933,6 @@ yypushreturn:]])[
#endif #endif
return yyresult; return yyresult;
} }
]b4_epilogue[]dnl ]b4_epilogue[]dnl
b4_defines_if( b4_defines_if(
[@output(b4_spec_defines_file@)@ [@output(b4_spec_defines_file@)@

2
gnulib

Submodule gnulib updated: 678815ea7c...bd54a45e6e

View File

@@ -775,11 +775,13 @@ add_param (param_type type, char *decl, location loc)
/* Strip the surrounding '{' and '}', and any blanks just inside /* Strip the surrounding '{' and '}', and any blanks just inside
the braces. */ the braces. */
while (*--p == ' ' || *p == '\t') --p;
continue; while (isspace ((unsigned char) *p))
--p;
p[1] = '\0'; p[1] = '\0';
while (*++decl == ' ' || *decl == '\t') ++decl;
continue; while (isspace ((unsigned char) *decl))
++decl;
} }
if (! name_start) if (! name_start)

View File

@@ -386,11 +386,9 @@ AT_YYERROR_SEES_LOC_IF([
fprintf (stderr, ": ");]) fprintf (stderr, ": ");])
fprintf (stderr, "%s\n", s); fprintf (stderr, "%s\n", s);
}])[ }])[
]AT_DEFINES_IF([], ]AT_DEFINES_IF([],
[AT_CALC_LEX [AT_CALC_LEX
AT_CALC_MAIN])[ AT_CALC_MAIN])])
]])
AT_DEFINES_IF([AT_DATA_SOURCE([[calc-lex.c]AT_SKEL_CC_IF([[c]])], AT_DEFINES_IF([AT_DATA_SOURCE([[calc-lex.c]AT_SKEL_CC_IF([[c]])],
[[#include "calc.h]AT_SKEL_CC_IF([[h]])[" [[#include "calc.h]AT_SKEL_CC_IF([[h]])["
@@ -500,6 +498,20 @@ AT_CHECK([cat stderr], 0, [expout])
]) ])
# AT_CHECK_SPACES([FILE])
# -----------------------
# Make sure we did not introduce bad spaces. Checked here because all
# the skeletons are (or should be) exercized here.
m4_define([AT_CHECK_SPACES],
[# No initial empty lines.
AT_CHECK([sed -ne '/./q;=;p;' $1])
# No trailing spaces.
# FIXME: For 2.7: AT_CHECK([sed -ne '/[ ]$/{=;p;}' $1])
# No final empty lines.
AT_CHECK([sed -ne '${/^$/{=;p;};}' $1])
])
# AT_CHECK_CALC([BISON-OPTIONS]) # AT_CHECK_CALC([BISON-OPTIONS])
# ------------------------------ # ------------------------------
# Start a testing chunk which compiles `calc' grammar with # Start a testing chunk which compiles `calc' grammar with
@@ -514,6 +526,8 @@ AT_BISON_OPTION_PUSHDEFS([$1])
AT_DATA_CALC_Y([$1]) AT_DATA_CALC_Y([$1])
AT_FULL_COMPILE([calc], AT_DEFINES_IF([[lex], [main]])) AT_FULL_COMPILE([calc], AT_DEFINES_IF([[lex], [main]]))
AT_CHECK_SPACES([calc.AT_SKEL_CC_IF([cc], [c])])
AT_DEFINES_IF([AT_CHECK_SPACES([calc.AT_SKEL_CC_IF([hh], [h])])])
# Test the priorities. # Test the priorities.
_AT_CHECK_CALC([$1], _AT_CHECK_CALC([$1],

View File

@@ -908,7 +908,6 @@ m4_define([AT_CHECK_DANCER],
[AT_SETUP([Dancer $1]) [AT_SETUP([Dancer $1])
AT_BISON_OPTION_PUSHDEFS([$1]) AT_BISON_OPTION_PUSHDEFS([$1])
_AT_DATA_DANCER_Y([$1]) _AT_DATA_DANCER_Y([$1])
AT_BISON_CHECK([-o dancer.c dancer.y])
AT_FULL_COMPILE([dancer]) AT_FULL_COMPILE([dancer])
AT_PARSER_CHECK([./dancer], 1, [], AT_PARSER_CHECK([./dancer], 1, [],
[syntax error, unexpected ':' [syntax error, unexpected ':'
@@ -993,7 +992,6 @@ m4_define([AT_CHECK_EXPECT2],
[AT_SETUP([Expecting two tokens $1]) [AT_SETUP([Expecting two tokens $1])
AT_BISON_OPTION_PUSHDEFS([$1]) AT_BISON_OPTION_PUSHDEFS([$1])
_AT_DATA_EXPECT2_Y([$1]) _AT_DATA_EXPECT2_Y([$1])
AT_BISON_CHECK([-o expect2.c expect2.y])
AT_FULL_COMPILE([expect2]) AT_FULL_COMPILE([expect2])
AT_PARSER_CHECK([./expect2], 1, [], AT_PARSER_CHECK([./expect2], 1, [],
[syntax error, unexpected '+', expecting A or B [syntax error, unexpected '+', expecting A or B
@@ -1578,3 +1576,87 @@ Stack now 0
m4_popdef([AT_LAC_CHECK]) m4_popdef([AT_LAC_CHECK])
AT_CLEANUP AT_CLEANUP
## ---------------------- ##
## Lex and parse params. ##
## ---------------------- ##
# AT_TEST(SKELETON)
# -----------------
# Check that the identifier of the params is properly fetched
# even when there are trailing blanks.
m4_pushdef([AT_TEST],
[AT_SETUP([[Lex and parse params: $1]])
AT_BISON_OPTION_PUSHDEFS([%locations %skeleton $1])
## FIXME: Improve parsing of parse-param and use the generated
## yyerror.
AT_DATA_GRAMMAR([input.y],
[[%defines
%locations
%skeleton $1
%union { int ival; }
%parse-param { int x }
// Spaces, tabs, and new lines.
%parse-param { @&t@
int y @&t@
@&t@
@&t@
}
%{
#include <stdio.h>
#include <stdlib.h>
]AT_SKEL_CC_IF([], [[
static
void
yyerror (int x, int y, const char *msg)
{
fprintf (stderr, "x: %d, y: %d, %s\n", x, y, msg);
}]])[
]AT_YYLEX_DECLARE[
%}
%%
exp: 'a' { fprintf (stdout, "x: %d, y: %d\n", x, y); };
%%
]AT_YYLEX_DEFINE(["a"])[
]AT_SKEL_CC_IF(
[AT_YYERROR_DEFINE
int
yyparse (int x, int y)
{
yy::parser parser(x, y);
return parser.parse ();
}
])[
int
main (void)
{
return !!yyparse(1, 2);
}
]])
AT_FULL_COMPILE([input])
AT_CHECK([./input], 0, [[x: 1, y: 2
]])
AT_BISON_OPTION_POPDEFS
AT_CLEANUP
])
## FIXME: test Java, and iterate over skeletons.
AT_TEST("yacc.c")
AT_TEST("glr.c")
AT_TEST("lalr1.cc")
AT_TEST("glr.cc")
m4_popdef([AT_TEST])

View File

@@ -64,22 +64,22 @@ m4_define([AT_SYNCLINES_COMPILE],
# distcc[35882] (dcc_connect_by_name) ERROR: failed to look up host "chrisimac": Unknown host # distcc[35882] (dcc_connect_by_name) ERROR: failed to look up host "chrisimac": Unknown host
# distcc[35882] Warning: failed to distribute input.c to chrisimac/4, running locally instead # distcc[35882] Warning: failed to distribute input.c to chrisimac/4, running locally instead
AT_CHECK([[perl -p -0777 -f - stderr <<\EOF AT_CHECK([[perl -p -0777 - stderr <<\EOF
s/^distcc\[\d+\] .*\n//gm; s/^distcc\[\d+\] .*\n//gm;
s/^([^:]*:\d+)[.:][^:]*:(.*)$/$][1:$][2/gm; s/^([^:]+:\d+)[.:][^:]+:(.+)$/$][1:$][2/gm;
s/^([^:]*:\d+:)[^#]*( #error)/$][1$][2/gm; s/^([^:]+:\d+):[^#]*( #error)/$][1:$][2/gm;
s/^[^:]*: In function '[^']*':\n//gm; s/^[^:]*: In function '[^']+':\n//gm;
s/^\ +#error.*\n\ *\^\n//gm; s/^\ +#error.*\n\ *\^\n//gm;
EOF EOF
]], ]],
0, [stdout]) 0, [stdout])
]) ])
# AT_TEST_SYNCLINE(TITLE, INPUT, ERROR-MSG) # AT_TEST(TITLE, INPUT, ERROR-MSG)
# ----------------------------------------- # --------------------------------
# Check that compiling the parser produced from INPUT cause GCC # Check that compiling the parser produced from INPUT cause GCC
# to issue ERROR-MSG. # to issue ERROR-MSG.
m4_define([AT_TEST_SYNCLINE], m4_pushdef([AT_TEST],
[AT_SETUP([$1]) [AT_SETUP([$1])
AT_BISON_OPTION_PUSHDEFS AT_BISON_OPTION_PUSHDEFS
# It seems impossible to find a generic scheme to check the location # It seems impossible to find a generic scheme to check the location
@@ -116,12 +116,12 @@ AT_CLEANUP
]) ])
## --------------------- ## ## ------------------- ##
## Prologue synch line. ## ## Prologue syncline. ##
## --------------------- ## ## ------------------- ##
AT_TEST_SYNCLINE([Prologue synch line], AT_TEST([Prologue syncline],
[[%{ [[%{
#error "2" #error "2"
]AT_YYERROR_DECLARE_EXTERN[ ]AT_YYERROR_DECLARE_EXTERN[
@@ -135,11 +135,11 @@ exp: '0';
]) ])
## ------------------- ## ## ----------------- ##
## %union synch line. ## ## %union syncline. ##
## ------------------- ## ## ----------------- ##
AT_TEST_SYNCLINE([%union synch line], AT_TEST([%union syncline],
[[%union { [[%union {
#error "2" #error "2"
char dummy; char dummy;
@@ -156,11 +156,11 @@ exp: '0';
]) ])
## ------------------------- ## ## ----------------------- ##
## Postprologue synch line. ## ## Postprologue syncline. ##
## ------------------------- ## ## ----------------------- ##
AT_TEST_SYNCLINE([Postprologue synch line], AT_TEST([Postprologue syncline],
[[%{ [[%{
]AT_YYERROR_DECLARE_EXTERN[ ]AT_YYERROR_DECLARE_EXTERN[
]AT_YYLEX_DECLARE_EXTERN[ ]AT_YYLEX_DECLARE_EXTERN[
@@ -180,11 +180,11 @@ exp: '0';
]) ])
## ------------------- ## ## ----------------- ##
## Action synch line. ## ## Action syncline. ##
## ------------------- ## ## ----------------- ##
AT_TEST_SYNCLINE([Action synch line], AT_TEST([Action syncline],
[[%{ [[%{
]AT_YYERROR_DECLARE_EXTERN[ ]AT_YYERROR_DECLARE_EXTERN[
]AT_YYLEX_DECLARE_EXTERN[ ]AT_YYLEX_DECLARE_EXTERN[
@@ -199,11 +199,11 @@ exp:
]) ])
## --------------------- ## ## ------------------- ##
## Epilogue synch line. ## ## Epilogue syncline. ##
## --------------------- ## ## ------------------- ##
AT_TEST_SYNCLINE([Epilogue synch line], AT_TEST([Epilogue syncline],
[[%{ [[%{
]AT_YYERROR_DECLARE_EXTERN[ ]AT_YYERROR_DECLARE_EXTERN[
]AT_YYLEX_DECLARE_EXTERN[ ]AT_YYLEX_DECLARE_EXTERN[
@@ -215,3 +215,5 @@ exp: '0';
]], ]],
[input.y:8: #error "8" [input.y:8: #error "8"
]) ])
m4_popdef([AT_TEST])