1
0
mirror of https://github.com/cc65/cc65.git synced 2025-01-10 19:29:45 +00:00

Improved error recovery with K&R-style function declarations.

This commit is contained in:
acqn 2022-11-12 12:28:27 +08:00
parent 894ba49cb5
commit eb595b1f5f

View File

@ -178,7 +178,7 @@ static void Parse (void)
** or semicolon, it must be followed by a function body.
*/
if ((Decl.StorageClass & SC_FUNC) != 0) {
if (CurTok.Tok != TOK_COMMA && CurTok.Tok != TOK_SEMI) {
if (CurTok.Tok == TOK_LCURLY) {
/* A definition */
Decl.StorageClass |= SC_DEF;
@ -190,6 +190,10 @@ static void Parse (void)
FuncDef->Flags = (FuncDef->Flags & ~FD_EMPTY) | FD_VOID_PARAM;
}
} else {
if (CurTok.Tok != TOK_COMMA && CurTok.Tok != TOK_SEMI) {
Error ("Expected ',' or ';' after top level declarator");
}
/* Just a declaration */
Decl.StorageClass |= SC_DECL;
}
@ -325,7 +329,7 @@ static void Parse (void)
if (CurTok.Tok == TOK_SEMI) {
/* Prototype only */
NextToken ();
} else {
} else if (CurTok.Tok == TOK_LCURLY) {
/* Parse the function body */
NewFunc (Sym, FuncDef);