X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/8589431355773d9d34105d644ba0ec2d944853e5..945e396c8a4fcaa24f2445766a7098bf3c60f904:/ChangeLog?ds=inline diff --git a/ChangeLog b/ChangeLog index d2a4e6f0..86f8a353 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,491 @@ +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. + + * src/getargs.c (skeleton_arg): Last arg is now location const *. + Rewrite to simplify the logic. + (language_argmatch): Likewise. + (program_name): We now own this var. + * src/getargs.h (struct bison_language): Use char[] rather than + const char *. + + * doc/bison.texinfo (Decl Summary, Bison Options): Don't claim + Java is supported. + * src/complain.c (program_name): Remove decl; no longer needed. + * src/main.c (program_name): Remove; now belongs to getargs. + +2006-12-18 Paolo Bonzini + + * NEWS: Document %language. + + * data/Makefile.am (dist_pkgdata_DATA): Add c-skel.m4, c++-skel.m4. + + * data/c-skel.m4, data/c++-skel.m4: New files. + * data/glr.c: Complain on push parsers. + + * doc/bison.texinfo (C++ Parser Interface): Prefer %language + over %skeleton. + (Directives): Document %language and %skeleton. + (Command line): Document -L. + + * examples/extexi: Rewrite %require directive. + * examples/calc++/Makefile.am: Pass VERSION to extexi. + + * src/files.c (compute_exts_from_gc): Look in language structure + for .y extension. + (compute_file_name_parts): Check whether .tab should be added. + * src/getargs.c (valid_languages, skeleton_prio, language_prio): + (language, skeleton_arg, language_argmatch): New. + (long_options): Add --language. + (getargs): Use skeleton_arg, add -L/--language. + * src/getargs.h: Include location.h. + (struct bison_language, language, skeleton_arg, language_argmatch): New. + * src/output.c (prepare): Pick default skeleton from struct language. + Don't dispatch C skeletons here. + * src/parse-gram.y (PERCENT_LANGUAGE): New. + (prologue_declaration): Add "%language" rule, use skeleton_arg. + * src/scan-gram.l ("%language"): New rule. + + * tests/calc.at: Test %skeleton and %language. + * tests/local.at (AT_SKEL_CC_IF): Look for %language. + (AT_GLR_IF): Look for %skeleton "glr.cc". + (AT_LALR1_CC_IF, AT_GLR_CC_IF): Rewrite. + (AT_YACC_IF): Reject %language. + +2006-12-18 Paul Eggert + + * src/symtab.h (struct semantic_type): Remove the tag 'semantic_type', + since it wasn't used; only the typedef name 'semantic_type' is needed. + Also, omit trailing white space. + + * bootstrap: Sync from coreutils. + (gnulib_extra_files): Add build-aux/announce.gen. + (slurp): Adjust .gitignore files like .cvsignore files. + * build-aux/announce-gen: Remove from CVS, since bootstrap + now creates this. + +2006-12-16 Joel E. Denny + + Make %push-parser imply %pure-parser. This fixes several bugs; see + . + * src/parse-gram.y (prologue_declaration): For %push-parser, also set + pure_parser = true. + * data/push.c: Don't bother testing b4_push_if when deciding whether + to expand b4_declare_parser_variables globally. + (yypush_parse): Likewise in here. + + * data/push.c (yypush_parse): Add b4_parse_param to arguments. + (yy_reduce_print): Reformat M4 for readability. + +2006-12-15 Bob Rossi + and Joel Denny + + * data/push.c (yypstate): Add typedef, and update all uses of + struct yypstate to just yypstate. + * tests/calc.at (_AT_DATA_CALC_Y): Update here as well. + +2006-12-14 Bob Rossi + + * data/push.c (yypush_parse): Declare prototype regardless of + %locations option. + +2006-12-14 Bob Rossi + + * data/push.c (yyparse): Remove the prototype and the #define when in + push-parser mode. + +2006-12-13 Bob Rossi + + * data/push.c (yypstate_init): Rename to... + (yypstate_new): ... this and use b4_c_function_def. + (yypstate_delete): New. + (yypush_parse): Change parameters yynval and yynlloc to be const. + * tests/calc.at (_AT_DATA_CALC_Y): Use new yypstate_new and + yypstate_delete functions. + +2006-12-13 Joel E. Denny + + * configure.ac (AC_PREREQ): Require Autoconf 2.61 because of our + strange test case titles. Reported by Bob Rossi. + +2006-12-13 Paul Eggert + + * TODO: Add pointer to Sylvain Schmitz's work on static detection + of potential ambiguities in GLR grammers. + +2006-12-12 Joel E. Denny + + * tests/testsuite.at (AT_CHECK): When checking if $1 starts with + `bison ', use m4_index instead of m4_substr since chopping up a string + containing M4-special characters causes problems here. + + Fix a couple of bugs related to special characters in user-specified + file names, and make it easier for skeletons to compute output file + names with the same file name prefix as Bison-computed output file + names. + * data/glr.cc, data/push.c, data/yacc.c: In @output, use + b4_parser_file_name and b4_spec_defines_file instead of + @output_parser_name@ and @output_header_name@, which are now redundant. + * data/glr.c, data/lalr1.cc: Likewise. Also, in header #include's, use + b4_parser_file_name, b4_spec_defines_file, and the new + @basename(FILENAME@) instead of @output_parser_name@ and + @output_header_name@, which inappropriately escaped the file names as + C string literals. + * src/files.c (all_but_ext): Remove static qualifier. + (compute_output_file_names): Move `free (all_but_ext)' to... + (output_file_names_free): ... here since all_but_ext is needed later. + * src/files.h (all_but_ext): Extern. + * src/muscle_tab.h (MUSCLE_INSERT_STRING_RAW): New macro that does + exactly what MUSCLE_INSERT_STRING used to do. + (MUSCLE_INSERT_STRING): Use MUSCLE_OBSTACK_SGROW so that M4-special + characters are escaped properly. + * src/output.c (prepare): Define muscle file_name_all_but_ext as + all_but_ext. + For pkgdatadir muscle, maintain previous functionality by using + MUSCLE_INSERT_STRING_RAW instead of MUSCLE_INSERT_STRING. The problem + is that b4_pkgdatadir is used inside m4_include in the skeletons, so + digraphs would never be expanded. Hopefully no one has M4-special + characters in his Bison installation path. + * src/scan-skel.l: Don't parse @output_header_name@ and + @output_parser_name@ anymore since they're now redundant. + In @output, use decode_at_digraphs. + Parse a new @basename command that invokes last_component. + (decode_at_digraphs): New. + (BASE_QPUTS): Remove unused. + * tests/output.at (AT_CHECK_OUTPUT_FILE_NAME): New macro. + (Output file name): New tests. + +2006-12-09 Joel E. Denny + + Warn about output files that are generated by the skeletons and that + conflict with other output files. + * data/glr.c: Don't generate the header file here when glr.cc does. + * src/files.c (file_names, file_names_count): New static globals. + (compute_output_file_names): Invoke output_file_name_check for files + not generated by the skeletons and remove existing checks. + (output_file_name_check): New function that warns about conflicting + output file names. + (output_file_names_free): Free file_names. + * src/files.h (output_file_name_check): Declare. + * src/scan-skel.l: Invoke output_file_name_check for files generated by + the skeletons. + * tests/output.at (AT_CHECK_CONFLICTING_OUTPUT): New. + (Conflicting output files): New tests. + +2006-12-09 Ralf Wildenhues + + * doc/bison.texinfo: Fix a couple of typos. + +2006-12-08 Bob Rossi + + * data/push.c: (yypvarsinit, yypvars, struct yypvars, yypushparse): + Rename to... + (yypstate_init, yypstate, struct yypstate, yypush_parse): ... these and + update all uses. + (b4_yyssa, b4_yyerror_range, yypstate_init): Rename pv to yyps. + (yypush_parse): Rename yypvars argument to yyps and remove redundant + local pv. + (yypstate_init, yypush_parse): Declare in Bison-generated header file. + * tests/calc.at (_AT_DATA_CALC_Y): Use newly named functions. + +2006-12-07 Bob Rossi + and Joel Denny + + * data/push.c (yypvarsinit): Change return type from void* to struct + yypvars*. No longer cast to void* on return. + (struct yypvars): Remove yylen since it need not be remembered between + yypushparse invocations. + (yypushparse): Don't copy between yylen and pv->yylen. + +2006-12-05 Bob Rossi + + * data/push.c (yychar_set, yylval_set, yylloc_set): Delete. + (yypushparse): Add yynchar, yynlval, yynlloc parameters. + (b4_declare_parser_variables): Do not declare yynerrs for push mode. + (struct yypvars): Remove b4_declare_parser_variables. + (yypvarsinit): Remove init code for removed variables. + (global scope): Do not declare b4_declare_parser_variables if + push or pure mode. + (yypushparse): Add b4_declare_parser_variables. + Init new local variables, and remove init code for removed + yypvars variables. + (yyparse): Delete. + * tests/calc.at (_AT_DATA_CALC_Y): Call yypushparse for push mode + and yyparse for other modes. + (AT_CHECK_CALC_LALR): Added '%skeleton "push.c"' for push tests. + * tests/local.at (AT_PUSH_IF, AT_PURE_OR_PUSH_IF): Added. + (AT_YYERROR_SEES_LOC_IF): push-parser makes this false. + (AT_PURE_LEX_IF): True if pure or push parser. + 2006-12-05 Joel E. Denny Document Yacc prologue alternatives and default %destructor's and