summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/shared/cplusplus/Symbol.cpp56
-rw-r--r--src/shared/cplusplus/Symbol.h15
2 files changed, 71 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; }
diff --git a/src/shared/cplusplus/Symbol.h b/src/shared/cplusplus/Symbol.h
index c5cc484f10..12c4822241 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