]> git.saurik.com Git - bison.git/blobdiff - data/yacc.c
(yyparse): Rewrite to avoid "comparison is always true due to limited
[bison.git] / data / yacc.c
index f3dcfab47d37165adaeb89846fc14ae1752d502a..cb690bb72888301f88a585d52e628e1f98492ace 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;