File indexing completed on 2024-05-19 15:46:17

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