From 656d70fa7492e91e28056c69ee1a141de672313f Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Tue, 3 Mar 2009 16:19:03 +0100 Subject: [PATCH] Introduced expandFunctionLikeMacro(). --- src/libs/cplusplus/pp-engine.cpp | 45 +++++++++++++++++--------------- src/libs/cplusplus/pp-engine.h | 1 + 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp index 43e07619ddf..350e6108001 100644 --- a/src/libs/cplusplus/pp-engine.cpp +++ b/src/libs/cplusplus/pp-engine.cpp @@ -694,8 +694,6 @@ void Preprocessor::preprocess(const QByteArray &fileName, const QByteArray &sour _result->append("\\\n"); else if (_dot->whitespace) { - TokenIterator begin = _tokens.constBegin(); - const unsigned endOfPreviousToken = (_dot - 1)->end(); const unsigned beginOfToken = _dot->begin(); @@ -814,26 +812,10 @@ void Preprocessor::preprocess(const QByteArray &fileName, const QByteArray &sour if (_dot->isNot(T_RPAREN)) { // ### warning expected T_RPAREN - - } else { - const char *beginOfText = startOfToken(*identifierToken); - const char *endOfText = endOfToken(*_dot); - ++_dot; // skip T_RPAREN - - if (client) { - const QByteArray text = - QByteArray::fromRawData(beginOfText, - endOfText - beginOfText); - - client->startExpandingMacro(identifierToken->offset, - *m, text); - } - - expand(beginOfText, endOfText, _result); - - if (client) - client->stopExpandingMacro(_dot->offset, *m); } + + else + expandFunctionLikeMacro(identifierToken, m); } } } @@ -846,6 +828,27 @@ void Preprocessor::preprocess(const QByteArray &fileName, const QByteArray &sour _result = previousResult; } +void Preprocessor::expandFunctionLikeMacro(TokenIterator identifierToken, Macro *m) +{ + const char *beginOfText = startOfToken(*identifierToken); + const char *endOfText = endOfToken(*_dot); + ++_dot; // skip T_RPAREN + + if (client) { + const QByteArray text = + QByteArray::fromRawData(beginOfText, + endOfText - beginOfText); + + client->startExpandingMacro(identifierToken->offset, + *m, text); + } + + expand(beginOfText, endOfText, _result); + + if (client) + client->stopExpandingMacro(_dot->offset, *m); +} + const char *Preprocessor::startOfToken(const Token &token) const { return _source.constBegin() + token.begin(); } diff --git a/src/libs/cplusplus/pp-engine.h b/src/libs/cplusplus/pp-engine.h index cd5129a9096..49f33218655 100644 --- a/src/libs/cplusplus/pp-engine.h +++ b/src/libs/cplusplus/pp-engine.h @@ -104,6 +104,7 @@ private: QByteArray expand(const QByteArray &source); void expand(const QByteArray &source, QByteArray *result); void expand(const char *first, const char *last, QByteArray *result); + void expandFunctionLikeMacro(TokenIterator identifierToken, Macro *m); void resetIfLevel(); bool testIfLevel(); -- GitLab