Commit 5bee5dea authored by Roberto Raggi's avatar Roberto Raggi

Check the scope of class and fwd-class declarations

parent b07c1be5
......@@ -166,6 +166,26 @@ protected:
return false;
}
bool checkScope(Symbol *symbol, Symbol *otherSymbol) const
{
if (! (symbol && otherSymbol))
return false;
else if (symbol->scope() == otherSymbol->scope())
return true;
else if (symbol->name() && otherSymbol->name()) {
if (! symbol->name()->isEqualTo(otherSymbol->name()))
return false;
} else if (symbol->name() != otherSymbol->name()) {
return false;
}
return checkScope(symbol->enclosingSymbol(), otherSymbol->enclosingSymbol());
}
bool isDeclSymbol(Symbol *symbol) const
{
if (! symbol)
......@@ -180,11 +200,11 @@ protected:
} else if (symbol->isForwardClassDeclaration() && (_declSymbol->isClass() ||
_declSymbol->isForwardClassDeclaration())) {
return true;
return checkScope(symbol, _declSymbol);
} else if (_declSymbol->isForwardClassDeclaration() && (symbol->isClass() ||
symbol->isForwardClassDeclaration())) {
return true;
return checkScope(symbol, _declSymbol);
}
return false;
......
......@@ -314,6 +314,14 @@ void Symbol::setScope(Scope *scope)
_scope = scope;
}
Symbol *Symbol::enclosingSymbol() const
{
if (! _scope)
return 0;
return _scope->owner();
}
Scope *Symbol::enclosingNamespaceScope() const
{
if (! _scope)
......
......@@ -281,6 +281,8 @@ public:
bool isGenerated() const;
Symbol *enclosingSymbol() const;
/// Returns the eclosing namespace scope.
Scope *enclosingNamespaceScope() const;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment