Browse Source

Refactored common template handling code in native AST.

pull/685/head
Joao Matos 9 years ago
parent
commit
12312bff14
  1. 38
      src/CppParser/AST.cpp
  2. 16
      src/CppParser/AST.h
  3. 6
      src/CppParser/Parser.cpp

38
src/CppParser/AST.cpp

@ -479,44 +479,6 @@ Function* DeclarationContext::FindFunction(const std::string& USR) @@ -479,44 +479,6 @@ Function* DeclarationContext::FindFunction(const std::string& USR)
return nullptr;
}
ClassTemplate*
DeclarationContext::FindClassTemplate(const std::string& USR)
{
auto foundTemplate = std::find_if(Templates.begin(), Templates.end(),
[&](Template* t) { return t->USR == USR; });
if (foundTemplate != Templates.end())
return static_cast<ClassTemplate*>(*foundTemplate);
return nullptr;
}
TypeAliasTemplate*
DeclarationContext::FindTypeAliasTemplate(const std::string& USR)
{
auto foundTemplate = std::find_if(Templates.begin(), Templates.end(),
[&](Template* t) { return t->USR == USR; }
);
if (foundTemplate != Templates.end())
return static_cast<TypeAliasTemplate*>(*foundTemplate);
return nullptr;
}
FunctionTemplate*
DeclarationContext::FindFunctionTemplate(const std::string& USR)
{
auto foundTemplate = std::find_if(Templates.begin(), Templates.end(),
[&](Template* t) { return t->USR == USR; }
);
if (foundTemplate != Templates.end())
return static_cast<FunctionTemplate*>(*foundTemplate);
return nullptr;
}
TypedefDecl* DeclarationContext::FindTypedef(const std::string& Name, bool Create)
{
auto foundTypedef = std::find_if(Typedefs.begin(), Typedefs.end(),

16
src/CppParser/AST.h

@ -472,9 +472,7 @@ public: @@ -472,9 +472,7 @@ public:
CS_IGNORE Class* FindClass(const std::string& Name, bool IsComplete,
bool Create);
CS_IGNORE TypeAliasTemplate* FindTypeAliasTemplate(const std::string& USR);
CS_IGNORE ClassTemplate* FindClassTemplate(const std::string& USR);
CS_IGNORE FunctionTemplate* FindFunctionTemplate(const std::string& USR);
CS_IGNORE template<typename T> T* FindTemplate(const std::string& USR);
CS_IGNORE Enumeration* FindEnum(const void* OriginalPtr);
CS_IGNORE Enumeration* FindEnum(const std::string& Name, bool Create = false);
@ -505,6 +503,18 @@ public: @@ -505,6 +503,18 @@ public:
bool IsAnonymous;
};
template<typename T>
T* DeclarationContext::FindTemplate(const std::string& USR)
{
auto foundTemplate = std::find_if(Templates.begin(), Templates.end(),
[&](Template* t) { return t->USR == USR; });
if (foundTemplate != Templates.end())
return static_cast<T*>(*foundTemplate);
return nullptr;
}
class CS_API TypedefNameDecl : public Declaration
{
public:

6
src/CppParser/Parser.cpp

@ -1194,7 +1194,7 @@ ClassTemplate* Parser::WalkClassTemplate(const clang::ClassTemplateDecl* TD) @@ -1194,7 +1194,7 @@ ClassTemplate* Parser::WalkClassTemplate(const clang::ClassTemplateDecl* TD)
assert(NS && "Expected a valid namespace");
auto USR = GetDeclUSR(TD);
auto CT = NS->FindClassTemplate(USR);
auto CT = NS->FindTemplate<ClassTemplate>(USR);
if (CT != nullptr)
return CT;
@ -1379,7 +1379,7 @@ TypeAliasTemplate* Parser::WalkTypeAliasTemplate( @@ -1379,7 +1379,7 @@ TypeAliasTemplate* Parser::WalkTypeAliasTemplate(
assert(NS && "Expected a valid namespace");
auto USR = GetDeclUSR(TD);
auto TA = NS->FindTypeAliasTemplate(USR);
auto TA = NS->FindTemplate<TypeAliasTemplate>(USR);
if (TA != nullptr)
return TA;
@ -1405,7 +1405,7 @@ FunctionTemplate* Parser::WalkFunctionTemplate(const clang::FunctionTemplateDecl @@ -1405,7 +1405,7 @@ FunctionTemplate* Parser::WalkFunctionTemplate(const clang::FunctionTemplateDecl
assert(NS && "Expected a valid namespace");
auto USR = GetDeclUSR(TD);
auto FT = NS->FindFunctionTemplate(USR);
auto FT = NS->FindTemplate<FunctionTemplate>(USR);
if (FT != nullptr)
return FT;

Loading…
Cancel
Save