(yyparse): Rewrite to avoid "comparison is always true due to limited
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 14 Oct 2002 06:54:41 +0000 (06:54 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 14 Oct 2002 06:54:41 +0000 (06:54 +0000)
range of data type" warning from GCC in synclines.at test.

data/yacc.c

index f3dcfab..cb690bb 100644 (file)
@@ -918,27 +918,19 @@ yybackup:
       YYDPRINTF ((stderr, "\n"));
     }
 
-  /* Set YYN to the action to take in STATE on seeing token YYCHAR1.
-     Result YYN means
-     - YYN < 0:  Reduce on rule -YYN.
-     - YYN = 0:  Error.
-     - YYN > 0:  Shift to state YYN.  */
+  /* If the proper action on seeing token YYCHAR1 is to reduce or to
+     detect an error, take that action.  */
   yyn += yychar1;
   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yychar1)
-    /* Defaulted action (reduction).  */
-    yyn = -yydefact[yystate];
-  else if (yytable[yyn] != YYTABLE_NINF)
-    yyn = yytable[yyn];
-  else
-    yyn = 0;
-
-  if (yyn < 0)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
     {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+       goto yyerrlab;
       yyn = -yyn;
       goto yyreduce;
     }
-  else if (yyn == 0)
-    goto yyerrlab;
 
   if (yyn == YYFINAL)
     YYACCEPT;