mirror of
https://github.com/pocoproject/poco.git
synced 2025-04-01 01:16:55 +02:00
base class lookup
This commit is contained in:
parent
0bf69ab832
commit
da39e3ce70
@ -119,6 +119,11 @@ public:
|
|||||||
bool isDeleted() const;
|
bool isDeleted() const;
|
||||||
/// Returns true iff the method has been deleted.
|
/// Returns true iff the method has been deleted.
|
||||||
|
|
||||||
|
bool isVirtual() const;
|
||||||
|
/// Returns true if the method is virtual. Also examines base
|
||||||
|
/// classes to check for a virtual function with the same
|
||||||
|
/// signature.
|
||||||
|
|
||||||
bool isStatic() const;
|
bool isStatic() const;
|
||||||
/// Returns true iff the method is static.
|
/// Returns true iff the method is static.
|
||||||
|
|
||||||
@ -128,11 +133,6 @@ public:
|
|||||||
std::string signature() const;
|
std::string signature() const;
|
||||||
/// Returns the signature of the function.
|
/// Returns the signature of the function.
|
||||||
|
|
||||||
bool isVirtual() const;
|
|
||||||
/// Returns true if the method is virtual. Also examines base
|
|
||||||
/// classes to check for a virtual function with the same
|
|
||||||
/// signature.
|
|
||||||
|
|
||||||
Function* getOverridden() const;
|
Function* getOverridden() const;
|
||||||
/// If the function is virtual and overrides a function in a
|
/// If the function is virtual and overrides a function in a
|
||||||
/// base class, the base class function is returned.
|
/// base class, the base class function is returned.
|
||||||
|
@ -62,7 +62,7 @@ public:
|
|||||||
Iterator end() const;
|
Iterator end() const;
|
||||||
/// Returns an iterator for iterating over the NameSpace's Symbol's.
|
/// Returns an iterator for iterating over the NameSpace's Symbol's.
|
||||||
|
|
||||||
Symbol* lookup(const std::string& name) const;
|
virtual Symbol* lookup(const std::string& name) const;
|
||||||
/// Looks up the given name in the symbol table
|
/// Looks up the given name in the symbol table
|
||||||
/// and returns the corresponding symbol, or null
|
/// and returns the corresponding symbol, or null
|
||||||
/// if no symbol can be found. The name can include
|
/// if no symbol can be found. The name can include
|
||||||
|
@ -139,6 +139,9 @@ public:
|
|||||||
Symbol::Kind kind() const;
|
Symbol::Kind kind() const;
|
||||||
std::string toString() const;
|
std::string toString() const;
|
||||||
|
|
||||||
|
// Namespace
|
||||||
|
Symbol* lookup(const std::string& name) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string _decl;
|
std::string _decl;
|
||||||
BaseClasses _bases;
|
BaseClasses _bases;
|
||||||
|
@ -99,7 +99,8 @@ Symbol* NameSpace::lookup(const std::string& name, std::set<const NameSpace*>& a
|
|||||||
return pSymbol;
|
return pSymbol;
|
||||||
|
|
||||||
if (alreadyVisited.find(this) != alreadyVisited.end())
|
if (alreadyVisited.find(this) != alreadyVisited.end())
|
||||||
return pSymbol;
|
return pSymbol;
|
||||||
|
|
||||||
std::string head;
|
std::string head;
|
||||||
std::string tail;
|
std::string tail;
|
||||||
splitName(name, head, tail);
|
splitName(name, head, tail);
|
||||||
@ -107,7 +108,6 @@ Symbol* NameSpace::lookup(const std::string& name, std::set<const NameSpace*>& a
|
|||||||
alreadyVisited.insert(this);
|
alreadyVisited.insert(this);
|
||||||
bool currentNSInserted = true;
|
bool currentNSInserted = true;
|
||||||
|
|
||||||
|
|
||||||
if (head.empty())
|
if (head.empty())
|
||||||
{
|
{
|
||||||
alreadyVisited.insert(this);
|
alreadyVisited.insert(this);
|
||||||
|
@ -252,4 +252,28 @@ std::string Struct::toString() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Symbol* Struct::lookup(const std::string& name) const
|
||||||
|
{
|
||||||
|
Symbol* pSymbol = NameSpace::lookup(name);
|
||||||
|
if (!pSymbol)
|
||||||
|
{
|
||||||
|
for (BaseIterator it = baseBegin(); it != baseEnd(); ++it)
|
||||||
|
{
|
||||||
|
if (it->access != Symbol::ACC_PRIVATE)
|
||||||
|
{
|
||||||
|
if (it->pClass)
|
||||||
|
{
|
||||||
|
pSymbol = it->pClass->lookup(name);
|
||||||
|
if (pSymbol)
|
||||||
|
{
|
||||||
|
return pSymbol;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pSymbol;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} } // namespace Poco::CppParser
|
} } // namespace Poco::CppParser
|
||||||
|
Loading…
x
Reference in New Issue
Block a user