File indexing completed on 2024-05-19 04:41:35
0001 /* 0002 SPDX-FileCopyrightText: 2007 Andreas Pakulat <apaku@gmx.de> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef BUILDASTVISITOR_H 0008 #define BUILDASTVISITOR_H 0009 0010 #include "qmakedefaultvisitor.h" 0011 #include <util/stack.h> 0012 0013 class QString; 0014 0015 namespace QMake 0016 { 0017 0018 class Parser; 0019 class ProjectAST; 0020 class AST; 0021 class ValueAST; 0022 class StatementAST; 0023 0024 class BuildASTVisitor : public DefaultVisitor 0025 { 0026 public: 0027 BuildASTVisitor(Parser* parser, ProjectAST* project); 0028 ~BuildASTVisitor() override; 0029 void visitArgumentList( ArgumentListAst *node ) override; 0030 void visitFunctionArguments( FunctionArgumentsAst *node ) override; 0031 void visitOrOperator( OrOperatorAst *node ) override; 0032 void visitItem( ItemAst *node ) override; 0033 void visitScope( ScopeAst *node ) override; 0034 void visitIfElse(IfElseAst* node) override; 0035 void visitOp( OpAst *node ) override; 0036 void visitProject( ProjectAst *node ) override; 0037 void visitScopeBody( ScopeBodyAst *node ) override; 0038 void visitStatement( StatementAst *node ) override; 0039 void visitValue( ValueAst *node ) override; 0040 void visitValueList( ValueListAst *node ) override; 0041 void visitVariableAssignment( VariableAssignmentAst *node ) override; 0042 0043 private: 0044 QString getTokenString(qint64 idx); 0045 void setPositionForToken( qint64 idx, ValueAST* ast ); 0046 void setPositionForAst( AstNode* node, AST* ast ); 0047 0048 template <typename T> T* stackTop(); 0049 template <typename T> T* stackPop(); 0050 template <typename T> T* createAst( AstNode* node, AST* ast ); 0051 0052 KDevelop::Stack<AST*> aststack; 0053 Parser* m_parser; 0054 QList<StatementAST*>* m_currentStatements = nullptr; 0055 }; 0056 0057 } 0058 0059 #endif 0060