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