+2006-12-07  Bob Rossi  <bob@brasko.net>
+       and Joel Denny  <jdenny@ces.clemson.edu>
+
+       * 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  <bob@brasko.net>
 
        * data/push.c (yychar_set, yylval_set, yylloc_set): Delete.
 
 ]b4_push_if([
 struct yypvars;
 enum { YYPUSH_MORE = 4 };
-]b4_c_function_decl([yypvarsinit], [void *], [[void], []])[
+]b4_c_function_decl([yypvarsinit], [struct yypvars *], [[void], []])[
 ]b4_c_function_decl([yypushparse], [int],
    [[struct yypvars *yypvars], [yypvars]],
    [[int yynchar], [yynchar]],
     /* The locations where the error started and ended.  */
     YYLTYPE yyerror_range[2];]]])[
     YYSIZE_T yystacksize;
-    int yylen;
     /* The variables used to return semantic value and location from the
        action routines.  */
     YYSTYPE yyval;
   };
 
 /* Initialize the parser data structure.  */
-void *
+struct yypvars*
 yypvarsinit (void)
 {
   struct yypvars *pv = (struct yypvars *) malloc (sizeof *pv);
 
 ]b4_locations_if([  pv->yylsp = pv->yyls;])[
 
-  return (void *) pv;
+  return pv;
 }])
 m4_divert_pop([KILL])dnl# ====================== End of M4 code.
 
        yylsp = pv->yylsp;]])[
 
        yystacksize = pv->yystacksize;
-       yylen = pv->yylen;
        yyval = pv->yyval;
        ]b4_locations_if([yyloc = pv->yyloc;])[
       if (pv->yynew == 0)
        pv->yylsp = yylsp;]])[
 
        pv->yystacksize = yystacksize;
-       pv->yylen = yylen;
        pv->yyval = yyval;
        ]b4_locations_if([pv->yyloc = yyloc;])[
        goto yypushreturn;