1 /* 2 SPDX-FileCopyrightText: 2007 Andreas Pakulat <apaku@gmx.de> 3 4 SPDX-License-Identifier: LGPL-2.0-or-later 5 */ 6 7 #ifndef BUILDASTVISITOR_H 8 #define BUILDASTVISITOR_H 9 10 #include "qmakedefaultvisitor.h" 11 #include <util/stack.h> 12 13 class QString; 14 15 namespace QMake 16 { 17 18 class Parser; 19 class ProjectAST; 20 class AST; 21 class ValueAST; 22 23 class BuildASTVisitor : public DefaultVisitor 24 { 25 public: 26 BuildASTVisitor(Parser* parser, ProjectAST* project); 27 ~BuildASTVisitor() override; 28 void visitArgumentList( ArgumentListAst *node ) override; 29 void visitFunctionArguments( FunctionArgumentsAst *node ) override; 30 void visitOrOperator( OrOperatorAst *node ) override; 31 void visitItem( ItemAst *node ) override; 32 void visitScope( ScopeAst *node ) override; 33 void visitOp( OpAst *node ) override; 34 void visitProject( ProjectAst *node ) override; 35 void visitScopeBody( ScopeBodyAst *node ) override; 36 void visitStatement( StatementAst *node ) override; 37 void visitValue( ValueAst *node ) override; 38 void visitValueList( ValueListAst *node ) override; 39 void visitVariableAssignment( VariableAssignmentAst *node ) override; 40 41 private: 42 QString getTokenString(qint64 idx); 43 void setPositionForToken( qint64 idx, ValueAST* ast ); 44 void setPositionForAst( AstNode* node, AST* ast ); 45 46 template <typename T> T* stackTop(); 47 template <typename T> T* stackPop(); 48 template <typename T> T* createAst( AstNode* node, AST* ast ); 49 50 KDevelop::Stack<AST*> aststack; 51 Parser* m_parser; 52 }; 53 54 } 55 56 #endif 57 58