* data/yacc.c (yyparse): Undo previous patch. Instead,
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 9 Jul 2005 08:26:29 +0000 (08:26 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 9 Jul 2005 08:26:29 +0000 (08:26 +0000)
set yylsp[0] and yyvsp[0] only if the initial action
sets yylloc and yylval, respectively.

ChangeLog
data/yacc.c

index b5f44ad..43e323b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2005-07-09  Paul Eggert  <eggert@cs.ucla.edu>
 
+       * data/yacc.c (yyparse): Undo previous patch.  Instead,
+       set yylsp[0] and yyvsp[0] only if the initial action
+       sets yylloc and yylval, respectively.
+
        * data/yacc.c (yyparse): In the initial action, set
        yylsp[0] and yyvsp[0] rather than yylloc and yylval.
        This avoids the use of undefined variables if the initial
index ebb0c9b..945d096 100644 (file)
@@ -859,16 +859,20 @@ b4_c_function_def([yyparse], [int], b4_parse_param)
 #endif
 ]])
 m4_ifdef([b4_initial_action], [
-m4_pushdef([b4_at_dollar],     [[yylsp[0]]])dnl
-m4_pushdef([b4_dollar_dollar], [[yyvsp[0]]])dnl
+m4_pushdef([b4_at_dollar],     [m4_define([b4_at_dollar_used])yylloc])dnl
+m4_pushdef([b4_dollar_dollar], [m4_define([b4_dollar_dollar_used])yylval])dnl
   /* User initialization code. */
 b4_initial_action
 m4_popdef([b4_dollar_dollar])dnl
 m4_popdef([b4_at_dollar])dnl
 /* Line __line__ of yacc.c.  */
-b4_syncline([@oline@], [@ofile@])])dnl
-[
-  goto yysetstate;
+b4_syncline([@oline@], [@ofile@])
+])dnl
+m4_ifdef([b4_dollar_dollar_used],[[  yyvsp[0] = yylval;
+]])dnl
+m4_ifdef([b4_at_dollar_used], [[  yylsp[0] = yylloc;
+]])dnl
+[  goto yysetstate;
 
 /*------------------------------------------------------------.
 | yynewstate -- Push a new state, which is found in yystate.  |