aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/cplusplus/pp-engine.cpp
diff options
context:
space:
mode:
authorhjk <[email protected]>2013-04-16 10:40:14 +0200
committerhjk <[email protected]>2013-04-16 11:33:50 +0200
commitc39b582e58922c8329fff710fb57b7e8fa516a49 (patch)
treefca1c6895fa402138fd2f031a248400966fe1176 /src/libs/cplusplus/pp-engine.cpp
parenta1c7c47cc0b7072ba6ee18798ea8ab62d23c885d (diff)
C++: Preprocessor output buffer is always present
Change-Id: I896423172aed0e19feaaf9144ed5f18ba99c720b Reviewed-by: Erik Verbruggen <[email protected]>
Diffstat (limited to 'src/libs/cplusplus/pp-engine.cpp')
-rw-r--r--src/libs/cplusplus/pp-engine.cpp66
1 files changed, 29 insertions, 37 deletions
diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp
index 6e85fe95a57..0ba1d8459fd 100644
--- a/src/libs/cplusplus/pp-engine.cpp
+++ b/src/libs/cplusplus/pp-engine.cpp
@@ -1202,16 +1202,13 @@ void Preprocessor::trackExpansionCycles(PPToken *tk)
} else if (m_state.m_expansionStatus == Expanding) {
m_state.m_expansionStatus = JustFinishedExpansion;
- QByteArray *buffer = currentOutputBuffer();
- if (!buffer)
- return;
-
+ QByteArray &buffer = currentOutputBuffer();
maybeStartOutputLine();
// Offset and length of the macro invocation
char chunk[40];
qsnprintf(chunk, sizeof(chunk), "# expansion begin %d,%d", tk->offset, tk->length());
- buffer->append(chunk);
+ buffer.append(chunk);
// Expanded tokens
unsigned generatedCount = 0;
@@ -1220,23 +1217,23 @@ void Preprocessor::trackExpansionCycles(PPToken *tk)
if (p.first) {
if (generatedCount) {
qsnprintf(chunk, sizeof(chunk), " ~%d", generatedCount);
- buffer->append(chunk);
+ buffer.append(chunk);
generatedCount = 0;
}
qsnprintf(chunk, sizeof(chunk), " %d:%d", p.first, p.second);
- buffer->append(chunk);
+ buffer.append(chunk);
} else {
++generatedCount;
}
}
if (generatedCount) {
qsnprintf(chunk, sizeof(chunk), " ~%d", generatedCount);
- buffer->append(chunk);
+ buffer.append(chunk);
}
- buffer->append('\n');
- buffer->append(m_state.m_expansionResult);
+ buffer.append('\n');
+ buffer.append(m_state.m_expansionResult);
maybeStartOutputLine();
- buffer->append("# expansion end\n");
+ buffer.append("# expansion end\n");
}
lex(tk);
@@ -1279,16 +1276,14 @@ void Preprocessor::synchronizeOutputLines(const PPToken &tk, bool forceLine)
void Preprocessor::removeTrailingOutputLines()
{
- QByteArray *buffer = currentOutputBuffer();
- if (buffer) {
- int i = buffer->size() - 1;
- while (i >= 0 && buffer->at(i) == '\n')
- --i;
- const int mightChop = buffer->size() - i - 1;
- if (mightChop > 1) {
- // Keep one new line at end.
- buffer->chop(mightChop - 1);
- }
+ QByteArray &buffer = currentOutputBuffer();
+ int i = buffer.size() - 1;
+ while (i >= 0 && buffer.at(i) == '\n')
+ --i;
+ const int mightChop = buffer.size() - i - 1;
+ if (mightChop > 1) {
+ // Keep one new line at end.
+ buffer.chop(mightChop - 1);
}
}
@@ -2044,40 +2039,37 @@ void Preprocessor::startSkippingBlocks(const Preprocessor::PPToken &tk) const
template <class T>
void Preprocessor::writeOutput(const T &t)
{
- QByteArray *buffer = currentOutputBuffer();
- if (buffer)
- buffer->append(t);
+ currentOutputBuffer().append(t);
}
void Preprocessor::writeOutput(const ByteArrayRef &ref)
{
- QByteArray *buffer = currentOutputBuffer();
- if (buffer)
- buffer->append(ref.start(), ref.length());
+ currentOutputBuffer().append(ref.start(), ref.length());
}
bool Preprocessor::atStartOfOutputLine() const
{
- const QByteArray *buffer = currentOutputBuffer();
- return (buffer && !buffer->isEmpty()) ? *(buffer->end() - 1) == '\n' : true;
+ const QByteArray &buffer = currentOutputBuffer();
+ return buffer.isEmpty() || buffer.endsWith('\n');
}
void Preprocessor::maybeStartOutputLine()
{
- QByteArray *buffer = currentOutputBuffer();
- if (buffer && !buffer->isEmpty() && *(buffer->end() - 1) != '\n')
+ QByteArray &buffer = currentOutputBuffer();
+ if (!buffer.isEmpty() && !buffer.endsWith('\n'))
writeOutput('\n');
}
-const QByteArray *Preprocessor::currentOutputBuffer() const
+const QByteArray &Preprocessor::currentOutputBuffer() const
{
if (m_state.m_expansionStatus == Expanding)
- return &m_state.m_expansionResult;
-
- return m_state.m_result;
+ return m_state.m_expansionResult;
+ return *m_state.m_result;
}
-QByteArray *Preprocessor::currentOutputBuffer()
+QByteArray &Preprocessor::currentOutputBuffer()
{
- return const_cast<QByteArray *>(static_cast<const Preprocessor *>(this)->currentOutputBuffer());
+ if (m_state.m_expansionStatus == Expanding)
+ return m_state.m_expansionResult;
+ return *m_state.m_result;
}