mirror of
https://github.com/cc65/cc65.git
synced 2025-01-11 11:30:13 +00:00
Fixed an internal error caused by muddling through after an error occurred and
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
This commit is contained in:
parent
a9de1a9e89
commit
ab83d5cd78
@ -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) {
|
||||
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);
|
||||
|
||||
/* Count arguments */
|
||||
++F->ParamCount;
|
||||
|
||||
/* Skip the identifier */
|
||||
NextToken ();
|
||||
|
||||
} else {
|
||||
/* Not a parameter name */
|
||||
Error ("Identifier expected");
|
||||
}
|
||||
|
||||
/* 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;
|
||||
|
||||
/* Skip the identifier */
|
||||
NextToken ();
|
||||
/* Try some smart error recovery */
|
||||
SkipTokens (TokenList, sizeof(TokenList) / sizeof(TokenList[0]));
|
||||
}
|
||||
|
||||
/* Check for more parameters */
|
||||
if (CurTok.Tok == TOK_COMMA) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user