data: template arguments default parameters

* implemented parsing of template argument default parameters.
* added tests for default arguments of template parameters.

fortune cookie message = If you continually give, you will continually have.
This commit is contained in:
malte_langkabel
2015-02-03 16:22:48 +01:00
parent 799f324463
commit bdcca6dbad
10 changed files with 96 additions and 37 deletions
+2
View File
@@ -103,6 +103,8 @@ public:
virtual Id onTemplateRecordArgumentTypeParsed(
const ParseLocation& location, const std::vector<std::string>& templateArgumentTypeNameHierarchy,
const std::vector<std::string>& templateRecordNameHierarchy) = 0;
virtual Id onTemplateDefaultArgumentTypeParsed(
const ParseTypeUsage& type, const std::vector<std::string>& templateArgumentTypeNameHierarchy) = 0;
virtual Id onTemplateRecordSpecializationParsed(
const ParseLocation& location, const std::vector<std::string>& specializedRecordNameHierarchy,
const RecordType specializedRecordType, const std::vector<std::string>& specializedFromNameHierarchy) = 0;
+11
View File
@@ -266,7 +266,18 @@ bool ASTVisitor::VisitEnumConstantDecl(clang::EnumConstantDecl* declaration)
utility::getDeclNameHierarchy(declaration)
);
}
return true;
}
bool ASTVisitor::VisitTemplateTypeParmDecl(clang::TemplateTypeParmDecl *declaration)
{
if (declaration->hasDefaultArgument())
{
m_client->onTemplateDefaultArgumentTypeParsed(
getParseTypeUsage(declaration->getDefaultArgumentInfo()->getTypeLoc(), declaration->getDefaultArgument()),
utility::getDeclNameHierarchy(declaration)
);
}
return true;
}
+1
View File
@@ -36,6 +36,7 @@ public:
virtual bool VisitEnumDecl(clang::EnumDecl* declaration); // enums
virtual bool VisitEnumConstantDecl(clang::EnumConstantDecl* declaration); // enum fields
virtual bool VisitTemplateTypeParmDecl(clang::TemplateTypeParmDecl *declaration);
virtual bool VisitClassTemplateDecl(clang::ClassTemplateDecl* declaration);
virtual bool VisitClassTemplatePartialSpecializationDecl(clang::ClassTemplatePartialSpecializationDecl* declaration);
virtual bool VisitFunctionTemplateDecl(clang::FunctionTemplateDecl *declaration);
+8 -1
View File
@@ -121,7 +121,14 @@ namespace utility
LOG_ERROR("unhandled declaration type");
}
contextNameHierarchy = getContextNameHierarchy(declaration->getDeclContext());
contextNameHierarchy.push_back(declName);
if (clang::isa<clang::TemplateTypeParmDecl>(declaration))
{
contextNameHierarchy.back() += "::" + declName;
}
else
{
contextNameHierarchy.push_back(declName);
}
}
return contextNameHierarchy;
}