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