diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp index 08b286a2bc16f8f4b9441d8fb899d4d5afb2e2a3..83b0d4191c8a7242ea04e4aa0523ce5196de0f2e 100644 --- a/src/libs/cplusplus/pp-engine.cpp +++ b/src/libs/cplusplus/pp-engine.cpp @@ -748,18 +748,8 @@ void Preprocessor::preprocess(const QByteArray &fileName, const QByteArray &sour else { if (! m->isFunctionLike()) { - - if (client) - client->startExpandingMacro(identifierToken->offset, - *m, spell); - - m->setHidden(true); - const QByteArray tmp = expand(m->definition()); - m->setHidden(false); - - if (client) - client->stopExpandingMacro(_dot->offset, *m); - + QByteArray tmp; + expandObjectLikeMacro(identifierToken, spell, m, &tmp); if (_dot->isNot(T_LPAREN)) { _result->append(tmp); @@ -827,6 +817,23 @@ void Preprocessor::preprocess(const QByteArray &fileName, const QByteArray &sour _result = previousResult; } +void Preprocessor::expandObjectLikeMacro(TokenIterator identifierToken, + const QByteArray &spell, + Macro *m, + QByteArray *result) +{ + if (client) + client->startExpandingMacro(identifierToken->offset, + *m, spell); + + m->setHidden(true); + expand(m->definition(), result); + m->setHidden(false); + + if (client) + client->stopExpandingMacro(_dot->offset, *m); +} + void Preprocessor::expandFunctionLikeMacro(TokenIterator identifierToken, Macro *m) { const char *beginOfText = startOfToken(*identifierToken); diff --git a/src/libs/cplusplus/pp-engine.h b/src/libs/cplusplus/pp-engine.h index 49f332186559b9b2ef703b39d2139b44278bff83..9fc2d49a27679630128601501f8af277df2c6597 100644 --- a/src/libs/cplusplus/pp-engine.h +++ b/src/libs/cplusplus/pp-engine.h @@ -104,6 +104,9 @@ private: QByteArray expand(const QByteArray &source); void expand(const QByteArray &source, QByteArray *result); void expand(const char *first, const char *last, QByteArray *result); + void expandObjectLikeMacro(TokenIterator identifierToken, + const QByteArray &spell, + Macro *m, QByteArray *result); void expandFunctionLikeMacro(TokenIterator identifierToken, Macro *m); void resetIfLevel();