File indexing completed on 2024-05-05 16:46:16
0001 /* 0002 SPDX-FileCopyrightText: 2010 Milian Wolff <mail@milianw.de> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef QMAKEFILEVISITOR_H 0008 #define QMAKEFILEVISITOR_H 0009 0010 #include "parser/qmakeastdefaultvisitor.h" 0011 0012 #include "variablereferenceparser.h" 0013 0014 #include <QHash> 0015 0016 class QMakeVariableResolver { 0017 public: 0018 virtual ~QMakeVariableResolver() {} 0019 virtual QStringList resolveVariable(const QString& variable, VariableInfo::VariableType type) const = 0; 0020 0021 using VariableMap = QHash<QString, QStringList>; 0022 }; 0023 0024 class QMakeFile; 0025 0026 class QMakeFileVisitor : protected QMake::ASTDefaultVisitor, public QMakeVariableResolver { 0027 public: 0028 explicit QMakeFileVisitor(const QMakeVariableResolver* resolver, QMakeFile* baseFile); 0029 ~QMakeFileVisitor() override; 0030 0031 QStringList resolveVariable(const QString& variable, VariableInfo::VariableType type) const override; 0032 0033 // use this before visiting a file to set the default variables 0034 void setVariables(const VariableMap& vars); 0035 // visit whole file and return map of defined variables 0036 VariableMap visitFile(QMake::ProjectAST* node); 0037 // visit macro with given arguments and forward its returnvalue 0038 QStringList visitMacro(QMake::ScopeBodyAST* node, const QStringList& arguments); 0039 0040 protected: 0041 void visitAssignment(QMake::AssignmentAST* node) override; 0042 void visitFunctionCall(QMake::FunctionCallAST* node) override; 0043 0044 private: 0045 QStringList resolveVariables( const QString& value ) const; 0046 0047 QStringList getValueList( const QList<QMake::ValueAST*>& list ) const; 0048 0049 QStringList evaluateMacro( const QString& function, const QStringList& arguments ) const; 0050 0051 const QMakeVariableResolver* const m_resolver; 0052 QMakeFile* m_baseFile; 0053 VariableMap m_variableValues; 0054 0055 QHash<QString, QMake::ScopeBodyAST*> m_userMacros; 0056 QStringList m_arguments; 0057 QStringList m_lastReturn; 0058 }; 0059 0060 #endif // QMAKEFILEVISITOR_H