Commit ff1203de authored by Nikolai Kosjar's avatar Nikolai Kosjar

C++: Fix Macrouse::utf16charsBegin()

This caused displaced highlighting of macro uses after #if constructs.

MacroUse::utf16charBegin() was based on the last "continuation token",
which was wrong.

Change-Id: I89983d82fcf804ba853c04a59a7533c489785d05
Reviewed-by: default avatarErik Verbruggen <erik.verbruggen@digia.com>
parent c7f0c4a7
......@@ -1788,6 +1788,7 @@ QByteArray Preprocessor::expand(PPToken *tk, PPToken *lastConditionToken)
{
unsigned line = tk->lineno;
unsigned bytesBegin = tk->bytesBegin();
unsigned utf16charsBegin = tk->utf16charsBegin();
PPToken lastTk;
while (isContinuationToken(*tk)) {
lastTk = *tk;
......@@ -1801,7 +1802,7 @@ QByteArray Preprocessor::expand(PPToken *tk, PPToken *lastConditionToken)
QByteArray result;
result.reserve(256);
preprocess(m_state.m_currentFileName, condition, &result, 0, true, false, true,
bytesBegin, tk->utf16charsBegin(), line);
bytesBegin, utf16charsBegin, line);
result.squeeze();
// qDebug("*** Condition after: [%s]", result.constData());
......
......@@ -180,3 +180,25 @@ void CppToolsPlugin::test_cpppreprocessor_includes_allDiagnostics()
QCOMPARE(document->unresolvedIncludes().size(), 3);
QCOMPARE(document->diagnosticMessages().size(), 3);
}
void CppToolsPlugin::test_cpppreprocessor_macroUses()
{
QByteArray source =
"#define SOMEDEFINE 1\n"
"#if SOMEDEFINE == 1\n"
" int someNumber;\n"
"#endif\n"
;
SourcePreprocessor processor;
Document::Ptr document = processor.run(source);
QVERIFY(document);
const QList<Document::MacroUse> macroUses = document->macroUses();
QCOMPARE(macroUses.size(), 1);
const Document::MacroUse macroUse = macroUses.at(0);
QCOMPARE(macroUse.bytesBegin(), 25U);
QCOMPARE(macroUse.bytesEnd(), 35U);
QCOMPARE(macroUse.utf16charsBegin(), 25U);
QCOMPARE(macroUse.utf16charsEnd(), 35U);
QCOMPARE(macroUse.beginLine(), 2U);
}
......@@ -128,6 +128,7 @@ private slots:
void test_cpppreprocessor_includes_resolvedUnresolved();
void test_cpppreprocessor_includes_cyclic();
void test_cpppreprocessor_includes_allDiagnostics();
void test_cpppreprocessor_macroUses();
void test_functionutils_virtualFunctions();
void test_functionutils_virtualFunctions_data();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment