Fixed generation of dependent template argument names (#146)
This commit is contained in:
@@ -484,10 +484,9 @@ void template_builder::argument_process_dispatch(
|
|||||||
template_parameter template_builder::process_template_argument(
|
template_parameter template_builder::process_template_argument(
|
||||||
const clang::TemplateArgument &arg)
|
const clang::TemplateArgument &arg)
|
||||||
{
|
{
|
||||||
LOG_DBG("Processing template argument: {}", common::to_string(arg));
|
auto arg_name = common::to_string(arg);
|
||||||
|
|
||||||
auto arg_name =
|
LOG_DBG("Processing template argument: {}", arg_name);
|
||||||
arg.getAsTemplate().getAsTemplateDecl()->getQualifiedNameAsString();
|
|
||||||
|
|
||||||
return template_parameter::make_template_type(arg_name);
|
return template_parameter::make_template_type(arg_name);
|
||||||
}
|
}
|
||||||
@@ -495,11 +494,14 @@ template_parameter template_builder::process_template_argument(
|
|||||||
template_parameter template_builder::process_template_expansion(
|
template_parameter template_builder::process_template_expansion(
|
||||||
const clang::TemplateArgument &arg)
|
const clang::TemplateArgument &arg)
|
||||||
{
|
{
|
||||||
LOG_DBG(
|
auto arg_name = common::to_string(arg);
|
||||||
"Processing template expansion argument: {}", common::to_string(arg));
|
|
||||||
|
|
||||||
auto arg_name =
|
LOG_DBG("Processing template expansion argument: {}", arg_name);
|
||||||
arg.getAsTemplate().getAsTemplateDecl()->getQualifiedNameAsString();
|
|
||||||
|
util::apply_if_not_null(
|
||||||
|
arg.getAsTemplate().getAsTemplateDecl(), [&arg_name](const auto *decl) {
|
||||||
|
arg_name = decl->getQualifiedNameAsString();
|
||||||
|
});
|
||||||
|
|
||||||
auto param = template_parameter::make_template_type(arg_name);
|
auto param = template_parameter::make_template_type(arg_name);
|
||||||
param.is_variadic(true);
|
param.is_variadic(true);
|
||||||
|
|||||||
@@ -205,11 +205,29 @@ std::string to_string(
|
|||||||
return "nullptr";
|
return "nullptr";
|
||||||
case clang::TemplateArgument::Integral:
|
case clang::TemplateArgument::Integral:
|
||||||
return std::to_string(arg.getAsIntegral().getExtValue());
|
return std::to_string(arg.getAsIntegral().getExtValue());
|
||||||
|
case clang::TemplateArgument::Template:
|
||||||
|
return to_string(arg.getAsTemplate());
|
||||||
|
case clang::TemplateArgument::TemplateExpansion:
|
||||||
|
return to_string(arg.getAsTemplateOrTemplatePattern());
|
||||||
default:
|
default:
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string to_string(const clang::TemplateName &templ)
|
||||||
|
{
|
||||||
|
if (templ.getAsTemplateDecl() != nullptr) {
|
||||||
|
return templ.getAsTemplateDecl()->getQualifiedNameAsString();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string result;
|
||||||
|
const clang::LangOptions lang_options;
|
||||||
|
llvm::raw_string_ostream ostream(result);
|
||||||
|
templ.print(ostream, clang::PrintingPolicy(lang_options));
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
std::string to_string(const clang::Expr *expr)
|
std::string to_string(const clang::Expr *expr)
|
||||||
{
|
{
|
||||||
const clang::LangOptions lang_options;
|
const clang::LangOptions lang_options;
|
||||||
|
|||||||
@@ -92,6 +92,8 @@ std::string to_string(const clang::FunctionTemplateDecl *decl);
|
|||||||
|
|
||||||
std::string to_string(const clang::TypeConstraint *tc);
|
std::string to_string(const clang::TypeConstraint *tc);
|
||||||
|
|
||||||
|
std::string to_string(const clang::TemplateName &templ);
|
||||||
|
|
||||||
std::string get_source_text_raw(
|
std::string get_source_text_raw(
|
||||||
clang::SourceRange range, const clang::SourceManager &sm);
|
clang::SourceRange range, const clang::SourceManager &sm);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user