+2007-01-17 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Implement support for relative and absolute skeleton file names.
+ Discussed starting at
+ <http://lists.gnu.org/archive/html/bison-patches/2006-12/msg00071.html>.
+ * doc/bison.texinfo (Decl Summary): Document in %skeleton entry.
+ (Bison Options): Document in --skeleton entry.
+ * src/output.c (output_skeleton): Use strncpy rather than strcpy since
+ full_skeleton can't necessarily hold all of pkgdatadir.
+ If the specified skeleton file name contains a `/', don't prepend
+ pkgdatadir.
+ * src/parse-gram.y (prologue_declaration): If the specified skeleton
+ file name contains a `/', prepend the grammar file directory.
+ * tests/Makefile.am (TESTSUITE_AT): Add skeletons.at.
+ * skeletons.at: New file.
+ (relative skeleton file names): New test case.
+ (installed skeleton file names): New test case.
+ * tests/testsuite.at: Include skeletons.at.
+
+ * bootstrap: Update copyright to 2007.
+
+2007-01-17 Paolo Bonzini <bonzini@gnu.org>
+
+ * bootstrap: Remove occurrences of .#bootmp from the files.
+
+2007-01-17 Akim Demaille <akim@epita.fr>
+
+ * doc/bison.texinfo (Calc++ Parser): Don't try to alias
+ nonterminals.
+ Use per-type %printer.
+
+2007-01-17 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ * NEWS, data/c++-skel.m4, data/c++.m4, data/c-skel.m4, data/c.m4,
+ data/glr.c, data/glr.cc, data/lalr1.cc, data/location.cc,
+ djgpp/config.site, src/files.c, src/files.h, src/main.c,
+ src/muscle_tab.c, src/muscle_tab.h, src/parse-gram.y, src/reader.h,
+ src/scan-skel.h, src/scan-skel.l, tests/actions.at, tests/calc.at,
+ tests/glr-regression.at, tests/input.at, tests/local.at,
+ tests/output.at, tests/torture.at: Update copyright to 2007.
+
+2007-01-16 Akim Demaille <akim@epita.fr>
+
+ * doc/bison.texinfo (Calc++ Parsing Driver): Let "parse" return an
+ error code.
+ (Calc++ Scanner): Exit with failure if we can't open the input
+ file.
+ Accept "-" standing for stdin.
+ (Calc++ Top Level): Print the result only if the parsing was
+ successful.
+
+2007-01-16 Akim Demaille <akim@epita.fr>
+
+ * data/lalr1.cc (yy_reduce_print_): Add a missing end-of-line.
+
+2007-01-15 Paolo Bonzini <bonzini@gnu.org>
+ and Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Clean up %define and %code implementation in M4 some. Most
+ importantly, rename all related macros to be in the b4_percent_define
+ and b4_percent_code namespaces. Also, complete support for `.' in
+ %define variable names and %code qualifiers.
+ * data/bison.m4 (b4_check_user_names): Check for special
+ "SKELETON-NAMESPACE(name)" macros instead of using two nested
+ m4_foreach loops.
+ (b4_get_percent_define, b4_get_percent_code): Rename to...
+ (b4_percent_define_get, b4_percent_code_get): ... these.
+ Extend documentation with examples.
+ For SKELETON-NAMESPACE (as documented for b4_check_user_names), use
+ b4_percent_define_skeleton_variables and
+ b4_percent_code_skeleton_qualifiers.
+ Expect any value for the %define variable `foo' to be stored in the
+ macro named `b4_percent_define(foo)'; expect any %code blocks for the
+ qualifier `foo' to be stored in a macro named `b4_percent_code(foo)';
+ expect any unqualified %code blocks to be stored in a macro named
+ `b4_percent_code_unqualified'.
+ Use m4_indir so that %define variable names and %code qualifiers can
+ contain `.', which is allowed by the grammar parser.
+ (b4_percent_define_default): New macro to set a default value for a
+ %define variable.
+ (m4_wrap): Update wrapped code, and fix some underquoting.
+ (b4_check_user_names_wrap): Update and define outside the m4_wrap.
+ Expect grammar uses of %define variables and %code qualifiers to be
+ defined in b4_percent_define_user_variables and
+ b4_percent_code_user_qualifiers.
+ * data/c++.m4: Use b4_percent_define_default rather than
+ m4_define_default. Fix some underquoting. Skeleton usage of %define
+ variable define_location_comparison now implies skeleton usage of
+ %define variable filename_type.
+ * data/glr.c, data/glr.cc, data/lalr1.cc, data/location.cc,
+ data/push.c, data/yacc.c: Update macro names.
+ * src/parse-gram.y (prologue_declaration, grammar_declaration): Update
+ muscle names.
+
+2007-01-14 Juan Manuel Guerrero <juan.guerrero@gmx.de>
+
+ DJGPP specific issues.
+
+ * djgpp/config.site: Set ac_cv_path_mkdir to a sane DJGPP specific
+ default. Set gl_cv_absolute_wctype_h to a sane DJGPP specific default.
+
+2007-01-09 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ * tests/glr-regression.at: Use AT_PARSER_CHECK rather than AT_CHECK to
+ run parsers in all tests so that Valgrind is invoked during
+ maintainer-check-valgrind.
+ (Duplicate representation of merged trees): Free all semantic values.
+ (Duplicated user destructor for lookahead): Likewise.
+
+2007-01-09 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ * tests/local.at (AT_PARSER_CHECK): Add a PRE argument to specify a
+ command-line prefix.
+ * tests/torture.at (Exploding the Stack Size with Alloca): Stderr is
+ ignored, so use that PRE to set --log-fd=1 in VALGRIND_OPTS so we don't
+ miss Valgrind messages.
+ (Exploding the Stack Size with Malloc): Likewise.
+
+2007-01-09 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Ignore YYSTACK_USE_ALLOCA for push parsers since the stacks can't be
+ locals. Reported by Juan Manuel Guerrero at
+ <http://lists.gnu.org/archive/html/bug-bison/2007-01/msg00000.html>.
+ * data/push.c: Enclose the #ifdef YYSTACK_USE_ALLOCA in b4_push_if.
+ Fix some indentation also.
+ * tests/torture.at (Exploding the Stack Size with Alloca): Add comment
+ explaining this issue.
+
+2007-01-09 Paolo Bonzini <bonzini@gnu.org>
+ and Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Simplify union and prologue handling, and escape union and lex/parse
+ params with digraphs.
+ * data/bison.m4 (b4_pre_prologue, b4_post_prologue): Set their default
+ values to the empty string since these are no longer guaranteed
+ initialized by the front-end.
+ * data/glr.c, data/glr.cc, data/lalr1.cc, data/push.c, data/yacc.c: Add
+ braces around b4_user_stype since this is no longer done by the
+ front-end.
+ * src/files.c, src/files.h (pre_prologue_obstack,
+ post_prologue_obstack): Remove.
+ * src/muscle_tab.c (muscle_pair_list_grow): Don't duplicate header
+ comments here. Use MUSCLE_OBSTACK_SGROW so that values are escaped
+ with digraphs. This fixes lex params and parse params.
+ * src/muscle_tab.h (muscle_pair_list_grow): Update comments.
+ * src/output.c (prepare): Remove muscle insertion of the prologues.
+ (output): Remove freeing of pre_prologue_obstack and
+ post_prologue_obstack.
+ * src/parse-gram.y (prologue_declaration): Use muscle_code_grow rather
+ than prologue_augment for prologue parsing so you don't need prologue
+ obstacks.
+ (grammar_declaration): For %union RHS, use `braceless' instead of
+ "{...}" so that braces are already stripped and code is escaped with
+ digraphs.
+ * src/reader.c (prologue_augment): Remove.
+ (reader): Remove initialization of pre_prologue_obstack and
+ post_prologue_obstack.
+ * src/reader.h (prologue_augment): Remove.
+
+ * data/c.m4: Remove stray parenthesis.
+
+2007-01-08 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Remove quotes from variables names in %define directives and from
+ qualifiers in %code directives, and restrict the characters that are
+ allowed in them to M4-friendly ones. For %define, continue to support
+ the quoted form as a deprecated feature. Discussed starting at
+ <http://lists.gnu.org/archive/html/bison-patches/2007-01/msg00023.html>.
+ * NEWS (2.3a+): Add entry for the change to %define. Update entry for
+ %code.
+ * doc/bison.texinfo (Prologue Alternatives): Update.
+ (Bison Declaration Summary): In %defines entry, update mention of
+ `%code requires' and `%code provides'.
+ (C++ Location Values): Update %define uses.
+ (Calc++ Parser Interface): Likewise.
+ (Calc++ Parser): Likewise, and update `%code requires' uses.
+ (Bison Symbols): Update %code documentation.
+ * src/parse-gram.y (prologue_declaration): For %define variables, use
+ `variable' instead of `STRING'.
+ (grammar_declaration): For %code qualifiers, use `ID' instead of
+ `STRING'.
+ (variable): New nonterminal that takes an `ID' or a `STRING'.
+ * tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Update %code
+ and %define uses.
+ * tests/calc.at (_AT_DATA_CALC_Y): Update %define use.
+ * tests/input.at (Reject unused %code qualifiers): Update %code uses.
+ (%define errors): Update %define uses.
+
+2007-01-08 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ * src/parse-gram.y (prologue_declaration): Use MUSCLE_INSERT_STRING
+ instead of muscle_insert for %define values so that M4-special
+ characters are replaced with digraphs.
+ * tests/input.at (%define errors): Extend to check weird values.
+
+2007-01-08 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Instead of having skeletons declare all valid %define variables and
+ %code qualifiers, provide macros that retrieve the associated values
+ and build these lists automatically. Thus Bison will now warn when a
+ variable or qualifier is not used by the skeleton in the current
+ invocation regardless of whether it might sometimes be used by that
+ skeleton in other invocations. Also, move all %define value macros to
+ the b4_percent_define_ namespace, and remove the %define "NAME" {CODE}
+ form, which is replaced by %code.
+ * data/bison.m4 (b4_check_for_unrecognized_names): Rename to...
+ (b4_check_user_names): ... this, and change the series of valid name
+ arguments to a single list argument for names used in the skeleton
+ similar to the existing list argument for names used in the grammar.
+ Warn instead of complaining.
+ (b4_get_percent_define, b4_get_percent_code): New to retrieve %define
+ values and %code code, to format %code code properly, and to build
+ lists of all %define variables and %code qualifiers used in the
+ skeleton: b4_skeleton_percent_define_variables and
+ b4_skeleton_percent_code_qualifiers.
+ (b4_check_percent_define_variables, b4_check_percent_code_qualifiers):
+ Remove, and...
+ (m4_wrap): ... m4_wrap b4_check_user_names invocations instead so that
+ the skeleton names lists can finish building first. In place of
+ b4_used_percent_define_variables and b4_used_percent_code_qualifiers,
+ expect the lists b4_user_percent_define_variables and
+ b4_user_percent_code_qualifiers.
+ * data/c++.m4: Where setting default values for b4_parser_class_name,
+ b4_location_type, b4_filename_type, b4_namespace, and
+ b4_define_location_comparison, update their names to the
+ b4_percent_define_ namespace.
+ * data/glr.c: Don't use b4_check_percent_define_variables and
+ b4_check_percent_code_qualifiers. Use b4_get_percent_code.
+ * data/glr.cc, data/lalr1.cc: Likewise, and use b4_get_percent_define.
+ (b4_parser_class_name, b4_namespace): Define these using
+ b4_get_percent_define for parser_class_name and namespace.
+ * data/location.cc: Use b4_get_percent_define.
+ * data/push.c: Don't use b4_check_percent_define_variables and
+ b4_check_percent_code_qualifiers. Use b4_get_percent_code.
+ * data/yacc.c: Likewise, and don't call m4_exit in
+ b4_use_push_for_pull_if or m4_wrap code will never execute.
+ * src/muscle_tab.c, src/muscle_tab.h (muscle_grow_used_name_list):
+ Rename to...
+ (muscle_grow_user_name_list): ... this for consistency with the
+ terminology used in bison.m4.
+ * src/parse-gram.y (prologue_declaration): Prepend "percent_define_" to
+ %define variable names, and rename muscle used_percent_define_variables
+ to user_percent_define_variables.
+ (grammar_declaration): Rename muscle used_percent_code_qualifiers to
+ user_percent_code_qualifiers.
+ (content): Remove.
+ (content.opt): Replace content RHS with STRING RHS so %define "NAME"
+ {CODE} form is no longer accepted.
+ * tests/input.at (Reject bad %code qualifiers): Rename to...
+ (Reject unused %code qualifiers): ... this, and update test output.
+ (%define error): Update test output.
+
+2007-01-07 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Check for unrecognized %define variables similar to checking for
+ unrecognized %code qualifiers. Check for redefined %define variables.
+ * data/bison.m4 (b4_check_for_unrecognized_names): New macro that
+ generalizes...
+ (b4_check_percent_code_qualifiers): ... this, which now wraps it.
+ (b4_check_percent_define_variables): New, also wraps it.
+ * data/glr.c: Unless glr.cc is wrapping glr.c, declare no valid %define
+ variables using b4_check_percent_define_variables.
+ * data/glr.cc, data/lalr1.cc: Declare the valid %define variables as
+ all those exercised in the test suite and all those listed in the
+ `Default values' section of c++.m4. Are there others?
+ * data/push.c, data/yacc.c: Declare no valid %define variables.
+ * src/muscle_tab.c, src/muscle_tab.h (muscle_find_const): New function,
+ similar to muscle_find, but it works even when the muscle stores a
+ const value.
+ (muscle_grow_used_name_list): New function for constructing the used
+ name list muscles that b4_check_for_unrecognized_names requires.
+ * src/parse-gram.y (prologue_declaration): Warn if a variable is
+ %define'd more than once. Define the b4_used_percent_define_variables
+ muscle with muscle_grow_used_name_list.
+ (grammar_declaration): Abbreviate %code code with
+ muscle_grow_used_name_list.
+ * tests/input.at (%define errors): New.
+
+2007-01-06 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Provide warn_at, complain_at, and fatal_at function callbacks to the
+ skeletons, and use this for %code qualifier complaints.
+ * data/bison.m4 (b4_error_at): New, invoked by...
+ (b4_warn_at, b4_complain_at, b4_fatal_at): ... these new macros to wrap
+ the skeleton scanner's new @warn_at(...@), @complain_at(...@), and
+ @fatal_at(...@) directives.
+ (b4_check_percent_code_qualifiers): Rewrite to expect locations for
+ qualifiers in b4_used_percent_code_qualifiers and to use
+ b4_complain_at.
+ * src/location.c, src/location.h (boundary_set_from_string): New global
+ function.
+ * src/muscle_tab.c, src/muscle_tab.h (muscle_boundary_grow): New global
+ function.
+ * src/parse-gram.y (grammar_declaration): Add locations for qualifiers
+ to b4_used_percent_code_qualifiers.
+ * src/scan-skel.l (fail_for_at_directive_too_few_args): New static
+ function.
+ (AT_DIRECTIVE_ARGC_MAX): Increase for boundary arguments.
+ (lineno): Rename to...
+ (out_lineno): ... this so I don't misunderstand it again.
+ (SC_AT_DIRECTIVE_SKIP_WS): Don't increment out_lineno for newlines
+ here; these newlines are in the input but not the output file.
+ (SC_AT_DIRECTIVE_ARG): Likewise. Extract directive execution to...
+ (at_directive_perform): ... this new static function, and add handling
+ of new @warn_at(...@), @complain_at(...@), and @fatal_at(...@)
+ directives.
+ * tests/input.at (Reject bad %code qualifiers): Update test output with
+ locations and extend.
+
+ * tests/output.at (Output file name: [, Output file name: ]): Remove
+ bogus comment about these tests failing.
+
+2007-01-06 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Clean up b4_check_percent_code_qualifiers a little.
+ * data/bison.m4 (b4_check_percent_code_qualifiers): Expect qualifiers
+ in b4_used_percent_code_qualifiers to be double-M4-quoted. Rewrite
+ documentation and add examples.
+ * src/parse-gram.y (grammar_declaration): Double-M4-quote those
+ qualifiers here.
+
+2007-01-05 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Don't use m4_divert since it makes m4_divert_push and m4_divert_pop
+ unreliable -- especially when they're hidden inside another macro.
+ * data/bison.m4, data/c++-skel.m4, data/c++.m4, data/c-skel.m4,
+ data/c.m4: Remove m4_divert(-1).
+ * data/glr.c, data/glr.cc, data/lalr1.cc, data/location.cc,
+ data/push.c, data/yacc.c: Likewise, and replace m4_divert(0) with
+ m4_divert_push(0) and m4_divert_pop(0).
+ * src/output.c (output_skeleton): Don't add an m4_divert_push(0) and
+ an m4_wrap([m4_divert_pop(0)]) to the M4. Diversion -1, which is
+ pushed and popped by m4sugar, should be first on the stack.
+
+ Provide warn, complain, and fatal function callbacks to the skeletons.
+ This provides more flexibility than m4_fatal, improves the error
+ message format, and captures messages for translation. Discussed
+ starting at
+ <http://lists.gnu.org/archive/html/bison-patches/2006-12/msg00063.html>.
+ * data/bison.m4 (b4_error): New, invoked by...
+ (b4_warn, b4_complain, b4_fatal): ... these new macros to wrap the
+ skeleton scanner's new @warn(...@), @complain(...@), and @fatal(...@)
+ directives. Because these M4 macros might be called when the current
+ diversion is -1 or 0, m4_divert_push and m4_divert_pop is used; thus
+ the previous removal of uses of m4_divert, which caused trouble.
+ (b4_check_percent_code_qualifiers): Use b4_complain instead of
+ m4_fatal to report unrecognized %code qualifiers.
+ * data/c++-skel.m4: Use b4_complain instead of m4_fatal to report C++
+ push parser requests.
+ * data/glr.c: Use b4_complain instead of m4_fatal to report
+ non-deterministic push parser requests.
+ Update @output usage to @output(...@) form.
+ * data/glr.cc, data/lalr1.cc: Use b4_fatal instead of m4_fatal to
+ report missing %defines. Update @output usage to @output(...@) form.
+ * data/location.cc, data/push.c, data/yacc.c: Update @output usage to
+ @output(...@) form.
+ * src/main.c (main): Invoke skel_scanner_free.
+ * src/scan-skel.h (skel_scanner_free): Prototype new function.
+ * src/scan-skel.l (FLEX_NO_OBSTACK): Don't define; we now need the
+ obstack_for_string from flex-scanner.h.
+ (YY_DECL): Use to declare skel_lex static.
+ (decode_at_digraphs): Remove; now handled in the new
+ SC_AT_DIRECTIVE_ARG start condition.
+ (fail_for_at_directive_too_many_args, fail_for_invalid_at): New static
+ functions.
+ (at_directive_name, AT_DIRECTIVE_ARGC_MAX, at_directive_argc,
+ at_directive_argv): New static globals.
+ (INITIAL): Use fail_for_invalid_at.
+ Don't parse `@output file_name\n' or `@basename(...@)'. Instead,
+ recognize the start of a generalized `@directive(...@)' form and
+ start...
+ (SC_AT_DIRECTIVE_ARG): ... this new start condition to parse the
+ directive args (using the new obstack_for_string), to decode the
+ contained @ diagraphs, and to perform the directive. It recognizes
+ @basename(...@), @warn(...@), @complain(...@), @fatal(...@), and
+ @output(...@).
+ (SC_AT_DIRECTIVE_SKIP_WS): New start condition started by
+ SC_AT_DIRECTIVE_ARG to skip whitespace after the argument delimiter,
+ `@,'.
+ (scan_skel): Initialize obstack_for_string on the first call.
+ (skel_scanner_free): New function to free obstack_for_string.
+ * tests/input.at (Reject bad %code qualifiers): Update test output.
+
+2007-01-04 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Consolidate the 4 prologue alternative directives (%code, %requires,
+ %provides, and %code-top) into a single %code directive with an
+ optional qualifier field. Discussed at
+ <http://lists.gnu.org/archive/html/bison-patches/2007-01/msg00012.html>.
+ * NEWS (2.3a+): Rewrite the existing entry for the prologue
+ alternatives.
+ * doc/bison.texinfo (Prologue Alternatives): Update.
+ (Decl Summary): Update to %code "requires" and %code "provides".
+ (Calc++ Parser): Update to %code "requires".
+ (Bison Symbols): Remove entries for %requires, %provides, and
+ %code-top. Rewrite %code entry, and add a %code "QUALIFIER" entry.
+ * data/bison.m4 (b4_user_provides, b4_user_requires): Remove as these
+ are replaced by b4_percent_code_provides and b4_percent_code_requires,
+ which are skeleton-specific.
+ (b4_check_percent_code_qualifiers): New. A skeleton can use this to
+ declare what %code qualifiers it supports and to complain if any other
+ qualifiers were used in the grammar.
+ * data/glr.cc: Update to use b4_user_code([b4_percent_code_requires])
+ and b4_user_code([b4_percent_code_provides]) in place of
+ b4_user_requires and b4_user_provides.
+ * data/glr.c, data/lalr1.cc, data/push.c, data/yacc.c: Likewise.
+ Add b4_user_code([b4_percent_code_top]) and
+ b4_user_code([b4_percent_code]).
+ Invoke b4_check_percent_code_qualifiers.
+ * src/parse-gram.y (PERCENT_CODE_TOP, PERCENT_PROVIDES,
+ PERCENT_REQUIRES): Remove.
+ (grammar_declaration): Remove RHS's for %code-top, %provides, and
+ %requires. Rewrite the %code RHS as the unqualified form defining the
+ muscle b4_percent_code. Add another RHS for the qualified %code form,
+ which defines muscles of the form b4_percent_code_QUALIFIER and the
+ b4_used_percent_code_qualifiers muscle.
+ * src/scan-gram.l (PERCENT_CODE_TOP, PERCENT_PROVIDES,
+ PERCENT_REQUIRES): Remove.
+ * tests/actions.at (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Update to use
+ %code "requires" and %code "provides".
+ * tests/input.at (Reject bad %code qualifiers): New.
+
+2007-01-03 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Use the new code_props interface for destructors and printers.
+ * src/symtab.h (symbol, semantic_type): Remove destructor_location and
+ printer_location members, and change the type of the destructor and
+ printer members to code_props.
+ (symbol_destructor_set, symbol_destructor_get, symbol_printer_set,
+ symbol_printer_get, semantic_type_destructor_set,
+ semantic_type_printer_set, default_tagged_destructor_set,
+ default_tagless_destructor_set, default_tagged_printer_set,
+ default_tagless_printer_set): Use code_props in arguments and return
+ types in place of char const * and location.
+ (symbol_destructor_location_get, symbol_printer_location_get): Remove
+ since the locations are now contained in the return of
+ symbol_destructor_get and symbol_printer_get.
+ * src/output.c (symbol_destructors_output, symbol_printers_output):
+ Replace with...
+ (symbol_code_props_output): ... this to eliminate duplicate code.
+ (output_skeleton): Update to use symbol_code_props_output.
+ * src/reader.c (symbol_should_be_used): Update use of
+ symbol_destructor_get.
+ * src/symlist.c (symbol_list_destructor_set, symbol_list_printer_set):
+ Update uses of the various _destructor_set and _printer_set functions.
+ * src/symtab.c: (default_tagged_destructor_location,
+ default_tagless_destructor_location, default_tagged_printer_location,
+ default_tagless_printer_location): Remove since we...
+ (default_tagged_destructor, default_tagless_destructor,
+ default_tagged_printer, default_tagless_printer): ... change the type
+ of these to code_props.
+ (symbol_new, semantic_type_new, symbol_destructor_set,
+ semantic_type_destructor_set, symbol_destructor_get,
+ symbol_printer_set, semantic_type_printer_set, symbol_printer_get,
+ symbol_check_alias_consistency, default_tagged_destructor_set,
+ default_tagless_destructor_set, default_tagged_printer_set,
+ default_tagless_printer_set): Update.
+ (symbol_destructor_location_get, symbol_printer_location_get): Remove.
+ (SYMBOL_CODE_PRINT): New similar to SYMBOL_ATTR_PRINT but for
+ code_props members.
+ (symbol_print): Use SYMBOL_CODE_PRINT.
+
+2007-01-03 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Use the new code_props interface for rule actions.
+ * src/symlist.h (symbol_list): Replace action, action_location, and
+ used members with a code_props action_props member.
+ * src/reader.c (symbol_should_be_used, grammar_rule_check,
+ grammar_midrule_action, grammar_current_rule_merge_set,
+ grammar_current_rule_symbol_append, packgram): Update.
+ * src/scan-code.h (translate_rule_action): Remove, no longer used.
+ * src/scan-code.l (handle_action_dollar): Update.
+ (translate_rule_action): Remove, no longer used.
+ * src/symlist.c (symbol_list_sym_new, symbol_list_syms_print): Update.
+
+2007-01-02 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Use the new code_props interface in parse-gram.y.
+ * src/parse-gram.y (prologue_declaration, braceless, epilogue.opt):
+ Update all uses of translate_* functions to use the new code_props
+ interface and to use gram_scanner_last_string_free and
+ code_scanner_last_string_free where possible.
+ (grammar_declaration): symbol_list_destructor_set and
+ symbol_list_printer_set now perform the translation, so don't do it
+ here. Use gram_scanner_last_string_free where possible.
+ * src/scan-code.h, src/scan-code.l (translate_symbol_action,
+ translate_code): Remove, no longer used.
+ * src/symlist.h, src/symlist.c (symbol_list_destructor_set,
+ symbol_list_printer_set): Perform code translation here rather than
+ depending on the caller to do so.
+
+ * src/symlist.h (struct symbol_list): Correct some documentation typos.
+ * src/scan-gram.h (gram_last_string): Remove declaration.
+ * src/scan-gram.l (last_string): Declare it static.
+
+2007-01-02 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Encapsulate code properties and related functionality for the various
+ destructors, printers, and actions into a code_props structure and
+ interface. This patch merely implements code_props in scan-code.h and
+ scan-code.l. Future patches will rewrite other modules to use it.
+ Discussed starting at
+ <http://lists.gnu.org/archive/html/bison-patches/2006-11/msg00020.html>.
+ * src/location.h (EMPTY_LOCATION_INIT): Define so that it's easier to
+ consistently initialize const structs that have an empty location
+ field.
+ * src/location.c (empty_location): Initialize with EMPTY_LOCATION_INIT
+ to ensure consistency.
+ * src/scan-code.h (code_props): New structure.
+ (code_props_none_init, CODE_PROPS_NONE_INIT, code_props_none): New
+ function, macro, and const global variable for initializing a
+ code_props with no code.
+ (code_props_plain_init, code_props_symbol_action_init,
+ code_props_rule_action_init, code_props_translate_code): The rest of
+ the new code_props functional interface. Among other things, the init
+ functions set the code_props kind field so that
+ code_props_translate_code will know whether to behave like
+ translate_symbol_action, translate_rule_action, or translate_code.
+ These old translate functions must remain until all other modules are
+ updated to use the new code_props interface.
+ (code_scanner_last_string_free): New function similar to
+ gram_scanner_last_string_free.
+ (code_scanner_free): Add documentation.
+ * src/scan-code.l: Implement the new interface.
+ (code_lex): Make it static, add a code_props* argument, and remove the
+ rule argument.
+ (last_string): New static global similar to the one in scan-gram.l.
+ (SC_RULE_ACTION): Update to use the code_props* argument to code_lex
+ instead of rule.
+ (SC_SYMBOL_ACTION): For $$, set the is_value_used member of the
+ code_props since Bison may one day use this information for destructors
+ and printers.
+ (<*><<EOF>>): Use STRING_FINISH so that last_string is set.
+ (handle_action_dollar): Use symbol_list_n_get and set used flag
+ directly since symbol_list_n_used_set is removed.
+ (translate_action): Add a code_props* argument and remove the rule,
+ action, and location arguments. Pass the code_props* on to code_lex.
+ (translate_rule_action, translate_symbol_action, translate_code):
+ Rewrite as wrappers around the new code_props interface.
+ * src/symlist.h, src/symlist.c (symbol_list_n_used_set): Remove since
+ it would eventually need to break the encapsulation of code_props.
+
+2007-01-01 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ * etc/.cvsignore: New.
+
+2007-01-01 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Add maintainer-push-check to run maintainer-check using push parsing in
+ place of pull parsing where available.
+ * Makefile.am (maintainer-push-check): New.
+ * data/bison.m4 (b4_use_push_for_pull_if): New.
+ * data/push.c: Redefine b4_push_if and b4_use_push_for_pull_if
+ appropriately based on their existing values.
+ (yypush_parse): Don't print push-parser-specific diagnostics if push
+ parsing is being used in place of pull parsing.
+ * data/yacc.c: If push parsing should replace pull parsing, redirect to
+ push.c.
+ * src/output.c (prepare): Check BISON_USE_PUSH_FOR_PULL environment
+ variable, and insert b4_use_push_for_pull_flag into muscles.
+ * tests/Makefile.am (maintainer-push-check): New.
+
+2006-12-31 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ * data/push.c (yypush_parse): Set yynew = 1 at the end of a parse
+ (whether successful or failed) so that yypush_parse can be invoked
+ again to start a new parse using the same yypstate.
+ * tests/torture.at (AT_DATA_STACK_TORTURE): For push mode, extend to
+ check multiple yypull_parse invocations on the same yypstate. For pull
+ mode, extend to check multiple yyparse invocations.
+ (Exploding the Stack Size with Alloca): Extend to try with
+ %push-pull-parser.
+ (Exploding the Stack Size with Malloc): Likewise.
+
+ * tests/calc.at (Simple LALR Calculator): Don't specify
+ %skeleton "push.c" since %push-pull-parser implies that now.
+ * tests/headers.at (export YYLTYPE): Don't check for the push
+ declarations. Otherwise, this test case can't be used to see if push
+ mode can truly emulate pull mode.
+ * tests/input.at (Torturing the Scanner): Likewise.
+ * tests/local.at (AT_YACC_OR_PUSH_IF, AT_PUSH_IF): Remove.
+ (AT_YYERROR_SEES_LOC_IF): Rather than AT_YACC_OR_PUSH_IF, use
+ AT_YACC_IF, which now includes the case of push mode since %skeleton
+ need not be used for push mode. This will be more intuitive once
+ push.c is renamed to yacc.c.
+
+2006-12-31 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ For push mode, convert yyparse from a macro to a function, invoke yylex
+ instead of passing a yylexp argument to yypull_parse, and don't
+ generate yypull_parse or yyparse unless %push-pull-parser is declared.
+ Discussed starting at
+ <http://lists.gnu.org/archive/html/bison-patches/2006-12/msg00163.html>.
+ * data/bison.m4 (b4_pull_if): New.
+ * data/c.m4 (b4_identification): Define YYPULL similar to YYPUSH.
+ * data/push.c: Improve M4 quoting a little.
+ (b4_generate_macro_args, b4_parenthesize): Remove.
+ (yyparse): If there's a b4_prefix, #define this to b4_prefix[parse]
+ any time a pull parser is requested.
+ Don't #define this as a wrapper around yypull_parse. Instead, when
+ both push and pull are requested, make it a function that does that
+ same thing.
+ (yypull_parse): If there's a b4_prefix, #define this to
+ b4_prefix[pull_parse] when both push and pull are requested.
+ Don't define this as a function unless both push and pull are
+ requested.
+ Remove the yylexp argument and hard-code yylex invocation instead.
+ * etc/bench.pl.in (bench_grammar): Use %push-pull-parser instead of
+ %push-parser.
+ * src/getargs.c (pull_parser): New global initialized to true.
+ * getargs.h (pull_parser): extern it.
+ * src/output.c (prepare): Insert pull_flag muscle.
+ * src/parse-gram.y (PERCENT_PUSH_PULL_PARSER): New token.
+ (prologue_declaration): Set both push_parser and pull_parser = true for
+ %push-pull-parser. Set push_parser = true and pull_parser = false for
+ %push-parser.
+ * src/scan-gram.l: Don't accept %push_parser as an alternative to
+ %push-parser since there's no backward-compatibility concern here.
+ Scan %push-pull-parser.
+ * tests/calc.at (Simple LALR(1) Calculator): Use %push-pull-parser
+ instead of %push-parser.
+ * tests/headers.at (export YYLTYPE): Make yylex static, and don't
+ prototype it in the module that calls yyparse.
+ * tests/input.at (Torturing the Scanner): Likewise.
+ * tests/local.at (AT_PUSH_IF): Check for %push-pull-parser as well.
+
+2006-12-26 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Update etc/bench.pl. Optimize push mode a little (the yyn change
+ deserves most of the credit).
+ * Makefile.am (SUBDIRS): Add etc subdirectory.
+ * configure.ac (AC_CONFIG_FILES): Add etc/bench.pl and etc/Makefile.
+ * data/push.c (b4_declare_parser_state_variables): Move yyn, yyresult,
+ yytoken, yyval, and yyloc declarations to...
+ (yyparse or yypush_parse): ... here to improve performance. For
+ yypush_parse invocations after the first, be sure to assign yyn its old
+ value again.
+ (yypstate_new): Don't bother initializing the yyresult field since the
+ initial value isn't used.
+ (yyn, yyresult, yytoken, yyval, yyloc): For each NAME in this list,
+ remove the #define that, in push mode, set it to yyps->NAME.
+ * etc/Makefile.am: New.
+ * etc/bench.pl: Remove and build it instead from...
+ * etc/bench.pl.in: ... this new file. Use @abs_top_builddir@ to invoke
+ "tests/bison" from the build directory by default rather than just
+ invoking "bison" from $PATH.
+ (calc_grammar): Update push parser code: don't declare yylval globally,
+ don't define yyparse_wrapper, and don't #define yyparse.
+ (bench_grammar): Update to check all working combinations of yacc.c,
+ push.c, impure, pure, pull, and push.
+
+2006-12-25 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ For push mode, add pull wrappers around yypush_parse.
+ * data/push.c: (b4_generate_macro_args, b4_parenthesize): New macros.
+ (yypull_parse): New function wrapping yypush_parse.
+ (yyparse): New #define wrapping yypull_parse.
+ * tests/calc.at (_AT_DATA_CALC_Y): Call yyparse even when %push-parser
+ is declared.
+ * tests/headers.at (export YYLTYPE): Make yylex global. For push mode,
+ prototype yylex in the module that calls yyparse, and don't prototype
+ yyparse there. Otherwise, the yyparse expansion won't compile.
+ * tests/input.at (Torturing the Scanner): Likewise.
+
+2006-12-25 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Enable push parsers to operate in impure mode. Thus, %push-parser no
+ longer implies %pure-parser. The point of this change is to move
+ towards being able to test the push parser code by running the entire
+ test suite as if %push-parser had been declared.
+ * data/push.c (yypush_parse): For impure mode, remove the
+ yypushed_char, yypushed_val, and yypushed_loc arguments.
+ Instead, declare these as local variables initialized to the global
+ yychar, yylval, and yylloc.
+ For the first yypush_parse invocation only, restore the initial values
+ of these global variables when it's time to read a token since they
+ have been overwritten.
+ * src/parse-gram.y (prologue_declaration): Don't set pure_parser for
+ %push-parser.
+ * tests/calc.at (Simple LALR(1) Calculator): Always declare
+ %pure-parser along with %push-parser since this test case was designed
+ for pure push parsers.
+ * tests/local.at (AT_PURE_OR_PUSH_IF): Remove unused.
+ (AT_YACC_OR_PUSH_IF): New.
+ (AT_YYERROR_SEES_LOC_IF): Fix enough that the test suite passes, but
+ add a note that it's still wrong for some cases (as it has been for a
+ while).
+ (AT_PURE_LEX_IF): Use AT_PURE_IF instead of AT_PURE_OR_PUSH_IF since
+ %push-parser no longer implies %pure-parser.
+
+2006-12-20 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Remove some unnecessary differences between the pull parser code and
+ the push parser code. This patch enables yynerrs in push mode.
+ * data/push.c: Reformat M4 a little.
+ (b4_yyerror_range): Remove and convert all uses to just yyerror_range.
+ (b4_declare_scanner_communication_variables): Don't omit yynerrs just
+ because push mode is on. Instead, if pure mode is on, move yynerrs
+ to...
+ (b4_declare_parser_state_variables): ... here.
+ (yynerrs, yyerror_range): For push mode, #define each NAME in this list
+ to yyps->NAME so it can be used in yypush_parse.
+ (yypush_parse): Don't omit uses of yynerrs in push mode.
+
+2006-12-20 Joel E. Denny <jdenny@ces.clemson.edu>
+
+ Fix bug such that the first pushed token's value and location are
+ sometimes overwritten (sometimes by %initial-action) before being used.
+ * data/push.c (yypush_parse): Rename arguments yynchar, yynlval, and
+ yynlloc to yypushed_char, yypushed_val, and yypushed_loc for clarity.
+ For the first yypush_parse invocation, initialize yychar to YYEMPTY to
+ more closely mimic the pull parser logic.
+ Don't copy the pushed token to yychar, yylval, and yylloc until it's
+ time to read a token, which is after any initialization of yylval and
+ yylloc.
+ (gottoken): Rename label to...
+ (yyread_pushed_token): ... for clarity and to avoid infringing on the
+ user namespace.
+
2006-12-20 Joel E. Denny <jdenny@ces.clemson.edu>
Rearrange initialization of the parser state variables so that the
-----
Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996,
- 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free
- Software Foundation, Inc.
+ 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
Copying and distribution of this file, with or without
modification, are permitted provided the copyright notice and this