X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/fd575f05a48abaa84be69fc49aad2b3a1b80ee0d..6afc30cc8763e690a1f9b8aa21fbc7b72244b5c6:/ChangeLog diff --git a/ChangeLog b/ChangeLog index 34ec0b11..c32acde8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,626 @@ +2007-01-08 Joel E. Denny + + 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. Normally + this would be a bad idea since there might be cases when the variables + aren't used, but these variables are too pervasive in these skeletons + for that to be a problem. + * 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 + + 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 + + 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 + + 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 + + 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 + . + * 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 + + Consolidate the 4 prologue alternative directives (%code, %requires, + %provides, and %code-top) into a single %code directive with an + optional qualifier field. Discussed at + . + * 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 + + 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 + + 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 + + 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 + + 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 + . + * 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. + (<*><>): 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 + + * etc/.cvsignore: New. + +2007-01-01 Joel E. Denny + + 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 + + * 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 + + 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 + . + * 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 + + 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 + + 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 + + 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 + + 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 + + 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 + + Rearrange initialization of the parser state variables so that the + skeleton doesn't have to have a copy for pull mode and another for push + mode. This patch also fixes at least a bug such that yylloc was not + initialized (with b4_location_initial_line and + b4_location_initial_column) upon calling yypush_parse. However, that + initialization now overwrites the first token's location; + %initial-action assigning @$ already did the same thing, and both bugs + will be fixed in a later patch. + * data/push.c (b4_yyssa): Remove and convert all uses to just yyssa. + (b4_declare_parser_state_variables): Remove initialization of yytoken, + yyss, yyvs, yyls, and yystacksize. + (yypstate_new): Remove initialization of some yypstate fields: yystate, + yyerrstatus, yytoken, yyss, yyvs, yyls, yystacksize, yyssp, yyvsp, and + yylsp. + (yyssa, yyvsa, yylsa): For push mode, #define each NAME in this list to + yyps->NAME so it can be used in yypush_parse. + (yyparse or yypush_parse): For yypush_parse, don't print the + "Starting parse" diagnostic for invocations after the first. + Add initialization of yytoken, yyss, yyvs, yyls, and yystacksize; for + yypush_parse, only do it for the first invocation. + Allow yystate, yyerrstatus, yyssp, yyvsp, yylsp, and yylloc + initialization to occur in yypush_parse but only on the first + invocation. + +2006-12-19 Joel E. Denny + + * data/push.c: Add CPP guards around push parser declarations in both + the header and the code file. + In the code file, move the push parser declarations to the same place + they appear in the header file. + Clean up the M4 some, especially the inconsistent underquoting in + some b4_c_function_def and b4_c_function_decl uses. + +2006-12-19 Joel E. Denny + + Encapsulate the push parser state variables into an M4 macro so the + push skeleton doesn't have to list them again for pull mode's yyparse. + For push mode, remove yypush_parse's local equivalents of these + variables to eliminate unnecessary copying between the two sets at + run-time. This patch also fixes at least a bug related to multiple + %initial-action invocations in push mode. + * data/push.c (b4_declare_parser_variables): Rename to... + (b4_declare_scanner_communication_variables): ... this for clarity and + update both uses. + (b4_declare_yyparse_variables): Remove and move its contents to the one + spot where it was invoked. + (b4_declare_parser_state_variables): New macro containing the parser + state variables required by push mode. + (struct yypstate): Replace all fields but yynew with + b4_declare_parser_state_variables. + (yystate, yyn, yyresult, yyerrstatus, yytoken, yyss, yyssp, yyvs, + yyvsp, yyls, yylsp, yystacksize, yyval, yyloc): For push mode, #define + each NAME in this list to yyps->NAME so it can be used in yypush_parse. + (yyparse or yypush_parse): For yyparse in pull mode, replace local + parser state variable declarations with + b4_declare_parser_state_variables. + Don't initialize parser state variables when calling yypush_parse since + yypstate_new already does that. + Invoke the user's initial action only upon the first yypush_parse + invocation. + Remove all code that copies between the local parser state variables + and the yypstate. + +2006-12-19 Joel E. Denny + + * data/push.c (union yyalloc): Rename yyss, yyvs, and yyls fields to + prevent a name collision in a future patch where these names will + sometimes be #define'd. + (YYSTACK_RELOCATE): Add an argument to select a union yyalloc field + since it no longer has the same name as the existing argument. + (yyparse or yypush_parse): Update all uses of YYSTACK_RELOCATE. + +2006-12-19 Paolo Bonzini + and Joel E. Denny + + * doc/bison.texinfo (Decl Summary): In the %language entry, mention + that the argument is case-insensitive, and there's no `=' here. + For the %skeleton entry, mention that %language is better. + (Bison Options): Likewise for --language and --skeleton. Move the + --skeleton entry so that the `Tuning the parser' section is sorted + alphabetically on long options. + (C++ Bison Interface): Don't use the word skeleton. Don't explain the + %language directive in detail here; cross-reference the %language + documentation instead. + (Calc++ Parser): Use `%require "@value{VERSION}"' rather than + `%require "2.3b"' so that the example is always up-to-date. + (Bison Symbols): Add entries for %language and %skeleton. + * examples/extexi (normalize): Instead of replacing every %require + argument with the current Bison version, just substitute for + `@value{VERSION}'. This guarantees that we're testing what actually + appears in the documentation. + * examples/calc++/Makefile.am ($(calc_extracted)): Use `$(VERSION)' + rather than `@VERSION@'. + 2006-12-18 Paul Eggert * NEWS: Reword the %language news a bit, and put it earlier. @@ -18047,8 +18670,8 @@ ----- 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