1
0
mirror of https://github.com/cc65/cc65.git synced 2024-07-09 01:28:58 +00:00

Fixed a bug

git-svn-id: svn://svn.cc65.org/cc65/trunk@2479 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2003-10-08 16:58:54 +00:00
parent e6f9464ea9
commit b3496bb343

View File

@ -377,11 +377,14 @@ static int MacroCall (Macro* M)
const char* ArgStart;
char* B;
/* Expect an argument list */
/* Check for an argument list. If we don't have a list, we won't expand
* the macro.
*/
SkipBlank ();
if (CurC != '(') {
PPError ("Illegal macro call");
return 0;
KeepStr (M->Name);
KeepChar (' ');
return 1;
}
/* Eat the left paren */
@ -404,29 +407,29 @@ static int MacroCall (Macro* M)
B = CopyQuotedString (B);
} else if (CurC == ',' || CurC == ')') {
if (ParCount == 0) {
/* End of actual argument */
/* End of actual argument */
*B++ = '\0';
while (IsBlank(*ArgStart)) {
++ArgStart;
}
while (IsBlank(*ArgStart)) {
++ArgStart;
}
if (ArgCount < M->ArgCount) {
M->ActualArgs[ArgCount++] = ArgStart;
} else if (CurC != ')' || *ArgStart != '\0' || M->ArgCount > 0) {
/* Be sure not to count the single empty argument for a
* macro that does not have arguments.
*/
/* Be sure not to count the single empty argument for a
* macro that does not have arguments.
*/
++ArgCount;
}
}
/* Check for end of macro param list */
/* Check for end of macro param list */
if (CurC == ')') {
NextChar ();
break;
NextChar ();
break;
}
/* Start the next param */
ArgStart = B;
NextChar ();
NextChar ();
} else {
/* Comma or right paren inside nested parenthesis */
if (CurC == ')') {
@ -436,15 +439,15 @@ static int MacroCall (Macro* M)
NextChar ();
}
} else if (IsBlank (CurC)) {
/* Squeeze runs of blanks */
/* Squeeze runs of blanks */
*B++ = ' ';
SkipBlank ();
} else if (CurC == '/' && NextC == '*') {
*B++ = ' ';
} else if (CurC == '/' && NextC == '*') {
*B++ = ' ';
OldStyleComment ();
} else if (ANSI == 0 && CurC == '/' && NextC == '/') {
*B++ = ' ';
NewStyleComment ();
NewStyleComment ();
} else if (CurC == '\0') {
/* End of line inside macro argument list - read next line */
if (NextLine () == 0) {
@ -480,12 +483,12 @@ static void ExpandMacro (Macro* M)
{
/* Check if this is a function like macro */
if (M->ArgCount >= 0) {
/* Function like macro */
/* Function like macro */
if (MacroCall (M) == 0) {
ClearLine ();
}
} else {
/* Just copy the replacement text */
/* Just copy the replacement text */
KeepStr (M->Replacement);
}
}
@ -499,7 +502,7 @@ static void DefineMacro (void)
ident Ident;
char Buf[LINESIZE];
Macro* M;
Macro* Existing;
Macro* Existing;
/* Read the macro name */
SkipBlank ();
@ -625,7 +628,7 @@ static int Pass1 (const char* From, char* To)
}
} else {
if (MaybeMacro (Ident[0])) {
done = 0;
done = 0;
}
KeepStr (Ident);
}
@ -668,17 +671,17 @@ static int Pass2 (const char* From, char* To)
if (IsIdent (CurC)) {
SymName (Ident);
M = FindMacro (Ident);
if (M) {
ExpandMacro (M);
no_chg = 0;
} else {
KeepStr (Ident);
}
if (M) {
ExpandMacro (M);
no_chg = 0;
} else {
KeepStr (Ident);
}
} else if (IsQuote (CurC)) {
mptr = CopyQuotedString (mptr);
} else {
KeepChar (CurC);
NextChar ();
NextChar ();
}
}
return no_chg;