+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).
+ * data/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.