mirror of
https://github.com/cc65/cc65.git
synced 2024-12-23 19:29:37 +00:00
Fixed extra "Macro argument count mismatch" message when a macro argument list is unterminated.
This commit is contained in:
parent
60c1290468
commit
2c9c8ee196
@ -446,10 +446,14 @@ static int MacName (char* Ident)
|
||||
|
||||
|
||||
static void ReadMacroArgs (MacroExp* E)
|
||||
/* Identify the arguments to a macro call */
|
||||
/* Identify the arguments to a macro call as-is */
|
||||
{
|
||||
int MissingParen = 0;
|
||||
unsigned Parens; /* Number of open parenthesis */
|
||||
StrBuf Arg = STATIC_STRBUF_INITIALIZER;
|
||||
StrBuf Arg = AUTO_STRBUF_INITIALIZER;
|
||||
|
||||
/* Eat the left paren */
|
||||
NextChar ();
|
||||
|
||||
/* Read the actual macro arguments */
|
||||
Parens = 0;
|
||||
@ -512,7 +516,7 @@ static void ReadMacroArgs (MacroExp* E)
|
||||
} else if (CurC == '\0') {
|
||||
/* End of input inside macro argument list */
|
||||
PPError ("Unterminated argument list invoking macro '%s'", E->M->Name);
|
||||
|
||||
MissingParen = 1;
|
||||
ClearLine ();
|
||||
break;
|
||||
} else {
|
||||
@ -522,6 +526,21 @@ static void ReadMacroArgs (MacroExp* E)
|
||||
}
|
||||
}
|
||||
|
||||
/* Compare formal and actual argument count */
|
||||
if (CollCount (&E->ActualArgs) != (unsigned) E->M->ArgCount) {
|
||||
|
||||
if (!MissingParen) {
|
||||
/* Argument count mismatch */
|
||||
PPError ("Macro argument count mismatch");
|
||||
}
|
||||
|
||||
/* Be sure to make enough empty arguments available */
|
||||
SB_Clear (&Arg);
|
||||
while (CollCount (&E->ActualArgs) < (unsigned) E->M->ArgCount) {
|
||||
ME_AppendActual (E, &Arg);
|
||||
}
|
||||
}
|
||||
|
||||
/* Deallocate string buf resources */
|
||||
SB_Done (&Arg);
|
||||
}
|
||||
@ -666,29 +685,12 @@ static void MacroCall (StrBuf* Target, Macro* M)
|
||||
{
|
||||
MacroExp E;
|
||||
|
||||
/* Eat the left paren */
|
||||
NextChar ();
|
||||
|
||||
/* Initialize our MacroExp structure */
|
||||
InitMacroExp (&E, M);
|
||||
|
||||
/* Read the actual macro arguments */
|
||||
/* Read the actual macro arguments (with the enclosing parentheses) */
|
||||
ReadMacroArgs (&E);
|
||||
|
||||
/* Compare formal and actual argument count */
|
||||
if (CollCount (&E.ActualArgs) != (unsigned) M->ArgCount) {
|
||||
|
||||
StrBuf Arg = STATIC_STRBUF_INITIALIZER;
|
||||
|
||||
/* Argument count mismatch */
|
||||
PPError ("Macro argument count mismatch");
|
||||
|
||||
/* Be sure to make enough empty arguments available */
|
||||
while (CollCount (&E.ActualArgs) < (unsigned) M->ArgCount) {
|
||||
ME_AppendActual (&E, &Arg);
|
||||
}
|
||||
}
|
||||
|
||||
/* Replace macro arguments handling the # and ## operators */
|
||||
MacroArgSubst (&E);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user