]> git.saurik.com Git - bison.git/blobdiff - ChangeLog
For push mode, add pull wrappers around yypush_parse.
[bison.git] / ChangeLog
index 2a550617e357325848ac5ad43f93159cca5bc157..e6fd29ceec00eacc9b72e4307aae5f1450776579 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,145 @@
+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
+       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  <jdenny@ces.clemson.edu>
+
+       * 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  <jdenny@ces.clemson.edu>
+
+       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  <jdenny@ces.clemson.edu>
+
+       * 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  <bonzini@gnu.org>
        and Joel E. Denny  <jdenny@ces.clemson.edu>