, instead of , the difference between both is useless (well, I couldn't make sense of it, even after having read the initial commit that introduced them). (%union): Remove the now useless "chars" type. Adjust the printers. * src/scan-gram.l: Adjust. 2013-04-18 Akim Demaille regen 2013-04-18 Akim Demaille style: avoid %{...%} in our parser * src/parse-gram.y (%{...%}): Split in %code and %code requires. * src/location.h: Add missing includes for self containedness. 2013-04-18 Akim Demaille style: use %code for local function declarations in our parser * src/parse-gram.y (version_check, gram_error, char_name, lloc_default): Move their prototypes from %{...%} to %code. (YYLLOC_DEFAULT, YY_LOCATION_PRINT): Move from %{...%} to %code. (current_lhs): Move its implementation to the epilogue. 2013-04-16 Akim Demaille regen 2013-04-16 Akim Demaille muscle: check the kind of api.prefix, api.location.type * data/bison.m4: Check api.prefix. * data/c++.m4: Check api.location.type. * doc/bison.texi: Fix uses of api.value.type, api.prefix, api.location.type. Document {...} values for %define. * src/parse-gram.y: Fix use of api.prefix. * tests/calc.at: Fix uses of api.location.type. * tests/input.at: Check api.prefix, and api.location.type. 2013-04-15 Akim Demaille maint: post-release administrivia * NEWS: Add header line for next release. * .prev-version: Record previous version. * cfg.mk (old_NEWS_hash): Auto-update. 2013-04-15 Akim Demaille version 2.7.1 * NEWS: Record release date. 2013-04-15 Akim Demaille regen 2013-04-15 Akim Demaille muscle: enforce definition syntax for keyword variables * src/muscle-tab.c (muscle_percent_define_get_kind) (muscle_percent_define_check_kind): New. (muscle_percent_define_default): Variables with a default value are of "keyword" kind. (muscle_percent_define_flag_if, muscle_percent_define_check_values): Check that the variable is of keyword kind. * data/bison.m4: Likewise, but in M4. That is to say... (b4_percent_define_default): Define the kind when the variable is undefined. (b4_percent_define_check_kind): Use a better error message. (_b4_percent_define_check_values, _b4_percent_define_check_values): Former "enum" variables should be defined using the keyword syntax. * doc/bison.texi: Update. A couple of fixes. * tests/input.at (%define keyword variables): New. 2013-04-15 Akim Demaille muscle: let -D/-F support the three kinds of %define variable values See http://lists.gnu.org/archive/html/bison-patches/2013-04/msg00012.html * src/getargs.c (getargs): Recognize {value} and "value" for -D and -F. 2013-04-15 Akim Demaille muscle: minor refactoring * src/muscle-tab.c (muscle_percent_define_default): Reduce the scopes. 2013-04-15 Akim Demaille muscle: minor simplification which uncovers a missing warning * src/muscle-tab.c (muscle_percent_define_ensure): Discover the virtues of || to factor conditionals. * NEWS: As api.pure is no longer flagged as "used" by accident, we now have warnings for useless definitions. * tests/calc.at: So remove api.pure settings when running C++ tests, since C++ skeletons use a pure interface. 2013-04-15 Akim Demaille muscle: factor the field retrieval * src/muscle-tab.c (muscle_percent_define_get_raw): New. Use it where appropriate. (location_decode): No longer fetch the value from the table, take the value as argument. 2013-04-15 Akim Demaille muscle: factor the handling of used variables * src/muscle-tab.c (muscle_percent_define_use): New, corresponding to b4_percent_define_use. Use it where appropriate. 2013-04-15 Akim Demaille muscle: factor the computation of variable names * src/muscle-tab.c (muscle_name): New. Use it. Propagate "uniqstr" as value type instead of plain "char const *". 2013-04-15 Akim Demaille muscle: factor the kind check in M4 * data/bison.m4 (b4_percent_define_check_kind): New. Use it to check api.token.prefix. * data/c++.m4: Check the kind of api.namespace. * doc/bison.texi: Update a reference to former 'namespace' variable. * tests/input.at ("%define" code variables): Check api.namespace. 2013-04-15 Akim Demaille muscle: factor conditionals on defined %define variables * data/bison.m4 (b4_percent_define_ifdef_): New. Use it where appropriate. 2013-04-11 Akim Demaille api.token.prefix: use code values * data/bison.m4: Remove useless (and incorrect: m4_* instead of b4_*) default assignment to api.token.prefix. Check that api.token.prefix is assigned code. * tests/input.at (%define code variables): New test. * NEWS, doc/bison.texi, tests/c++.at, tests/calc.at, * tests/java.at, tests/local.at: Adjust to use braces. 2013-04-11 Akim Demaille c++: fix several issues with locations Reported by Daniel Frużyński. http://lists.gnu.org/archive/html/bug-bison/2013-02/msg00000.html * data/location.cc (position::columns, position::lines): Check for underflow. Fix some weird function signatures. (location): Accept signed integers as arguments where appropriate. Add operator- and operator+=. * doc/bison.texi (C++ position, C++ location): Various fixes and completion. * tests/c++.at (C++ Locations): New tests. 2013-04-11 Akim Demaille muscles: be sure that %code snippets are not glue together on a single line Recently "braceless" in the parser was changed so that an eol was no longer added to the value. This is not correct when a %code is used multiple times, because the syncline of the next snippet might be appended to the last (and not ended) line of the previous snippet. * src/muscle-tab.h (muscle_grow): Make it private. * src/muscle-tab.c (muscle_grow): Accept a fourth argument: a required terminator. Adjust callers. * tests/input.at (Multiple %code): New. 2013-04-11 Akim Demaille style: fix comments * tests/actions.at: Fix incorrect "prototype". 2013-04-10 Akim Demaille Merge remote-tracking branch 'origin/maint' * origin/maint: glr.cc: fix a clang warning maint: update copyright years build: fix VPATH issue build: avoid clang's colored diagnostics in the test suite tests: please clang and use ".cc", not ".c", for C++ input gnulib: update skeletons: avoid empty switch constructs lalr1.cc: fix compiler warnings yacc.c: do not use __attribute__ unprotected tests: style changes 2013-04-09 Akim Demaille api.value.type: use keyword/brace values Suggested by Joel E. Denny. http://lists.gnu.org/archive/html/bison-patches/2013-03/msg00016.html * data/bison.m4 (b4_percent_define_get_kind): New. (b4_variant_flag): Check that api.value.type is defined as the 'variant' keyword value. * data/c.m4 (_b4_value_type_setup_keyword): New. (b4_value_type_setup): Use it to simplify reading. Use b4_define_silent. Decode api.value.type, including its type. (b4_value_type_define): Likewise. * data/c++.m4 (b4_value_type_declare): Adjust the decoding of api.value.type, taking its kind into account. * doc/bison.texi: Adjust all the examples to the new syntax. * NEWS: Ditto. * tests/types.at: Adjust 2013-04-09 Akim Demaille api.value.type: diagnose guaranteed failure with --yacc Instead of generating invalid C code, generate an error when --yacc and '%define api.value.type union' are used together. * data/bison.m4: Issue an error in this case. * tests/types.at (%yacc vs. %define api.value.type union): New, check this error. * doc/bison.texi (Type Generation): Document it. * tests/output.at: Check that '-o y.tab.c' and '-y' behave equally wrt generated file names. * NEWS (Use of YACC='bison -y'): New. Promote the use of 'bison -o y.tab.c'. 2013-04-09 Akim Demaille doc: style changes * doc/bison.texi (Destructor Decl, Printer Decl): Group series of %token and %type together. 2013-04-09 Akim Demaille doc: display locations in error as recommended by GNU Coding Standards * doc/bison.texi (Actions and Locations): here. 2013-04-09 Akim Demaille doc: api.value.type union * doc/bison.texi (Type Generation): New section. (Multi-function Calc): Convert to use api.value.type=union. 2013-04-09 Akim Demaille doc: move the section about "%union" where types are discussed * doc/bison.texi (Union Decl): Move to... (Defining Language Semantics): here. 2013-04-09 Akim Demaille doc: deprecate #define YYSTYPE in favor of %define api.value.type * doc/bison.texi: Convert examples with YYSTYPE to use api.value.type. Deprecate YYSTYPE. 2013-04-09 Akim Demaille value type: accept "->" in type tags Provide a means to dereference pointers when defining tags. One example could be: %code requires { typedef struct ListElementType { union value { int intVal; float floatVal; char* charptrVal; } value; struct ListElementType* next; } ListElementType; } %union { ListElementType* list; } %token value.charptrVal> STRING %token value.intVal> INTEGER %token value.floatVal> REAL %type ElementList LiteralType * src/scan-code.l, src/scan-gram.l: Accept "->" in tags. * tests/types.at: Add more test cases to cover this case. 2013-04-09 Akim Demaille style: simplify the scanning of type tags * src/scan-gram.l: Remove the rule for simple tags: the "complex" case subsumes it. It was more efficient, but duplicated the code for a negligible benefit. 2013-04-09 Akim Demaille api.value.type: implement proper support, check, and document * data/c.m4 (b4_symbol_type_register, b4_type_define_tag) (b4_symbol_value_union, b4_value_type_setup_union) (b4_value_type_setup_variant, b4_value_type_setup): New. (b4_value_type_define): Use it to set up properly the type. Handle the various possible values of api.value.type. * data/c++.m4 (b4_value_type_declare): Likewise. * data/lalr1.cc (b4_value_type_setup_variant): Redefine. * tests/types.at: New. Exercise all the C/C++ skeletons with different types of api.value.type values. * tests/local.mk, tests/testsuite.at: Use it. * doc/bison.texi (%define Summary): Document api.value.type. * NEWS: Advertise it, together with api.token.constructor. 2013-04-09 Akim Demaille m4: allow the definition of side-effect only macros * data/bison.m4 (b4_divert_kill, b4_define_silent): New. * data/c.m4: Comment change. 2013-04-09 Akim Demaille variant: fix inconsistent quotation * data/variant.hh (b4_char_sizeof): De-overquote. (b4_value_type_declare): De-underquote. 2013-04-09 Akim Demaille m4: style changes in error messages * data/bison.m4: Use $0 to denote the current macro's name. 2013-04-08 Akim Demaille glr.cc: fix a clang warning * data/glr.cc (b4_epilogue): Be sure to end with an end-of-line, so that the file does end with one. 2013-04-08 Akim Demaille maint: update copyright years Run "make update-copyright". 2013-04-08 Akim Demaille build: fix VPATH issue * Makefile.am (update-b4-copyright, update-package-copyright-year): Fix path to build-aux. 2013-04-08 Akim Demaille build: avoid clang's colored diagnostics in the test suite The syncline tests, which try to recognize compiler diagnostics, are confused by escapes for colors. * configure.ac (warn_tests): New, to factor the warnings for both C and C++ tests. Add -fno-color-diagnostics to it. * tests/local.at (AT_TEST_TABLES_AND_PARSE): Do not remove glue together compiler flags. 2013-04-08 Akim Demaille tests: please clang and use ".cc", not ".c", for C++ input When fed with foo.c, clang++ 3.2 answers: clang: error: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated * tests/output.at (AT_CHECK_OUTPUT_FILE_NAME): Use *.cc and *.hh for C++. 2013-04-08 Akim Demaille gnulib: update 2013-04-08 Akim Demaille skeletons: avoid empty switch constructs Reported by Rob Conde. http://lists.gnu.org/archive/html/bug-bison/2013-03/msg00003.html * data/c.m4 (b4_symbol_actions): Rename as... (_b4_symbol_actions): this. (b4_symbol_actions): New wrapper. Do not emit empty switches. Adjust all b4_symbol_actions callers. 2013-04-08 Akim Demaille lalr1.cc: fix compiler warnings Reported by Rob Conde. http://lists.gnu.org/archive/html/bug-bison/2013-03/msg00003.html * data/stack.hh (operator=, stack(const stack&)): Make this class uncopyable, i.e., "undefine" these operators: make them private and don't implement them. (clear): New. * data/lalr1.cc: Use it instead of an assignment. (parser): Make this class uncopyable. 2013-04-08 Akim Demaille yacc.c: do not use __attribute__ unprotected Reported by Victor Khomenko. http://lists.gnu.org/archive/html/bug-bison/2013-04/msg00001.html * data/glr.c (YYUSE, __attribute__): Fuse their definition into... * data/c.m4 (b4_attribute_define): this new macro. * data/yacc.c, data/glr.c: Use it. 2013-04-05 Akim Demaille api.namespace: demonstrate and use {...} values instead of "..." values * tests/c++.at, tests/input.at: Use "%define api.namespace {foo}" instead of using quotes. * tests/local.at (AT_SETUP_STRIP, AT_NAME_PREFIX): Recognize uses of braces instead of quotes. * doc/bison.texi: Use braces for api.namespace's values. 2013-04-05 Akim Demaille grammar: do not add a \n at the end of blocks of code Now that we use "braceless" (which is {...} blocks of code with initial and final braces stripped) to denote "short" values (such as api.namespaces), the added end-of-line is a nuisance. As a matter of fact, this extra-safety was useless, as every expansion of "braceless" (aka, "user code") is followed by an end of line. * src/parse-gram.y, src/parse-gram.c (braceless): Instead of replacing the final brace by \n, just delete the brace. 2013-04-04 Akim Demaille regen 2013-04-04 Akim Demaille grammar: record the kind of %define variable values Provide a means to tell the difference between "keyword" values (e.g., %define api.pull both), "string" values (e.g., %define file.name "foo"), and "code" values (e.g., %define api.namespace {calc}). Suggested by Joel E. Denny. http://lists.gnu.org/archive/html/bison-patches/2013-03/msg00016.html * src/muscle-tab.h, src/muscle-tab.c (muscle_kind, muscle_kind_new) (muscle_kind_string): New. (muscle_percent_define_insert): Take the kind as new argument. Insert it in the muscle table. Adjust callers. * src/getargs.c: Adjust callers. * src/parse-gram.y: Ditto. (content.opt): Remove, replaced by... (value): this new non-terminal, whose semantics value is stored in the new "value" union member. Provide a printer. Support values in braces in additions to keyword and string values. fuse me 2013-04-04 Akim Demaille style: fix comments * src/muscle-tab.c (muscle_percent_define_ensure): Update obsolete comments. 2013-04-04 Akim Demaille regen 2013-04-04 Akim Demaille grammar: style changes * src/parse-gram.y (PARAM_TYPE): Remove useless typedef guard. There's a header guard. Use 'yyo' with %printer. Use a consistent style for %union one-liners. 2013-04-04 Akim Demaille grammar: split %union to group together related aspects * src/parse-gram.y (INT): Fuse the %type and %token declaration. Move its %union right before its introduction. (%union): Split in several %unions, right before their use. 2013-04-04 Akim Demaille muscle: refactor * src/muscle-tab.c (muscle_lookup, muscle_entry_new): New. (muscle_insert, muscle_grow, muscle_find_const, muscle_find): Use them. 2013-04-03 Akim Demaille style: comment changes * src/muscle-tab.c: Move the documentation of public functions to... * src/muscle-tab.h: here. Fix comment consistency issues. 2013-04-03 Akim Demaille muscle: minor refactoring * src/muscle-tab.h (MUSCLE_INSERT_C_STRING): Use MUSCLE_INSERT_STRING. 2013-03-06 Akim Demaille regen 2013-03-06 Valentin Tolmer gram: correct token numbering in precedence declarations In a precedence declaration, when tokens are declared with a litteral character (e.g., 'a') or with a identifier (e.g., B), Bison behaved differently: the litteral tokens would be numbered first, and then the other ones, leading to the following grammar: %right A B 'c' 'd' being numbered as such: 'c' 'd' A B. * src/parse-gram.y (symbol.prec): Set the symbol number when reading the symbols. * tests/conflicts.at (Token declaration order: literals vs. identifiers): New. 2013-03-04 Akim Demaille maint: update autoconf submodule * submodules/autoconf: Up to master. No significant changes in the files we use (m4sugar.m4 and foreach.m4). 2013-03-04 Akim Demaille diagnostics: no longer include the yacc category in -Wall It would be a pity to warn the users against Bison features... http://lists.gnu.org/archive/html/bison-patches/2013-02/msg00107.html * src/complain.h, src/complain.c (Wall): Disable Wyacc. (Weverything): New (hidden so far) category which really denotes all the categories (what used to be Wall). (warnings_args, warnings_types): Adjust. (warning_argmatch): Now !none = Weverything and conversely, no longer Wall. * NEWS, doc/bison.texi, src/getargs.c: Adjust the documentation. * tests/input.at (-Werror is not affected by -Wnone and -Wall): Adjust by not using a -Wyacc type of warning. 2013-03-04 Akim Demaille grammar: no longer detect and cure missing semicolon at end of actions Bison 3.0 is already breaking backward compatibility with other features. It is an appropriate time to drop this feature. Note that it was disabled when --yacc is passed. See http://lists.gnu.org/archive/html/bison-patches/2013-02/msg00102.html Basically, revert e8cd1ad655bcc704b06fb2f191dc3ac1df32b796. * src/scan-code.l (braces_level, need_semicolon, in_cpp): Remove. Remove every rule needed to detect and add missing semicolon. * tests/actions.at (Fix user actions without a trailing semicolon): Remove. * NEWS: Adjust. 2013-03-04 Akim Demaille build: stop using bison -y * Makefile.am (YACC): Pass -o y.tab.c, so that ylwrap is happy, and yet we don't pass --yacc to bison. (AM_YFLAGS): Disable Yacc warnings. 2013-02-23 Akim Demaille c++: rename b4_semantic_type_declare as b4_value_type_declare This is to match the names used in C and api.value.type, even if the parser actually defines semantic_type. * data/c++.m4 (b4_semantic_type_declare): Rename as... (b4_value_type_declare): this. * data/variant.hh: Likewise. 2013-02-23 Akim Demaille news: typo * NEWS: here. 2013-02-23 Akim Demaille style: space changes in the tests * tests/local.at: here. 2013-02-22 Akim Demaille style: formatting changes in the doc * doc/bison.texi: Use @file where appropriate. 2013-02-19 Akim Demaille tests: fix invalid C++11 code * tests/c++.at (Object): Somehow instances of Object were assigned YY_NULL, which is 0 most of the time (that case passes), but is nullptr in C++11, and there is nothing in Object to support such an assignment (failure). Use 0 as value, and provide the needed assignment operator. Also, use a more natural order within the class definition. 2013-02-19 Akim Demaille tests: fix failures with G++ 4.8 in Flex scanner * configure.ac (WARN_NO_NULL_CONVERSION_CXXFLAGS): Rename as... (FLEX_SCANNER_CXXFLAGS): this. Pass -Wno-zero-as-null-pointer-constant to G++ if it supports it. * examples/calc++/local.mk: Adjust. 2013-02-19 Akim Demaille regen 2013-02-19 Akim Demaille gnulib: update 2013-02-19 Akim Demaille style: rename variant private members * data/variant.hh (buffer, tname, as_, raw, align_me): Rename as... (yybuffer_, yytname_,yyas_, yyraw, yyalign_me): these. 2013-02-19 Akim Demaille style: space changes * data/variant.hh: Be sure to leave a space before arguments in function calls. 2013-02-19 Akim Demaille variant: fix G++ 4.4 warnings The changes by Théophile Ranquet about type punning issues need to be extend to in-place new to please G++ 4.4.7. * data/variant.hh (variant::as_): New, factors the casts that avoid compiler warnings. (as, build): Use them. 2013-02-18 Akim Demaille news: spell fixes * NEWS: here. 2013-02-18 Akim Demaille diagnostics: factor and enhance messages about duplicate rule directives When reporting a duplicate directive on a rule, point to its first occurrence: one.y:11.10-15: error: only one %empty allowed per rule %empty {} %empty ^^^^^^ one.y:11.3-8: previous declaration %empty {} %empty ^^^^^^ And consistently discard the second one. * src/complain.h, src/complain.c (duplicate_directive): New. * src/reader.c: Use it where appropriate. * src/symlist.h, src/symlist.c (symbol_list): Add a dprec_location member. * tests/actions.at: Adjust expected output. 2013-02-18 Akim Demaille style: no longer use backquotes * tests/actions.at, tests/atlocal.in, tests/c++.at, tests/calc.at, * tests/conflicts.at, tests/existing.at, tests/glr-regression.at, * tests/input.at, tests/java.at, tests/local.at, tests/sets.at, * tests/synclines.at, doc/bison.texi, lib/libiberty.h, lib/timevar.h: Use single quotes. 2013-02-18 Akim Demaille style: no longer use backquotes * README, REFERENCES, TODO, configure.ac, data/README, data/bison.m4, * data/c++.m4, data/c.m4, data/java.m4, data/lalr1.cc, * data/lalr1.java, data/yacc.c, doc/local.mk, etc/bench.pl.in, * src/conflicts.c, src/files.c, src/getargs.c, src/gram.h, src/lalr.c, * src/location.c, src/location.h, src/muscle-tab.c, src/muscle-tab.h, * src/output.c, src/parse-gram.c, src/parse-gram.y, src/print-xml.c, * src/print.c, src/reader.c, src/reduce.c, src/scan-skel.l, * src/symtab.h, src/system.h, src/tables.c: Use single quotes, as currently recommended by the GNU Coding Standards. 2013-02-18 Akim Demaille style: no longer use backquotes in messages * src/getargs.c (usage): Use single quotes. 2013-02-18 Akim Demaille doc: use %empty instead of /* empty */ * doc/bison.texi: Change the comments into explicit %empty. 2013-02-18 Akim Demaille doc: introduce %empty and -Wempty-rule * doc/bison.texi (Grammar Rules): Make it a @section which contains... (Rules Syntax): this new subsection (with the previous contents of "Grammar Rules". (Empty Rules): New subsection, extracted from the former "Grammar Rules". Document %empty. (Recursion): New a subsection of "Grammar Rules". Complete a few index entries. (Bison Options): Document -Wempty-rule. 2013-02-18 Akim Demaille report: use %empty to denote empty rules * src/gram.c (rule_rhs_print): Use %empty for empty rules. * tests/conflicts.at, tests/regression.at, tests/sets.at: Adjust. 2013-02-18 Akim Demaille diagnostics: %empty enables -Wempty-rule * src/complain.h, src/complain.c (warning_is_unset): New. * src/reader.c (grammar_current_rule_empty_set): If enabled -Wempty-rule, if not disabled. * tests/actions.at (Implicitly empty rule): Check this feature. Also check that -Wno-empty-rule does disable this warning. 2013-02-18 Akim Demaille