aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/cplusplus
diff options
context:
space:
mode:
authorFrancois Ferrand <[email protected]>2012-03-16 14:06:09 +0100
committerErik Verbruggen <[email protected]>2012-03-19 10:31:09 +0100
commitffd58c577a273cd650180e527a2abcff4d8c7df2 (patch)
treec79cd0bd0ee717b33952f191ac0cf0abbee94f13 /src/libs/cplusplus
parentf0b122e3d21b607d0f7590d6fee63da9c991a1a3 (diff)
Preprocessor: Handle variadic arguments (__VA_ARGS__).
Change-Id: I69aa6c5e01ea97a4413f77f20ebbb4d4beb971aa Reviewed-by: Erik Verbruggen <[email protected]>
Diffstat (limited to 'src/libs/cplusplus')
-rw-r--r--src/libs/cplusplus/Macro.cpp3
-rw-r--r--src/libs/cplusplus/pp-engine.cpp8
2 files changed, 9 insertions, 2 deletions
diff --git a/src/libs/cplusplus/Macro.cpp b/src/libs/cplusplus/Macro.cpp
index 802f126e2a5..7020f5f01c0 100644
--- a/src/libs/cplusplus/Macro.cpp
+++ b/src/libs/cplusplus/Macro.cpp
@@ -78,7 +78,8 @@ QString Macro::decoratedName() const
text += QLatin1String(", ");
else
first = false;
- text += QString::fromUtf8(formal.constData(), formal.size());
+ if (formal != "__VA_ARGS__")
+ text += QString::fromUtf8(formal.constData(), formal.size());
}
if (f._variadic)
text += QLatin1String("...");
diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp
index af27609f846..dbdd5e0b6b8 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
}