Mark the generated regions of text.

This commit is contained in:
Roberto Raggi
2009-03-04 14:00:56 +01:00
parent e4c0d293a6
commit 064201ff85
4 changed files with 63 additions and 7 deletions

View File

@@ -407,10 +407,13 @@ void LookupContext::expandClass(Scope *scope,
Name *baseClassName = baseClass->name(); Name *baseClassName = baseClass->name();
const QList<Symbol *> baseClassCandidates = resolveClass(baseClassName, const QList<Symbol *> baseClassCandidates = resolveClass(baseClassName,
classVisibleScopes); classVisibleScopes);
#if 0
if (baseClassCandidates.isEmpty()) { if (baseClassCandidates.isEmpty()) {
Overview overview; Overview overview;
qDebug() << "unresolved base class:" << overview.prettyName(baseClassName); qDebug() << "unresolved base class:" << overview.prettyName(baseClassName);
} }
#endif
for (int j = 0; j < baseClassCandidates.size(); ++j) { for (int j = 0; j < baseClassCandidates.size(); ++j) {
if (Class *baseClassSymbol = baseClassCandidates.at(j)->asClass()) if (Class *baseClassSymbol = baseClassCandidates.at(j)->asClass())

View File

@@ -530,7 +530,8 @@ Preprocessor::Preprocessor(Client *client, Environment *env)
: client(client), : client(client),
env(env), env(env),
_expand(env), _expand(env),
_result(0) _result(0),
_markGeneratedTokens(false)
{ {
resetIfLevel (); resetIfLevel ();
} }
@@ -603,12 +604,12 @@ Preprocessor::State Preprocessor::createStateFromSource(const QByteArray &source
return state; return state;
} }
void Preprocessor::processNewline() void Preprocessor::processNewline(bool force)
{ {
if (env->currentLine == _dot->lineno) if (! force && env->currentLine == _dot->lineno)
return; return;
if (env->currentLine > _dot->lineno) { if (force || env->currentLine > _dot->lineno) {
_result->append("\n# "); _result->append("\n# ");
_result->append(QByteArray::number(_dot->lineno)); _result->append(QByteArray::number(_dot->lineno));
_result->append(' '); _result->append(' ');
@@ -648,6 +649,50 @@ void Preprocessor::processSkippingBlocks(bool skippingBlocks,
} }
} }
bool Preprocessor::markGeneratedTokens(bool markGeneratedTokens,
TokenIterator dot)
{
bool previous = _markGeneratedTokens;
_markGeneratedTokens = markGeneratedTokens;
if (previous != _markGeneratedTokens) {
if (! dot)
dot = _dot;
if (_markGeneratedTokens)
_result->append("\n#pragma push(gen)");
else
_result->append("\n#pragma pop(gen)");
processNewline(/*force = */ true);
const char *begin = _source.constBegin();
const char *end = begin;
if (markGeneratedTokens)
end += dot->begin();
else
end += (dot - 1)->end();
const char *it = end - 1;
for (; it != begin - 1; --it) {
if (*it == '\n')
break;
}
++it;
for (; it != end; ++it) {
if (! std::isspace(*it))
_result->append(' ');
else
_result->append(*it);
}
}
return previous;
}
void Preprocessor::preprocess(const QByteArray &fileName, const QByteArray &source, void Preprocessor::preprocess(const QByteArray &fileName, const QByteArray &source,
QByteArray *result) QByteArray *result)
{ {
@@ -846,7 +891,9 @@ Macro *Preprocessor::processObjectLikeMacro(TokenIterator identifierToken,
return m; return m;
} }
const bool was = markGeneratedTokens(true, identifierToken);
_result->append(tmp); _result->append(tmp);
(void) markGeneratedTokens(was);
return 0; return 0;
} }
@@ -859,7 +906,9 @@ void Preprocessor::expandBuiltinMacro(TokenIterator identifierToken,
client->startExpandingMacro(identifierToken->offset, client->startExpandingMacro(identifierToken->offset,
trivial, spell); trivial, spell);
const bool was = markGeneratedTokens(true, identifierToken);
expand(spell, _result); expand(spell, _result);
(void) markGeneratedTokens(was);
if (client) if (client)
client->stopExpandingMacro(_dot->offset, trivial); client->stopExpandingMacro(_dot->offset, trivial);
@@ -899,7 +948,9 @@ void Preprocessor::expandFunctionLikeMacro(TokenIterator identifierToken,
*m, text, actuals); *m, text, actuals);
} }
const bool was = markGeneratedTokens(true, identifierToken);
expand(beginOfText, endOfText, _result); expand(beginOfText, endOfText, _result);
(void) markGeneratedTokens(was);
if (client) if (client)
client->stopExpandingMacro(_dot->offset, *m); client->stopExpandingMacro(_dot->offset, *m);

View File

@@ -97,6 +97,8 @@ private:
TokenIterator dot; TokenIterator dot;
}; };
bool markGeneratedTokens(bool markGeneratedTokens, TokenIterator dot = 0);
void preprocess(const QByteArray &filename, void preprocess(const QByteArray &filename,
const QByteArray &source, const QByteArray &source,
QByteArray *result); QByteArray *result);
@@ -133,7 +135,7 @@ private:
void collectActualArguments(QVector<MacroArgumentReference> *actuals); void collectActualArguments(QVector<MacroArgumentReference> *actuals);
MacroArgumentReference collectOneActualArgument(); MacroArgumentReference collectOneActualArgument();
void processNewline(); void processNewline(bool force = false);
void processSkippingBlocks(bool skippingBlocks, void processSkippingBlocks(bool skippingBlocks,
TokenIterator dot, TokenIterator lastToken); TokenIterator dot, TokenIterator lastToken);
@@ -179,6 +181,7 @@ private:
TokenIterator _dot; TokenIterator _dot;
QByteArray *_result; QByteArray *_result;
bool _markGeneratedTokens;
}; };
} // namespace CPlusPlus } // namespace CPlusPlus

View File

@@ -370,8 +370,7 @@ void CPPEditor::jumpToMethod(int)
return; return;
Core::EditorManager::instance()->addCurrentPositionToNavigationHistory(true); Core::EditorManager::instance()->addCurrentPositionToNavigationHistory(true);
int line = symbol->line(); openEditorAt(symbol);
gotoLine(line);
Core::EditorManager::instance()->addCurrentPositionToNavigationHistory(); Core::EditorManager::instance()->addCurrentPositionToNavigationHistory();
setFocus(); setFocus();
} }