From 2eea2525ef7394e57648b553dd8ac9ad57128878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucie=20G=C3=A9rard?= Date: Wed, 16 Oct 2019 12:14:01 +0200 Subject: Add empty preprocessor reading machinery Change-Id: I4a0ed8f9bf6bdddcdf5e9ae313cf3b1988a66238 Reviewed-by: Karsten Heimrich --- src/linguist/lupdate/clangtoolastreader.cpp | 10 +++++++ src/linguist/lupdate/clangtoolastreader.h | 42 ++++++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/linguist/lupdate/clangtoolastreader.cpp b/src/linguist/lupdate/clangtoolastreader.cpp index 8b0e57378..7c4861f95 100644 --- a/src/linguist/lupdate/clangtoolastreader.cpp +++ b/src/linguist/lupdate/clangtoolastreader.cpp @@ -532,4 +532,14 @@ void LupdateVisitor::handleTrId(const TranslationRelatedStore &store, bool force m_tor->append(msg); } +void LupdateVisitor::processPreprocessorCalls() +{ +} + +void LupdatePPCallbacks::MacroExpands(const clang::Token ¯oNameTok, + const clang::MacroDefinition ¯oDefinition, clang::SourceRange range, + const clang::MacroArgs *args) +{ +} + QT_END_NAMESPACE diff --git a/src/linguist/lupdate/clangtoolastreader.h b/src/linguist/lupdate/clangtoolastreader.h index 4170c3254..051b94452 100644 --- a/src/linguist/lupdate/clangtoolastreader.h +++ b/src/linguist/lupdate/clangtoolastreader.h @@ -47,6 +47,8 @@ #include #include #include +#include +#include #if defined(Q_CC_MSVC) # pragma warning(default: 4100) @@ -123,8 +125,33 @@ struct TranslationRelatedStore } }; +using TranslationStores = std::vector; + +class LupdatePPCallbacks : public clang::PPCallbacks +{ +public: + LupdatePPCallbacks(TranslationStores &translationStores, clang::Preprocessor &preprocessor) + : m_translationStores(translationStores), + m_preprocessor(preprocessor) + {} + + ~LupdatePPCallbacks() override + {} + + // Overridden callback functions. + void MacroExpands(const clang::Token ¯oNameTok, + const clang::MacroDefinition ¯oDefinition, clang::SourceRange range, + const clang::MacroArgs *args) override; + +private: + TranslationStores &m_translationStores; + clang::Preprocessor &m_preprocessor; +}; + class LupdateVisitor : public clang::RecursiveASTVisitor { + friend class LupdateASTConsumer; + public: explicit LupdateVisitor(clang::ASTContext *context, Translator *tor) : m_context(context), @@ -136,6 +163,7 @@ public: bool VisitCallExpr(clang::CallExpr *callExpression); void fillTranslator(); + void processPreprocessorCalls(); private: std::vector rawCommentsForCallExpr(const clang::CallExpr *callExpr) const; @@ -154,7 +182,8 @@ private: Translator *m_tor { nullptr }; std::string m_inputFile; - std::vector m_translationStoresFromAST; + TranslationStores m_translationStoresFromAST; + TranslationStores m_translationStoresFromPP; }; class LupdateASTConsumer : public clang::ASTConsumer @@ -168,11 +197,17 @@ public: // parsed. void HandleTranslationUnit(clang::ASTContext &context) override { + m_visitor.processPreprocessorCalls(); bool traverse = m_visitor.TraverseAST(context); qCDebug(lcClang) << "TraverseAST: " << traverse; m_visitor.fillTranslator(); } + TranslationStores &preprocessorStores() + { + return m_visitor.m_translationStoresFromPP; + } + private: LupdateVisitor m_visitor; }; @@ -188,6 +223,11 @@ public: clang::CompilerInstance &compiler, llvm::StringRef /* inFile */) override { LupdateASTConsumer *consumer = new LupdateASTConsumer(&compiler.getASTContext(), m_tor); + clang::Preprocessor &preprocessor = compiler.getPreprocessor(); + LupdatePPCallbacks *callbacks = new LupdatePPCallbacks(consumer->preprocessorStores(), + preprocessor); + preprocessor.addPPCallbacks(std::unique_ptr(callbacks)); + return std::unique_ptr(consumer); } -- cgit v1.2.3