]> git.sur5r.net Git - cc65/commitdiff
Fixed an internal error caused by muddling through after an error occurred and
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 18 Sep 2011 20:36:19 +0000 (20:36 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 18 Sep 2011 20:36:19 +0000 (20:36 +0000)
trying to add a duplicate identifier into the symbol table.

git-svn-id: svn://svn.cc65.org/cc65/trunk@5300 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/cc65/declare.c

index 93331f16068776663f0a133490264c66c8386c67..cf31728c7fadf063d589020833fad6f283e15829 100644 (file)
@@ -1050,22 +1050,31 @@ static Type* ParamTypeCvt (Type* T)
 static void ParseOldStyleParamList (FuncDesc* F)
 /* Parse an old style (K&R) parameter list */
 {
+    /* Some fix point tokens that are used for error recovery */
+    static const token_t TokenList[] = { TOK_COMMA, TOK_RPAREN, TOK_SEMI };
+
     /* Parse params */
     while (CurTok.Tok != TOK_RPAREN) {
 
        /* List of identifiers expected */
-       if (CurTok.Tok != TOK_IDENT) {
-           Error ("Identifier expected");
-       }
+       if (CurTok.Tok == TOK_IDENT) {
 
-       /* Create a symbol table entry with type int */
-       AddLocalSym (CurTok.Ident, type_int, SC_AUTO | SC_PARAM | SC_DEF | SC_DEFTYPE, 0);
+            /* Create a symbol table entry with type int */
+            AddLocalSym (CurTok.Ident, type_int, SC_AUTO | SC_PARAM | SC_DEF | SC_DEFTYPE, 0);
 
-       /* Count arguments */
-               ++F->ParamCount;
+            /* Count arguments */
+            ++F->ParamCount;
 
-       /* Skip the identifier */
-       NextToken ();
+            /* Skip the identifier */
+            NextToken ();
+
+       } else {
+            /* Not a parameter name */
+           Error ("Identifier expected");
+
+            /* Try some smart error recovery */
+            SkipTokens (TokenList, sizeof(TokenList) / sizeof(TokenList[0]));
+        }
 
        /* Check for more parameters */
        if (CurTok.Tok == TOK_COMMA) {