platform/upstream/bison.git
11 years agodiagnostics: always point to the first directive
Akim Demaille [Mon, 22 Apr 2013 11:55:00 +0000 (13:55 +0200)]
diagnostics: always point to the first directive

Some directives cannot be used several times (e.g., a given symbol may
only have a single printer).  In case of repeated definitions, an
error is issued for the second definition, yet it is not discarded,
and becomes the definition used for the rest of the file.

This is not consistent with the idea that multiple definitions are not
allowed: discard any repeated directive.

* src/symtab.c (symbol_type_set, symbol_code_props_set)
(semantic_type_code_props_set, symbol_class_set, symbol_translation):
Discard repeated directives.
* tests/input.at (Default %printer and %destructor redeclared)
(Per-type %printer and %destructor redeclared): Update expectations.

11 years agotests: factor test for printer/desctructor redefined
Akim Demaille [Mon, 22 Apr 2013 11:47:50 +0000 (13:47 +0200)]
tests: factor test for printer/desctructor redefined

* tests/input.at (Default %printer and %destructor redeclared):
Introduce AT_TEST to factor.

11 years agodiagnostics: use appropriate location for useless precedence/associativity
Akim Demaille [Mon, 22 Apr 2013 09:26:28 +0000 (11:26 +0200)]
diagnostics: use appropriate location for useless precedence/associativity

* src/symtab.c (symbol_precedence_set): Use prec_location, not
location (which is the first occurrence of the symbol, possibly just
%token).
Also, as redefinitions are not allowed, keep the first values, not
the subsequent ones.
* tests/conflicts.at, tests/existing.at, tests/regression.at: Adjust.

11 years agotests: factor duplicate expected warnings
Akim Demaille [Mon, 22 Apr 2013 09:13:09 +0000 (11:13 +0200)]
tests: factor duplicate expected warnings

* tests/existing.at: Instead of "t ? abc : aBc", write "a(t?b:B)c".

11 years agotests: enable -Wsign-compare and fix corresponding warnings
Akim Demaille [Fri, 19 Apr 2013 15:13:07 +0000 (17:13 +0200)]
tests: enable -Wsign-compare and fix corresponding warnings

-Wsign-compare was disabled for bison's own code, following gnulib's
approach.  However, the generated parsers should not trigger such
warnings.

Reported by Efi Fogel.
http://lists.gnu.org/archive/html/help-bison/2013-04/msg00018.html

See also http://stackoverflow.com/questions/16101062 for the weird
"-(unsigned)i" piece of code.

* configure.ac (warn_tests): Enable -Wsign-compare.
* data/location.cc (position::add_): New.
(position::lines, position::columns): Use it.
* tests/actions.at (AT_CHECK_PRINTER_AND_DESTRUCTOR): Fix signedness issues.

11 years agomuscle: check more cases of %define variables with code values
Akim Demaille [Thu, 18 Apr 2013 14:52:55 +0000 (16:52 +0200)]
muscle: check more cases of %define variables with code values

* data/bison.m4 (b4_percent_define_check_kind): Fix overquotation.
(api.location.type, api.position.type): Check they have code values here.
* data/c++.m4 (api.location.type): No longer checked here.
(parser_class_name): Check it here.
* data/java.m4 (api.value.type, init_throws, lex_throws, parser_class_name)
(throws, annotations, extends, implements): Check they have code values.
* doc/bison.texi: Fix every incorrect occurrence of %define.
Document the additional syntax for %define: code values.
Document the additional syntax for -D/-F: string and code values.
* tests/calc.at, tests/headers.at, tests/input.at, tests/java.at,
* tests/local.at: Fix dependencies.

11 years agoregen
Akim Demaille [Thu, 18 Apr 2013 14:47:41 +0000 (16:47 +0200)]
regen

11 years agoparser: do not convert $ and @ in code values of %define variables
Akim Demaille [Thu, 18 Apr 2013 14:37:23 +0000 (16:37 +0200)]
parser: do not convert $ and @ in code values of %define variables

