From 68471c2100384390989fbef50351bf7e76fe61a8 Mon Sep 17 00:00:00 2001 From: Francois Ferrand Date: Mon, 2 Apr 2012 14:57:13 +0200 Subject: [PATCH] Preprocessor: fix macro definition line. The line corresponding to the macro definition is simply the token's line. This caused errors in the macro definitions, since there were multiple macros defined on the same line of the same file. Task-number: QTCREATORBUG-7217 Change-Id: I56d17eeba677ac51f9eed283c0e964019bdfe4b7 Reviewed-by: Roberto Raggi --- src/libs/cplusplus/pp-engine.cpp | 2 +- .../cplusplus/preprocessor/tst_preprocessor.cpp | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp index 752008f32b0..d92edb2115b 100644 --- a/src/libs/cplusplus/pp-engine.cpp +++ b/src/libs/cplusplus/pp-engine.cpp @@ -1189,7 +1189,7 @@ void Preprocessor::handleDefineDirective(PPToken *tk) Macro macro; macro.setFileName(m_env->currentFile); - macro.setLine(m_env->currentLine); + macro.setLine(tk->lineno); QByteArray macroName = tk->asByteArrayRef().toByteArray(); macro.setName(macroName); macro.setOffset(tk->offset); diff --git a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp index 91819d3175a..95e41111534 100644 --- a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp +++ b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp @@ -104,7 +104,11 @@ public: virtual ~MockClient() {} - virtual void macroAdded(const Macro &/*macro*/) {} + virtual void macroAdded(const Macro & macro) + { + m_definedMacros.append(macro.name()); + m_definedMacrosLine.append(macro.line()); + } virtual void passedMacroDefinitionCheck(unsigned /*offset*/, const Macro &/*macro*/) {} virtual void failedMacroDefinitionCheck(unsigned /*offset*/, const QByteArray &/*name*/) {} @@ -216,6 +220,12 @@ public: QList expandedMacrosOffset() const { return m_expandedMacrosOffset; } + QList definedMacros() const + { return m_definedMacros; } + + QList definedMacrosLine() const + { return m_definedMacrosLine; } + private: Environment *m_env; QByteArray *m_output; @@ -226,6 +236,8 @@ private: QList m_recordedIncludes; QList m_expandedMacros; QList m_expandedMacrosOffset; + QList m_definedMacros; + QList m_definedMacrosLine; }; namespace QTest { @@ -436,6 +448,8 @@ void tst_Preprocessor::macro_uses() QCOMPARE(simplified(preprocessed), QString("void test(){int x=8;int y=9;}")); QCOMPARE(client.expandedMacros(), QList() << QByteArray("FOO") << QByteArray("BAR")); QCOMPARE(client.expandedMacrosOffset(), QList() << buffer.indexOf("FOO;") << buffer.indexOf("BAR;")); + QCOMPARE(client.definedMacros(), QList() << QByteArray("FOO") << QByteArray("BAR")); + QCOMPARE(client.definedMacrosLine(), QList() << 2 << 3); } void tst_Preprocessor::macro_definition_lineno()