]> git.sur5r.net Git - cc65/commitdiff
Added better error recovery
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 13 Mar 2003 12:35:54 +0000 (12:35 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 13 Mar 2003 12:35:54 +0000 (12:35 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@2013 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/cc65/stmt.c

index ab091be3af230a0782f0dee9d566d6d189366e9c..408297a184d7051b0191082fba2624d661dc3fc9 100644 (file)
@@ -74,22 +74,40 @@ static void CheckTok (token_t Tok, const char* Msg, int* PendingToken)
  */
 {
     if (CurTok.Tok != Tok) {
-       Error (Msg);
+       Error (Msg);
     } else if (PendingToken) {
-       *PendingToken = 1;
+       *PendingToken = 1;
     } else {
-       NextToken ();
+       NextToken ();
     }
 }
 
 
 
 static void CheckSemi (int* PendingToken)
-/* Helper function for Statement. Will call CheckTok with the parameters
- * for a semicolon.
+/* Helper function for Statement. Will check for a semicolon and print an
+ * error message if not found (plus some error recovery). If PendingToken is
+ * NULL, it will the skip the token, otherwise it will store one to
+ * PendingToken.
+ * This function is a special version of CheckTok with the addition of the 
+ * error recovery.
  */
 {
-    CheckTok (TOK_SEMI, "`;' expected", PendingToken);
+    int HaveToken = (CurTok.Tok == TOK_SEMI);
+    if (!HaveToken) {
+       Error ("`;' expected");                                  
+        /* Try to be smart about errors */
+        if (CurTok.Tok == TOK_COLON || CurTok.Tok == TOK_COMMA) {
+            HaveToken = 1;
+        }
+    }
+    if (HaveToken) {
+        if (PendingToken) {
+            *PendingToken = 1;
+        } else {
+            NextToken ();
+        }
+    }
 }