Preprocessor: Handle variadic arguments (__VA_ARGS__).

Change-Id: I69aa6c5e01ea97a4413f77f20ebbb4d4beb971aa
Reviewed-by: Erik Verbruggen <erik.verbruggen@nokia.com>
This commit is contained in:
Francois Ferrand
2012-03-16 14:06:09 +01:00
committed by Erik Verbruggen
parent f0b122e3d2
commit ffd58c577a
3 changed files with 45 additions and 2 deletions

View File

@@ -1178,18 +1178,22 @@ void Preprocessor::processDefine(TokenIterator firstToken, TokenIterator lastTok
macro.setLength(endOfToken(lastToken[- 1]) - startOfToken(*firstToken));
++tk; // skip T_IDENTIFIER
bool hasIdentifier = false;
if (tk->is(T_LPAREN) && ! tk->f.whitespace) {
// a function-like macro definition
macro.setFunctionLike(true);
++tk; // skip T_LPAREN
if (tk->is(T_IDENTIFIER)) {
hasIdentifier = true;
macro.addFormal(tokenText(*tk));
++tk; // skip T_IDENTIFIER
while (tk->is(T_COMMA)) {
++tk;// skip T_COMMA
if (tk->isNot(T_IDENTIFIER))
if (tk->isNot(T_IDENTIFIER)) {
hasIdentifier = false;
break;
}
macro.addFormal(tokenText(*tk));
++tk; // skip T_IDENTIFIER
}
@@ -1197,6 +1201,8 @@ void Preprocessor::processDefine(TokenIterator firstToken, TokenIterator lastTok
if (tk->is(T_DOT_DOT_DOT)) {
macro.setVariadic(true);
if (!hasIdentifier)
macro.addFormal("__VA_ARGS__");
++tk; // skip T_DOT_DOT_DOT
}