From 5d7def6d2ad8be72f4b6e1255a779209dbe90ff8 Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Tue, 17 Nov 2009 13:28:20 +0100 Subject: [PATCH] Refactored the AST visitors. Now, the ASTVisitor constructor takes a valid reference to a TranslationUnit. --- src/libs/cplusplus/ASTParent.cpp | 4 ++-- src/libs/cplusplus/ASTParent.h | 2 +- src/libs/cplusplus/CheckUndefinedSymbols.cpp | 2 +- src/libs/cplusplus/CppDocument.cpp | 2 +- src/libs/cplusplus/FindUsages.cpp | 4 ++-- src/libs/cplusplus/ResolveExpression.cpp | 4 ++-- src/plugins/cppeditor/cppeditor.cpp | 18 +++++++++--------- src/plugins/cppeditor/cppquickfix.cpp | 4 +++- src/shared/cplusplus/ASTVisitor.cpp | 16 ++++++++++++---- src/shared/cplusplus/ASTVisitor.h | 7 ++++--- src/shared/cplusplus/Semantic.cpp | 13 +++++++++---- src/shared/cplusplus/Semantic.h | 3 ++- src/shared/cplusplus/SemanticCheck.cpp | 2 +- 13 files changed, 49 insertions(+), 32 deletions(-) diff --git a/src/libs/cplusplus/ASTParent.cpp b/src/libs/cplusplus/ASTParent.cpp index e751d504f99..5e9d5f98b6f 100644 --- a/src/libs/cplusplus/ASTParent.cpp +++ b/src/libs/cplusplus/ASTParent.cpp @@ -32,8 +32,8 @@ using namespace CPlusPlus; -ASTParent::ASTParent(Control *control, AST *rootNode) - : ASTVisitor(control) +ASTParent::ASTParent(TranslationUnit *translationUnit, AST *rootNode) + : ASTVisitor(translationUnit) { accept(rootNode); } diff --git a/src/libs/cplusplus/ASTParent.h b/src/libs/cplusplus/ASTParent.h index ec5ea563d0c..a934f9c80df 100644 --- a/src/libs/cplusplus/ASTParent.h +++ b/src/libs/cplusplus/ASTParent.h @@ -39,7 +39,7 @@ namespace CPlusPlus { class CPLUSPLUS_EXPORT ASTParent: protected ASTVisitor { public: - ASTParent(Control *control, AST *rootNode); + ASTParent(TranslationUnit *transaltionUnit, AST *rootNode); virtual ~ASTParent(); AST *operator()(AST *ast) const; diff --git a/src/libs/cplusplus/CheckUndefinedSymbols.cpp b/src/libs/cplusplus/CheckUndefinedSymbols.cpp index 6010e4283ee..51d02a0dc47 100644 --- a/src/libs/cplusplus/CheckUndefinedSymbols.cpp +++ b/src/libs/cplusplus/CheckUndefinedSymbols.cpp @@ -41,7 +41,7 @@ using namespace CPlusPlus; CheckUndefinedSymbols::CheckUndefinedSymbols(Document::Ptr doc) - : ASTVisitor(doc->control()), _doc(doc) + : ASTVisitor(doc->translationUnit()), _doc(doc) { } CheckUndefinedSymbols::~CheckUndefinedSymbols() diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp index bd86eecaae1..24614c06e19 100644 --- a/src/libs/cplusplus/CppDocument.cpp +++ b/src/libs/cplusplus/CppDocument.cpp @@ -404,7 +404,7 @@ void Document::check(CheckMode mode) if (! isParsed()) parse(); - Semantic semantic(_control); + Semantic semantic(_translationUnit); if (mode == FastCheck) semantic.setSkipFunctionBodies(true); diff --git a/src/libs/cplusplus/FindUsages.cpp b/src/libs/cplusplus/FindUsages.cpp index 5914322404e..7374e034fb6 100644 --- a/src/libs/cplusplus/FindUsages.cpp +++ b/src/libs/cplusplus/FindUsages.cpp @@ -41,12 +41,12 @@ using namespace CPlusPlus; FindUsages::FindUsages(Document::Ptr doc, const Snapshot &snapshot, QFutureInterface<Usage> *future) - : ASTVisitor(doc->control()), + : ASTVisitor(doc->translationUnit()), _future(future), _doc(doc), _snapshot(snapshot), _source(_doc->source()), - _sem(doc->control()), + _sem(doc->translationUnit()), _inSimpleDeclaration(0) { _snapshot.insert(_doc); diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp index ba6952e7bff..de26ea9c5d3 100644 --- a/src/libs/cplusplus/ResolveExpression.cpp +++ b/src/libs/cplusplus/ResolveExpression.cpp @@ -72,9 +72,9 @@ static QList<_Tp> removeDuplicates(const QList<_Tp> &results) // ResolveExpression ///////////////////////////////////////////////////////////////////// ResolveExpression::ResolveExpression(const LookupContext &context) - : ASTVisitor(context.expressionDocument()->control()), + : ASTVisitor(context.expressionDocument()->translationUnit()), _context(context), - sem(_context.control()) + sem(context.expressionDocument()->translationUnit()) { } ResolveExpression::~ResolveExpression() diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index b9af8ad076b..59d06a90392 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -191,8 +191,8 @@ class FindUses: protected ASTVisitor FindScope findScope; public: - FindUses(Control *control) - : ASTVisitor(control) + FindUses(TranslationUnit *translationUnit) + : ASTVisitor(translationUnit) { } // local and external uses. @@ -382,8 +382,8 @@ class FunctionDefinitionUnderCursor: protected ASTVisitor FunctionDefinitionAST *_functionDefinition; public: - FunctionDefinitionUnderCursor(Control *control) - : ASTVisitor(control), + FunctionDefinitionUnderCursor(TranslationUnit *translationUnit) + : ASTVisitor(translationUnit), _line(0), _column(0) { } @@ -427,8 +427,9 @@ class ProcessDeclarators: protected ASTVisitor bool _visitFunctionDeclarator; public: - ProcessDeclarators(Control *control) - : ASTVisitor(control), _visitFunctionDeclarator(true) + ProcessDeclarators(TranslationUnit *translationUnit) + : ASTVisitor(translationUnit), + _visitFunctionDeclarator(true) { } QList<DeclaratorIdAST *> operator()(FunctionDefinitionAST *ast) @@ -2030,14 +2031,13 @@ SemanticInfo SemanticHighlighter::semanticInfo(const Source &source) doc->check(); } - Control *control = doc->control(); TranslationUnit *translationUnit = doc->translationUnit(); AST *ast = translationUnit->ast(); - FunctionDefinitionUnderCursor functionDefinitionUnderCursor(control); + FunctionDefinitionUnderCursor functionDefinitionUnderCursor(translationUnit); FunctionDefinitionAST *currentFunctionDefinition = functionDefinitionUnderCursor(ast, source.line, source.column); - FindUses useTable(control); + FindUses useTable(translationUnit); useTable(currentFunctionDefinition); SemanticInfo semanticInfo; diff --git a/src/plugins/cppeditor/cppquickfix.cpp b/src/plugins/cppeditor/cppquickfix.cpp index db3a8142543..11e9c221aef 100644 --- a/src/plugins/cppeditor/cppquickfix.cpp +++ b/src/plugins/cppeditor/cppquickfix.cpp @@ -54,7 +54,9 @@ class ASTPath: public ASTVisitor public: ASTPath(Document::Ptr doc) - : ASTVisitor(doc->control()), _doc(doc), _line(0), _column(0) {} + : ASTVisitor(doc->translationUnit()), + _doc(doc), _line(0), _column(0) + {} QList<AST *> operator()(const QTextCursor &cursor) { diff --git a/src/shared/cplusplus/ASTVisitor.cpp b/src/shared/cplusplus/ASTVisitor.cpp index 6f331515a08..9281efdf2b9 100644 --- a/src/shared/cplusplus/ASTVisitor.cpp +++ b/src/shared/cplusplus/ASTVisitor.cpp @@ -53,8 +53,8 @@ using namespace CPlusPlus; -ASTVisitor::ASTVisitor(Control *control) - : _control(control) +ASTVisitor::ASTVisitor(TranslationUnit *translationUnit) + : _translationUnit(translationUnit) { } ASTVisitor::~ASTVisitor() @@ -64,10 +64,18 @@ void ASTVisitor::accept(AST *ast) { AST::accept(ast, this); } Control *ASTVisitor::control() const -{ return _control; } +{ + if (_translationUnit) + return _translationUnit->control(); + + return 0; +} TranslationUnit *ASTVisitor::translationUnit() const -{ return _control->translationUnit(); } +{ return _translationUnit; } + +void ASTVisitor::setTranslationUnit(TranslationUnit *translationUnit) +{ _translationUnit = translationUnit; } unsigned ASTVisitor::tokenCount() const { return translationUnit()->tokenCount(); } diff --git a/src/shared/cplusplus/ASTVisitor.h b/src/shared/cplusplus/ASTVisitor.h index e1429fa2f6e..0a42b6f4d4e 100644 --- a/src/shared/cplusplus/ASTVisitor.h +++ b/src/shared/cplusplus/ASTVisitor.h @@ -61,12 +61,13 @@ class CPLUSPLUS_EXPORT ASTVisitor void operator =(const ASTVisitor &other); public: - ASTVisitor(Control *control); + ASTVisitor(TranslationUnit *unit); virtual ~ASTVisitor(); - Control *control() const; TranslationUnit *translationUnit() const; + void setTranslationUnit(TranslationUnit *translationUnit); + Control *control() const; unsigned tokenCount() const; const Token &tokenAt(unsigned index) const; int tokenKind(unsigned index) const; @@ -352,7 +353,7 @@ public: virtual void endVisit(ObjCSynchronizedStatementAST *) { } private: - Control *_control; + TranslationUnit *_translationUnit; }; } // end of namespace CPlusPlus diff --git a/src/shared/cplusplus/Semantic.cpp b/src/shared/cplusplus/Semantic.cpp index 8baf10d4b09..23e2fa2c95f 100644 --- a/src/shared/cplusplus/Semantic.cpp +++ b/src/shared/cplusplus/Semantic.cpp @@ -64,9 +64,10 @@ using namespace CPlusPlus; class Semantic::Data { public: - Data(Semantic *semantic, Control *control) + Data(Semantic *semantic, TranslationUnit *translationUnit) : semantic(semantic), - control(control), + translationUnit(translationUnit), + control(translationUnit->control()), skipFunctionBodies(false), visibility(Symbol::Public), ojbcVisibility(Symbol::Protected), @@ -90,6 +91,7 @@ public: } Semantic *semantic; + TranslationUnit *translationUnit; Control *control; bool skipFunctionBodies; int visibility; @@ -103,9 +105,9 @@ public: CheckName *checkName; }; -Semantic::Semantic(Control *control) +Semantic::Semantic(TranslationUnit *translationUnit) { - d = new Data(this, control); + d = new Data(this, translationUnit); d->checkSpecifier = new CheckSpecifier(this); d->checkDeclaration = new CheckDeclaration(this); d->checkDeclarator = new CheckDeclarator(this); @@ -117,6 +119,9 @@ Semantic::Semantic(Control *control) Semantic::~Semantic() { delete d; } +TranslationUnit *Semantic::translationUnit() const +{ return d->translationUnit; } + Control *Semantic::control() const { return d->control; } diff --git a/src/shared/cplusplus/Semantic.h b/src/shared/cplusplus/Semantic.h index 391872d8470..4a2ebfc2fbd 100644 --- a/src/shared/cplusplus/Semantic.h +++ b/src/shared/cplusplus/Semantic.h @@ -61,9 +61,10 @@ class CPLUSPLUS_EXPORT Semantic void operator =(const Semantic &other); public: - Semantic(Control *control); + Semantic(TranslationUnit *translationUnit); virtual ~Semantic(); + TranslationUnit *translationUnit() const; Control *control() const; FullySpecifiedType check(SpecifierListAST *specifier, Scope *scope); diff --git a/src/shared/cplusplus/SemanticCheck.cpp b/src/shared/cplusplus/SemanticCheck.cpp index 1feffd93aa5..b28c01636b4 100644 --- a/src/shared/cplusplus/SemanticCheck.cpp +++ b/src/shared/cplusplus/SemanticCheck.cpp @@ -52,7 +52,7 @@ using namespace CPlusPlus; SemanticCheck::SemanticCheck(Semantic *semantic) - : ASTVisitor(semantic->control()), + : ASTVisitor(semantic->translationUnit()), _semantic(semantic) { } -- GitLab