diff options
author | Francois Ferrand <thetypz@gmail.com> | 2012-03-16 14:06:09 +0100 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@nokia.com> | 2012-03-19 10:31:09 +0100 |
commit | ffd58c577a273cd650180e527a2abcff4d8c7df2 (patch) | |
tree | c79cd0bd0ee717b33952f191ac0cf0abbee94f13 /src/libs/cplusplus/pp-engine.cpp | |
parent | f0b122e3d21b607d0f7590d6fee63da9c991a1a3 (diff) | |
download | qt-creator-ffd58c577a273cd650180e527a2abcff4d8c7df2.tar.gz |
Preprocessor: Handle variadic arguments (__VA_ARGS__).
Change-Id: I69aa6c5e01ea97a4413f77f20ebbb4d4beb971aa
Reviewed-by: Erik Verbruggen <erik.verbruggen@nokia.com>
Diffstat (limited to 'src/libs/cplusplus/pp-engine.cpp')
-rw-r--r-- | src/libs/cplusplus/pp-engine.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp index af27609f84..dbdd5e0b6b 100644 --- a/src/libs/cplusplus/pp-engine.cpp +++ b/src/libs/cplusplus/pp-engine.cpp @@ -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 } |