forked from qt-creator/qt-creator
		
	preprocessor: avoid using QVector += QVector.
It destroys preallocation. See https://bugreports.qt-project.org/browse/QTBUG-25371. Change-Id: Idde09a07f250a347f8016d8fdb04cd00d031fe10 Reviewed-by: Thomas Hartmann <Thomas.Hartmann@nokia.com>
This commit is contained in:
		| @@ -850,9 +850,10 @@ bool Preprocessor::handleFunctionLikeMacro(PPToken *tk, const Macro *macro, QVec | ||||
|     } | ||||
|  | ||||
|     QVector<PPToken> expanded; | ||||
|     expanded.reserve(MAX_TOKEN_EXPANSION_COUNT); | ||||
|     for (size_t i = 0, bodySize = body.size(); i < bodySize && expanded.size() < MAX_TOKEN_EXPANSION_COUNT; ++i) { | ||||
|         int expandedSize = expanded.size(); | ||||
|         const PPToken &token = body[i]; | ||||
|         const PPToken &token = body.at(i); | ||||
|  | ||||
|         if (token.is(T_IDENTIFIER)) { | ||||
|             const ByteArrayRef id = token.asByteArrayRef(); | ||||
| @@ -866,7 +867,7 @@ bool Preprocessor::handleFunctionLikeMacro(PPToken *tk, const Macro *macro, QVec | ||||
|                         goto exitNicely; | ||||
|                     } | ||||
|  | ||||
|                     QVector<PPToken> actualsForThisParam = actuals[j]; | ||||
|                     QVector<PPToken> actualsForThisParam = actuals.at(j); | ||||
|                     if (id == "__VA_ARGS__" || (macro->isVariadic() && j + 1 == formals.size())) { | ||||
|                         unsigned lineno = 0; | ||||
|                         const char comma = ','; | ||||
| @@ -894,7 +895,8 @@ bool Preprocessor::handleFunctionLikeMacro(PPToken *tk, const Macro *macro, QVec | ||||
|                         newText.replace("\"", "\\\""); | ||||
|                         expanded.push_back(generateToken(T_STRING_LITERAL, newText.constData(), newText.size(), lineno, true)); | ||||
|                     } else  { | ||||
|                         expanded += actualsForThisParam; | ||||
|                         for (int k = 0, kk = actualsForThisParam.size(); k < kk; ++k) | ||||
|                             expanded += actualsForThisParam.at(k); | ||||
|                     } | ||||
|                     break; | ||||
|                 } | ||||
| @@ -923,6 +925,7 @@ exitNicely: | ||||
|         expanded.push_front(forceWhitespacingToken); | ||||
|     } | ||||
|     body = expanded; | ||||
|     body.squeeze(); | ||||
|     return true; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user