From 19dd2b814fcd37b106048d202339d63d6232728e Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Wed, 3 Jun 2009 14:15:49 +0200 Subject: [PATCH] Added Symbol::enclosingNamespaceScope(), Symbol::enclosingClassScope(), and so on... --- src/shared/cplusplus/Symbol.cpp | 56 +++++++++++++++++++++++++++++++++ src/shared/cplusplus/Symbol.h | 15 +++++++++ 2 files changed, 71 insertions(+) diff --git a/src/shared/cplusplus/Symbol.cpp b/src/shared/cplusplus/Symbol.cpp index a012cca8ad8..82d3e5c0165 100644 --- a/src/shared/cplusplus/Symbol.cpp +++ b/src/shared/cplusplus/Symbol.cpp @@ -55,6 +55,7 @@ #include "MemoryPool.h" #include "SymbolVisitor.h" #include "NameVisitor.h" +#include "Scope.h" #include <cstddef> #include <cassert> @@ -313,6 +314,61 @@ void Symbol::setScope(Scope *scope) _scope = scope; } +Scope *Symbol::enclosingNamespaceScope() const +{ + if (! _scope) + return 0; + + else if (_scope->isNamespaceScope()) + return _scope; + + return _scope->enclosingNamespaceScope(); +} + +Scope *Symbol::enclosingClassScope() const +{ + if (! _scope) + return 0; + + else if (_scope->isNamespaceScope()) + return _scope; + + return _scope->enclosingNamespaceScope(); +} + +Scope *Symbol::enclosingEnumScope() const +{ + if (! _scope) + return 0; + + else if (_scope->isEnumScope()) + return _scope; + + return _scope->enclosingEnumScope(); +} + +Scope *Symbol::enclosingFunctionScope() const +{ + if (! _scope) + return 0; + + else if (_scope->isFunctionScope()) + return _scope; + + return _scope->enclosingFunctionScope(); +} + +Scope *Symbol::enclosingBlockScope() const +{ + if (! _scope) + return 0; + + else if (_scope->isBlockScope()) + return _scope; + + return _scope->enclosingBlockScope(); +} + unsigned Symbol::index() const { return _index; } diff --git a/src/shared/cplusplus/Symbol.h b/src/shared/cplusplus/Symbol.h index c5cc484f108..12c48222416 100644 --- a/src/shared/cplusplus/Symbol.h +++ b/src/shared/cplusplus/Symbol.h @@ -248,6 +248,21 @@ public: bool isGenerated() const; + /// Returns the eclosing namespace scope. + Scope *enclosingNamespaceScope() const; + + /// Returns the enclosing class scope. + Scope *enclosingClassScope() const; + + /// Returns the enclosing enum scope. + Scope *enclosingEnumScope() const; + + /// Returns the enclosing function scope. + Scope *enclosingFunctionScope() const; + + /// Returns the enclosing Block scope. + Scope *enclosingBlockScope() const; + void setScope(Scope *scope); // ### make me private void setSourceLocation(unsigned sourceLocation); // ### make me private -- GitLab