C++: Fix highlighting for lines with predefined macros

This adds definitions for the macros __FILE__, __LINE__, __DATE__ and
__TIME__ on demand.

As a side effect, this also introduces highlighting for the uses of
these macros.

Task-number: QTCREATORBUG-8036
Change-Id: Ib7546c7d45d2eecbc50c7883fc684e3497154405
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
Reviewed-by: hjk <hjk121@nokiamail.com>
This commit is contained in:
Nikolai Kosjar
2013-11-29 11:25:47 +01:00
parent 4edfe87b58
commit 4c2daa90ce
8 changed files with 88 additions and 15 deletions

View File

@@ -917,23 +917,21 @@ bool Preprocessor::handleIdentifier(PPToken *tk)
&& macroNameRef[0] == '_'
&& macroNameRef[1] == '_') {
PPToken newTk;
QByteArray txt;
if (macroNameRef == ppLine) {
QByteArray txt = QByteArray::number(tk->lineno);
txt = QByteArray::number(tk->lineno);
newTk = generateToken(T_STRING_LITERAL, txt.constData(), txt.size(), tk->lineno, false);
} else if (macroNameRef == ppFile) {
QByteArray txt;
txt.append('"');
txt.append(m_env->currentFileUtf8);
txt.append('"');
newTk = generateToken(T_STRING_LITERAL, txt.constData(), txt.size(), tk->lineno, false);
} else if (macroNameRef == ppDate) {
QByteArray txt;
txt.append('"');
txt.append(QDate::currentDate().toString().toUtf8());
txt.append('"');
newTk = generateToken(T_STRING_LITERAL, txt.constData(), txt.size(), tk->lineno, false);
} else if (macroNameRef == ppTime) {
QByteArray txt;
txt.append('"');
txt.append(QTime::currentTime().toString().toUtf8());
txt.append('"');
@@ -941,10 +939,14 @@ bool Preprocessor::handleIdentifier(PPToken *tk)
}
if (newTk.hasSource()) {
newTk.f.newline = tk->newline();
newTk.f.whitespace = tk->whitespace();
*tk = newTk;
return false;
Macro macro;
macro.setName(macroNameRef.toByteArray());
macro.setFileName(m_env->currentFile);
macro.setPredefined(true);
macro.setDefinition(txt, QVector<PPToken>() << newTk);
m_env->bind(macro);
if (m_client)
m_client->macroAdded(macro);
}
}