Preprocessor: fix line for generated code.

The macro used to be at the same line as the first token after the
closing parenthesis.

Change-Id: I4c2d7317632baf612900e84572017aeb247d0585
Reviewed-by: Erik Verbruggen <erik.verbruggen@nokia.com>
This commit is contained in:
Francois Ferrand
2012-03-16 15:16:06 +01:00
committed by Erik Verbruggen
parent 558b6e08ae
commit 2386d701b6
3 changed files with 60 additions and 17 deletions

View File

@@ -587,7 +587,7 @@ Preprocessor::State Preprocessor::createStateFromSource(const QByteArray &source
return state;
}
void Preprocessor::processNewline(bool force)
void Preprocessor::processNewline(bool force, int extraLines)
{
if (_dot != _tokens.constBegin()) {
TokenIterator prevTok = _dot - 1;
@@ -605,23 +605,25 @@ void Preprocessor::processNewline(bool force)
}
}
if (! force && env->currentLine == _dot->lineno)
unsigned lineno = _dot->lineno + extraLines;
if (! force && env->currentLine == lineno)
return;
if (force || env->currentLine > _dot->lineno) {
if (force || env->currentLine > lineno) {
out("\n# ");
out(QByteArray::number(_dot->lineno));
out(QByteArray::number(lineno));
out(' ');
out('"');
out(env->currentFile.toUtf8());
out('"');
out('\n');
} else {
for (unsigned i = env->currentLine; i < _dot->lineno; ++i)
for (unsigned i = env->currentLine; i < lineno; ++i)
out('\n');
}
env->currentLine = _dot->lineno;
env->currentLine = lineno;
}
void Preprocessor::processSkippingBlocks(bool skippingBlocks,
@@ -650,28 +652,33 @@ void Preprocessor::processSkippingBlocks(bool skippingBlocks,
bool Preprocessor::markGeneratedTokens(bool markGeneratedTokens,
TokenIterator dot)
{
bool previous = _markGeneratedTokens;
if (previous != markGeneratedTokens) {
if (! dot)
dot = _dot;
const int pos = markGeneratedTokens ? dot->begin() : (dot - 1)->end();
this->markGeneratedTokens(markGeneratedTokens, pos, dot->lineno - _dot->lineno, dot->f.newline);
}
return previous;
}
bool Preprocessor::markGeneratedTokens(bool markGeneratedTokens, int position, int extraLines, bool newline)
{
bool previous = _markGeneratedTokens;
_markGeneratedTokens = markGeneratedTokens;
if (previous != _markGeneratedTokens) {
if (! dot)
dot = _dot;
if (_markGeneratedTokens)
out("\n#gen true");
else
out("\n#gen false");
processNewline(/*force = */ true);
processNewline(/*force = */ true, extraLines);
const char *begin = _source.constBegin();
const char *end = begin;
if (markGeneratedTokens)
end += dot->begin();
else
end += (dot - 1)->end();
const char *end = begin + position;
const char *it = end - 1;
for (; it != begin - 1; --it) {
@@ -688,7 +695,7 @@ bool Preprocessor::markGeneratedTokens(bool markGeneratedTokens,
out(*it);
}
if (! markGeneratedTokens && dot->f.newline)
if (!markGeneratedTokens && newline)
processNewline(/*force = */ true);
}