* src/parse-gram.y (value: "{...}"): Just strip the braces, but pass
the value as is.

11 years agoparser: no longer use the "braceless" non-terminal
Akim Demaille [Thu, 18 Apr 2013 14:36:54 +0000 (16:36 +0200)]
parser: no longer use the "braceless" non-terminal

The purpose of this symbol was only to factor function calls.  As a
result the actions were indeed simpler, but the grammar was somewhat
uselessly obfuscated.  Get rid of this symbol, but introduce functions
to simplify dependencies.

There is no (intended) changes of behavior here.

* src/parse-gram.y (strip_braces, translate_code(
(translate_code_braceless): New.
(braceless): Remove, use "{...}" instead, and one of the previous
functions depending on the context.
(STRING, "%{...%}", EPILOGUE): Declare as <code>, instead of <chars>,
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.

11 years agoregen
Akim Demaille [Thu, 18 Apr 2013 13:12:24 +0000 (15:12 +0200)]
regen

11 years agostyle: avoid %{...%} in our parser
Akim Demaille [Thu, 18 Apr 2013 13:11:53 +0000 (15:11 +0200)]
style: avoid %{...%} in our parser

* src/parse-gram.y (%{...%}): Split in %code and %code requires.
* src/location.h: Add missing includes for self containedness.

11 years agostyle: use %code for local function declarations in our parser
Akim Demaille [Thu, 18 Apr 2013 12:46:06 +0000 (14:46 +0200)]
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.

11 years agoregen
Akim Demaille [Tue, 16 Apr 2013 16:06:08 +0000 (18:06 +0200)]
regen

11 years agomuscle: check the kind of api.prefix, api.location.type
Akim Demaille [Tue, 16 Apr 2013 15:42:43 +0000 (17:42 +0200)]
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.

11 years agomuscle: enforce definition syntax for keyword variables
Akim Demaille [Sun, 14 Apr 2013 12:42:15 +0000 (14:42 +0200)]
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.

11 years agomuscle: let -D/-F support the three kinds of %define variable values
Akim Demaille [Mon, 15 Apr 2013 08:05:44 +0000 (10:05 +0200)]
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.

11 years agomuscle: minor refactoring
Akim Demaille [Sun, 14 Apr 2013 11:51:19 +0000 (13:51 +0200)]
muscle: minor refactoring

* src/muscle-tab.c (muscle_percent_define_default): Reduce the scopes.

11 years agomuscle: minor simplification which uncovers a missing warning
Akim Demaille [Sun, 14 Apr 2013 08:28:26 +0000 (10:28 +0200)]
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.

11 years agomuscle: factor the field retrieval
Akim Demaille [Sun, 14 Apr 2013 08:21:22 +0000 (10:21 +0200)]
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.

11 years agomuscle: factor the handling of used variables
Akim Demaille [Sun, 14 Apr 2013 08:12:36 +0000 (10:12 +0200)]
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.

11 years agomuscle: factor the computation of variable names
Akim Demaille [Sun, 14 Apr 2013 08:11:13 +0000 (10:11 +0200)]
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 *".

11 years agomuscle: factor the kind check in M4
Akim Demaille [Sat, 13 Apr 2013 07:30:05 +0000 (09:30 +0200)]
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.

11 years agomuscle: factor conditionals on defined %define variables
Akim Demaille [Mon, 15 Apr 2013 08:31:04 +0000 (10:31 +0200)]
muscle: factor conditionals on defined %define variables

* data/bison.m4 (b4_percent_define_ifdef_): New.
Use it where appropriate.

11 years agoapi.token.prefix: use code values
Akim Demaille [Thu, 11 Apr 2013 13:43:26 +0000 (15:43 +0200)]
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.

11 years agoc++: fix several issues with locations
Akim Demaille [Thu, 11 Apr 2013 07:53:18 +0000 (09:53 +0200)]
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.

11 years agomuscles: be sure that %code snippets are not glue together on a single line
Akim Demaille [Thu, 11 Apr 2013 07:21:08 +0000 (09:21 +0200)]
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.

11 years agostyle: fix comments
Akim Demaille [Thu, 11 Apr 2013 06:47:22 +0000 (08:47 +0200)]
style: fix comments

* tests/actions.at: Fix incorrect "prototype".

11 years agoMerge remote-tracking branch 'origin/maint'
Akim Demaille [Wed, 10 Apr 2013 07:23:20 +0000 (09:23 +0200)]
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

11 years agoapi.value.type: use keyword/brace values
Akim Demaille [Fri, 5 Apr 2013 12:40:25 +0000 (14:40 +0200)]
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

11 years agoapi.value.type: diagnose guaranteed failure with --yacc
Akim Demaille [Wed, 27 Mar 2013 08:18:32 +0000 (09:18 +0100)]
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'.

11 years agodoc: style changes
Akim Demaille [Mon, 25 Feb 2013 09:31:03 +0000 (10:31 +0100)]
doc: style changes

* doc/bison.texi (Destructor Decl, Printer Decl): Group series of %token
and %type together.

11 years agodoc: display locations in error as recommended by GNU Coding Standards
Akim Demaille [Sat, 23 Feb 2013 16:04:17 +0000 (17:04 +0100)]
doc: display locations in error as recommended by GNU Coding Standards

* doc/bison.texi (Actions and Locations): here.

11 years agodoc: api.value.type union
Akim Demaille [Sat, 23 Feb 2013 14:11:24 +0000 (15:11 +0100)]
doc: api.value.type union

* doc/bison.texi (Type Generation): New section.
(Multi-function Calc): Convert to use api.value.type=union.

11 years agodoc: move the section about "%union" where types are discussed
Akim Demaille [Sat, 23 Feb 2013 13:37:44 +0000 (14:37 +0100)]
doc: move the section about "%union" where types are discussed

* doc/bison.texi (Union Decl): Move to...
(Defining Language Semantics): here.

11 years agodoc: deprecate #define YYSTYPE in favor of %define api.value.type
Akim Demaille [Fri, 22 Feb 2013 11:47:25 +0000 (12:47 +0100)]
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.

11 years agovalue type: accept "->" in type tags
Akim Demaille [Thu, 21 Feb 2013 14:58:05 +0000 (15:58 +0100)]
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 <list->value.charptrVal> STRING
  %token <list->value.intVal> INTEGER
  %token <list->value.floatVal> REAL
  %type <list> ElementList LiteralType

* src/scan-code.l, src/scan-gram.l: Accept "->" in tags.
* tests/types.at: Add more test cases to cover this case.

11 years agostyle: simplify the scanning of type tags
Akim Demaille [Thu, 21 Feb 2013 13:32:16 +0000 (14:32 +0100)]
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.

11 years agoapi.value.type: implement proper support, check, and document
Akim Demaille [Fri, 8 Feb 2013 16:17:33 +0000 (17:17 +0100)]
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.

11 years agom4: allow the definition of side-effect only macros
Akim Demaille [Mon, 8 Apr 2013 18:37:09 +0000 (20:37 +0200)]
m4: allow the definition of side-effect only macros

* data/bison.m4 (b4_divert_kill, b4_define_silent): New.
* data/c.m4: Comment change.

11 years agovariant: fix inconsistent quotation
Akim Demaille [Mon, 8 Apr 2013 18:22:04 +0000 (20:22 +0200)]
variant: fix inconsistent quotation

* data/variant.hh (b4_char_sizeof): De-overquote.
(b4_value_type_declare): De-underquote.

11 years agom4: style changes in error messages
Akim Demaille [Fri, 5 Apr 2013 12:00:49 +0000 (14:00 +0200)]
m4: style changes in error messages

* data/bison.m4: Use $0 to denote the current macro's name.

11 years agoglr.cc: fix a clang warning
Akim Demaille [Mon, 8 Apr 2013 17:52:16 +0000 (19:52 +0200)]
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.

11 years agomaint: update copyright years
Akim Demaille [Mon, 8 Apr 2013 11:43:32 +0000 (13:43 +0200)]
maint: update copyright years

Run "make update-copyright".

11 years agobuild: fix VPATH issue
Akim Demaille [Sat, 12 Jan 2013 15:03:15 +0000 (16:03 +0100)]
build: fix VPATH issue

* Makefile.am (update-b4-copyright, update-package-copyright-year): Fix
path to build-aux.
(cherry picked from commit f6df83b4e80b2a53c08b5dc654e247076a3b9b03)

Conflicts:
Makefile.am

11 years agobuild: avoid clang's colored diagnostics in the test suite
Akim Demaille [Wed, 30 Jan 2013 14:52:34 +0000 (15:52 +0100)]
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.

Conflicts:
configure.ac

11 years agotests: please clang and use ".cc", not ".c", for C++ input
Akim Demaille [Mon, 28 Jan 2013 15:50:50 +0000 (16:50 +0100)]
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++.

11 years agognulib: update
Akim Demaille [Mon, 8 Apr 2013 09:19:09 +0000 (11:19 +0200)]
gnulib: update

11 years agoskeletons: avoid empty switch constructs
Akim Demaille [Mon, 8 Apr 2013 09:13:22 +0000 (11:13 +0200)]
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.

11 years agolalr1.cc: fix compiler warnings
Akim Demaille [Mon, 8 Apr 2013 08:54:12 +0000 (10:54 +0200)]
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.

11 years agoyacc.c: do not use __attribute__ unprotected
Akim Demaille [Mon, 8 Apr 2013 08:39:48 +0000 (10:39 +0200)]
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.

11 years agoapi.namespace: demonstrate and use {...} values instead of "..." values
Akim Demaille [Thu, 4 Apr 2013 15:27:36 +0000 (17:27 +0200)]
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.

11 years agogrammar: do not add a \n at the end of blocks of code
Akim Demaille [Thu, 4 Apr 2013 15:21:55 +0000 (17:21 +0200)]
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.

11 years agoregen
Akim Demaille [Thu, 4 Apr 2013 14:50:30 +0000 (16:50 +0200)]
regen

11 years agogrammar: record the kind of %define variable values
Akim Demaille [Thu, 4 Apr 2013 14:38:17 +0000 (16:38 +0200)]
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

11 years agostyle: fix comments
Akim Demaille [Thu, 4 Apr 2013 14:27:54 +0000 (16:27 +0200)]
style: fix comments

* src/muscle-tab.c (muscle_percent_define_ensure): Update obsolete
comments.

11 years agoregen
Akim Demaille [Thu, 4 Apr 2013 13:48:08 +0000 (15:48 +0200)]
regen

11 years agogrammar: style changes
Akim Demaille [Thu, 4 Apr 2013 13:41:49 +0000 (15:41 +0200)]
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.

11 years agogrammar: split %union to group together related aspects
Akim Demaille [Thu, 4 Apr 2013 13:32:49 +0000 (15:32 +0200)]
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.

11 years agomuscle: refactor
Akim Demaille [Thu, 4 Apr 2013 13:18:29 +0000 (15:18 +0200)]
muscle: refactor

* src/muscle-tab.c (muscle_lookup, muscle_entry_new): New.
(muscle_insert, muscle_grow, muscle_find_const, muscle_find): Use them.

11 years agostyle: comment changes
Akim Demaille [Wed, 3 Apr 2013 15:07:56 +0000 (17:07 +0200)]
style: comment changes

* src/muscle-tab.c: Move the documentation of public functions to...
* src/muscle-tab.h: here.
Fix comment consistency issues.

11 years agomuscle: minor refactoring
Akim Demaille [Wed, 3 Apr 2013 15:07:22 +0000 (17:07 +0200)]
muscle: minor refactoring

* src/muscle-tab.h (MUSCLE_INSERT_C_STRING): Use MUSCLE_INSERT_STRING.

11 years agoregen
Akim Demaille [Wed, 6 Mar 2013 09:28:16 +0000 (10:28 +0100)]
regen

11 years agogram: correct token numbering in precedence declarations
Valentin Tolmer [Tue, 5 Mar 2013 11:29:50 +0000 (12:29 +0100)]
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.

Signed-off-by: Akim Demaille <akim@lrde.epita.fr>
11 years agomaint: update autoconf submodule
Akim Demaille [Mon, 4 Mar 2013 17:26:25 +0000 (18:26 +0100)]
maint: update autoconf submodule

* submodules/autoconf: Up to master.
No significant changes in the files we use (m4sugar.m4 and foreach.m4).

11 years agodiagnostics: no longer include the yacc category in -Wall
Akim Demaille [Mon, 4 Mar 2013 17:15:49 +0000 (18:15 +0100)]
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.

11 years agogrammar: no longer detect and cure missing semicolon at end of actions
Akim Demaille [Mon, 25 Feb 2013 14:33:55 +0000 (15:33 +0100)]
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.

11 years agobuild: stop using bison -y
Akim Demaille [Wed, 27 Feb 2013 14:41:55 +0000 (15:41 +0100)]
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.

11 years agoc++: rename b4_semantic_type_declare as b4_value_type_declare
Akim Demaille [Fri, 8 Feb 2013 16:09:33 +0000 (17:09 +0100)]
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.

11 years agonews: typo
Akim Demaille [Sat, 23 Feb 2013 13:37:27 +0000 (14:37 +0100)]
news: typo

* NEWS: here.

11 years agostyle: space changes in the tests
Akim Demaille [Sat, 23 Feb 2013 13:44:33 +0000 (14:44 +0100)]
style: space changes in the tests

* tests/local.at: here.

11 years agostyle: formatting changes in the doc
Akim Demaille [Fri, 22 Feb 2013 12:18:17 +0000 (13:18 +0100)]
style: formatting changes in the doc

* doc/bison.texi: Use @file where appropriate.

11 years agotests: fix invalid C++11 code
Akim Demaille [Tue, 19 Feb 2013 16:44:08 +0000 (17:44 +0100)]
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.

11 years agotests: fix failures with G++ 4.8 in Flex scanner
Akim Demaille [Tue, 19 Feb 2013 16:42:33 +0000 (17:42 +0100)]
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.

11 years agoregen
Akim Demaille [Tue, 19 Feb 2013 09:07:37 +0000 (10:07 +0100)]
regen

11 years agognulib: update
Akim Demaille [Tue, 19 Feb 2013 08:32:43 +0000 (09:32 +0100)]
gnulib: update

11 years agostyle: rename variant private members
Akim Demaille [Tue, 19 Feb 2013 08:25:58 +0000 (09:25 +0100)]
style: rename variant private members

* data/variant.hh (buffer, tname, as_, raw, align_me): Rename as...
(yybuffer_, yytname_,yyas_, yyraw, yyalign_me): these.

11 years agostyle: space changes
Akim Demaille [Tue, 19 Feb 2013 08:21:26 +0000 (09:21 +0100)]
style: space changes

* data/variant.hh: Be sure to leave a space before arguments in function
calls.

11 years agovariant: fix G++ 4.4 warnings
Akim Demaille [Tue, 19 Feb 2013 07:55:15 +0000 (08:55 +0100)]
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.

11 years agonews: spell fixes
Akim Demaille [Mon, 18 Feb 2013 13:29:43 +0000 (14:29 +0100)]
news: spell fixes

* NEWS: here.

11 years agodiagnostics: factor and enhance messages about duplicate rule directives
Akim Demaille [Sun, 17 Feb 2013 11:47:35 +0000 (12:47 +0100)]
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.

11 years agostyle: no longer use backquotes
Akim Demaille [Sat, 16 Feb 2013 13:21:09 +0000 (14:21 +0100)]
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.

11 years agostyle: no longer use backquotes
Akim Demaille [Sat, 16 Feb 2013 13:07:25 +0000 (14:07 +0100)]
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.

11 years agostyle: no longer use backquotes in messages
Akim Demaille [Sat, 16 Feb 2013 13:04:46 +0000 (14:04 +0100)]
style: no longer use backquotes in messages

* src/getargs.c (usage): Use single quotes.

11 years agodoc: use %empty instead of /* empty */
Akim Demaille [Sat, 16 Feb 2013 12:49:04 +0000 (13:49 +0100)]
doc: use %empty instead of /* empty */

* doc/bison.texi: Change the comments into explicit %empty.

11 years agodoc: introduce %empty and -Wempty-rule
Akim Demaille [Sat, 16 Feb 2013 12:23:23 +0000 (13:23 +0100)]
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.

11 years agoreport: use %empty to denote empty rules
Akim Demaille [Sat, 16 Feb 2013 11:46:09 +0000 (12:46 +0100)]
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.

11 years agodiagnostics: %empty enables -Wempty-rule
Akim Demaille [Sat, 16 Feb 2013 08:23:48 +0000 (09:23 +0100)]
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.

11 years ago-Wempty-rule: diagnose empty rules without %empty
Akim Demaille [Sat, 9 Feb 2013 17:26:38 +0000 (18:26 +0100)]
-Wempty-rule: diagnose empty rules without %empty

* src/complain.h, src/complain.c (warning_empty_rule, Wempty_rule):
New warning category.
(warnings_args, warnings_types): Adjust.
* src/reader.c (grammar_rule_check): Check the empty rules are
flagged by %empty.
* tests/actions.at (Implicitly empty rule): New.
* tests/existing.at: Add expected warnings.

11 years agotests: use %empty
Akim Demaille [Sat, 16 Feb 2013 11:57:31 +0000 (12:57 +0100)]
tests: use %empty

* tests/actions.at, tests/input.at, tests/reduce.at,
* tests/regression.at:
here.

11 years agoregen
Akim Demaille [Sat, 9 Feb 2013 17:42:07 +0000 (18:42 +0100)]
regen

11 years agoparser: use %empty
Akim Demaille [Sat, 9 Feb 2013 12:47:14 +0000 (13:47 +0100)]
parser: use %empty

Avoid that Bison's own use of "bison -Wall" trigger warnings.

* src/parse-gram.y: Use %empty for every empty rule.

11 years agogrammar: introduce %empty
Akim Demaille [Tue, 29 Jan 2013 13:19:40 +0000 (14:19 +0100)]
grammar: introduce %empty

Provide a means to explicitly denote empty right-hand sides of rules:
instead of

  exp:  { ... }

allow

  exp: %empty { ... }

Make sure that %empty is properly used.

With help from Joel E. Denny and Gabriel Rassoul.
http://lists.gnu.org/archive/html/bison-patches/2013-01/msg00142.html

* src/reader.h, src/reader.c (grammar_current_rule_empty_set): New.
* src/parse-gram.y (%empty): New token.
Use it.
* src/scan-gram.l (%empty): Scan it.
* src/reader.c (grammar_rule_check): Check that %empty is properly used.
* tests/actions.at (Invalid uses of %empty, Valid uses of %empty): New.

11 years agogetargs: minor simplification
Akim Demaille [Thu, 14 Feb 2013 13:57:18 +0000 (14:57 +0100)]
getargs: minor simplification

* src/getargs.c (flag_argmatch): Simplify the handling of "none".

11 years agostyle: move argument handling of -W into the diagnostics module
Akim Demaille [Thu, 14 Feb 2013 13:35:24 +0000 (14:35 +0100)]
style: move argument handling of -W into the diagnostics module

This allows to reduce the number of public interfaces.

* src/getargs.c (--yacc): Use warning_argmatch instead of tweaking
directly warnings_flag (which will be private).
(warning_argmatch, warnings_argmatch): Move to...
* src/complain.h, src/complain.c: here.

* src/getargs.h, src/getargs.c (warnings_args, warnings_types): Move to...
* src/complain.c: here, now private.

* src/complain.h (severity, warnings_flag): Move to...
* src/complain.c: here, now private.

11 years agodiagnostics: revamp the handling of -Werror
Akim Demaille [Thu, 14 Feb 2013 08:25:36 +0000 (09:25 +0100)]
diagnostics: revamp the handling of -Werror

Recent discussions with Joel E. Denny
(http://lists.gnu.org/archive/html/bison-patches/2013-02/msg00026.html)
show that it is desirable to tell the difference between an option
that was explicitly disabled with -Wno-foo, as opposed to be left
unset.  The current framework does not allow this.

Instead of having a first int to store which options are enabled, and
another to store which are turned into errors, use an array that for
each warning category tells its status: disabled, unset, warning,
error.

* src/complain.h, src/complain.c (warning_bit): New enum.
(warnings): Use it.
(severity): New enum.
(warnings_flag): Now an array of severity.
(errors_flag): Remove, now done by warnings_flag.
(complain_init): New function, to initialie warnings_flag.
(warnings_are_errors): New Boolean, for -Werror.
* src/complain.c (warning_severity): New.
(warnings_print_categories, complains): Use it.
* src/getargs.c (warning_argmatch): Adjust to use warnings_flag.
(warnings_argmatch): Ditto.
Handle -Werror and -Wno-error here.
(getargs): Adjust.
* src/main.c (main): Call complain_init.
* tests/input.at (Invalid options): Add more corner cases.

11 years agooptions: simplify the handling of -W
Akim Demaille [Wed, 13 Feb 2013 20:11:10 +0000 (21:11 +0100)]
options: simplify the handling of -W

* src/getargs.c (warnings_argmatch, warning_argmatch): Simplify by
replacing function arguments with their actual values.
(WARNING_ARGMATCH): Remove, useless.
Adjust callers.

11 years agooptions: don't accept "error=" for -f and -r
Akim Demaille [Wed, 13 Feb 2013 16:29:42 +0000 (17:29 +0100)]
options: don't accept "error=" for -f and -r

* src/getargs.c (warning_argmatch, warnings_argmatch, WARNINGS_ARGMATCH):
New.
Use them for -W/--warning.
They are copied from...
(flag_argmatch, flags_argmatch, FLAGS_ARGMATCH): these.
Simplify by removing the support for "error".
* tests/input.at (Invalid options): New.
* TODO (Laxism in Bison invocation arguments): Remove.

11 years agodiagnostics: factor the list of warning names
Akim Demaille [Mon, 11 Feb 2013 09:25:08 +0000 (10:25 +0100)]
diagnostics: factor the list of warning names

* src/getargs.h, src/getargs.c (warnings_args, warnings_types): Make
them public.
* src/complain.h, src/complain.c (warnings_print_categories): Its
only use outside complain.c was removed in a recent commit, so
make it static.
Simplify its implementation.
Use warnings_args and warnings_types.
* src/muscle-tab.c (muscle_percent_define_check_values): Make it
silent.

11 years agodiagnostics: no longer pretty-print rules in error messages, carets suffice
Akim Demaille [Mon, 11 Feb 2013 09:17:36 +0000 (10:17 +0100)]
diagnostics: no longer pretty-print rules in error messages, carets suffice

* src/gram.c (grammar_rules_useless_report): Let -fcaret handle the
pretty-printing of the guilty rules.
(rule_print): Inline in its only use.
* tests/conflicts.at, tests/existing.at, tests/reduce.at,
* tests/regression.at: Adjust.
* NEWS: Document.

11 years agooptions: no longer document warnings when diagnosing an invalid -W
Akim Demaille [Mon, 11 Feb 2013 08:34:22 +0000 (09:34 +0100)]
options: no longer document warnings when diagnosing an invalid -W

The argmatch functions accept prefixes of the alternatives (like
getopt does for long options).  Bison uses this to document the
warning categories.  This is troublesome: it duplicates the --help
documentation, it is not gettextized, it is displayed with ugly quotes
(because argmatch uses it to display the list of possible answers),
and it prevents straighforward uses of the tables of valid warning
categories (for instance so that warning diagnostics end with the name
of the warning).

The "hidden" option --trace uses the same trick, but it does not need
to be translated, nor to be described in --help.

* src/getargs.c (warnings_args): Remove pseudo documentation.
Comment changes.