diff options
author | hjk <qthjk@ovi.com> | 2012-12-20 15:44:41 +0100 |
---|---|---|
committer | hjk <qthjk@ovi.com> | 2012-12-20 16:25:03 +0100 |
commit | afcd9d4c4305521b1b72a197edf5c47044cd6777 (patch) | |
tree | 58535eb17063cbc4d430340df41ccb340bb03fff /src/libs/cplusplus/pp-engine.cpp | |
parent | 665382506f34bf35825dd19257cfe5590019b747 (diff) | |
download | qt-creator-afcd9d4c4305521b1b72a197edf5c47044cd6777.tar.gz |
Faster macro expansion.
Turns out QByteArray::setNum() is unnecessarily slow (will be fixed
independently), but even then, we can be faster.
Change-Id: I663bd2b8cc844bbe800879bccfa57999d020ba3b
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'src/libs/cplusplus/pp-engine.cpp')
-rw-r--r-- | src/libs/cplusplus/pp-engine.cpp | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp index 22f30d08e6..34fe56e53b 100644 --- a/src/libs/cplusplus/pp-engine.cpp +++ b/src/libs/cplusplus/pp-engine.cpp @@ -1095,16 +1095,17 @@ void Preprocessor::trackExpansionCycles(PPToken *tk) m_state.m_expandedTokensInfo.clear(); } else if (m_state.m_expansionStatus == Expanding) { m_state.m_expansionStatus = JustFinishedExpansion; - maybeStartOutputLine(); - writeOutput("# expansion begin "); - QByteArray expansionInfo; - expansionInfo.reserve(m_state.m_expandedTokensInfo.size() * 2); // Rough estimate + QByteArray *buffer = currentOutputBuffer(); + if (!buffer) + return; + + maybeStartOutputLine(); // Offset and length of the macro invocation - expansionInfo.append(QByteArray::number(tk->offset)); - expansionInfo.append(','); - expansionInfo.append(QByteArray::number(tk->length())); + char chunk[40]; + qsnprintf(chunk, sizeof(chunk), "# expansion begin %d,%d", tk->offset, tk->length()); + buffer->append(chunk); // Expanded tokens unsigned generatedCount = 0; @@ -1112,28 +1113,24 @@ void Preprocessor::trackExpansionCycles(PPToken *tk) const QPair<unsigned, unsigned> &p = m_state.m_expandedTokensInfo.at(i); if (p.first) { if (generatedCount) { - expansionInfo.append(" ~"); - expansionInfo.append(QByteArray::number(generatedCount)); + qsnprintf(chunk, sizeof(chunk), " ~%d", generatedCount); + buffer->append(chunk); generatedCount = 0; } - expansionInfo.append(' '); - expansionInfo.append(QByteArray::number(p.first)); - expansionInfo.append(':'); - expansionInfo.append(QByteArray::number(p.second)); + qsnprintf(chunk, sizeof(chunk), " %d:%d", p.first, p.second); + buffer->append(chunk); } else { ++generatedCount; } } if (generatedCount) { - expansionInfo.append(" ~"); - expansionInfo.append(QByteArray::number(generatedCount)); + qsnprintf(chunk, sizeof(chunk), " ~%d", generatedCount); + buffer->append(chunk); } - expansionInfo.append('\n'); - - writeOutput(expansionInfo); - writeOutput(m_state.m_expansionResult); + buffer->append('\n'); + buffer->append(m_state.m_expansionResult); maybeStartOutputLine(); - writeOutput("# expansion end\n"); + buffer->append("# expansion end\n"); } lex(tk); |