diff options
-rw-r--r-- | src/shared/cplusplus/Bind.cpp | 12 | ||||
-rw-r--r-- | src/shared/cplusplus/Bind.h | 12 |
2 files changed, 14 insertions, 10 deletions
diff --git a/src/shared/cplusplus/Bind.cpp b/src/shared/cplusplus/Bind.cpp index 3856b3cae5..1d34971ac0 100644 --- a/src/shared/cplusplus/Bind.cpp +++ b/src/shared/cplusplus/Bind.cpp @@ -68,8 +68,6 @@ Bind::Bind(TranslationUnit *unit) _name(0), _declaratorId(0) { - if (unit->ast()) - translationUnit(unit->ast()->asTranslationUnit()); } Scope *Bind::currentScope() const @@ -84,6 +82,13 @@ Scope *Bind::switchScope(Scope *scope) return previousScope; } +void Bind::operator()(TranslationUnitAST *ast, Namespace *globalNamespace) +{ + Scope *previousScope = switchScope(globalNamespace); + translationUnit(ast); + (void) switchScope(previousScope); +} + void Bind::statement(StatementAST *ast) { accept(ast); @@ -703,12 +708,9 @@ void Bind::translationUnit(TranslationUnitAST *ast) if (! ast) return; - Namespace *globalNamespace = control()->newNamespace(0, 0); - Scope *previousScope = switchScope(globalNamespace); for (DeclarationListAST *it = ast->declaration_list; it; it = it->next) { this->declaration(it->value); } - (void) switchScope(previousScope); } bool Bind::visit(ObjCProtocolRefsAST *ast) diff --git a/src/shared/cplusplus/Bind.h b/src/shared/cplusplus/Bind.h index 51cf61aa12..a323bc00b5 100644 --- a/src/shared/cplusplus/Bind.h +++ b/src/shared/cplusplus/Bind.h @@ -59,6 +59,13 @@ class CPLUSPLUS_EXPORT Bind: protected ASTVisitor public: Bind(TranslationUnit *unit); + void operator()(TranslationUnitAST *ast, Namespace *globalNamespace); + +protected: + using ASTVisitor::translationUnit; + + static int visibilityForAccessSpecifier(int tokenKind); + typedef FullySpecifiedType ExpressionTy; ExpressionTy expression(ExpressionAST *ast); @@ -75,11 +82,6 @@ public: Scope *currentScope() const; Scope *switchScope(Scope *scope); -protected: - using ASTVisitor::translationUnit; - - static int visibilityForAccessSpecifier(int tokenKind); - const Name *objCSelectorArgument(ObjCSelectorArgumentAST *ast, bool *hasArg); void attribute(AttributeAST *ast); FullySpecifiedType declarator(DeclaratorAST *ast, const FullySpecifiedType &init, DeclaratorIdAST **declaratorId); |