diff options
Diffstat (limited to 'src/shared/cplusplus/Symbol.cpp')
-rw-r--r-- | src/shared/cplusplus/Symbol.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/shared/cplusplus/Symbol.cpp b/src/shared/cplusplus/Symbol.cpp index a012cca8ad..82d3e5c016 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; } |