Refactored build_template_instantiation method
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -147,6 +147,42 @@ private:
|
|||||||
int arg_index, bool variadic_params,
|
int arg_index, bool variadic_params,
|
||||||
const clanguml::class_diagram::model::template_parameter &ct) const;
|
const clanguml::class_diagram::model::template_parameter &ct) const;
|
||||||
|
|
||||||
|
void build_template_instantiation_process_template_arguments(
|
||||||
|
std::optional<clanguml::class_diagram::model::class_ *> &parent,
|
||||||
|
std::deque<std::tuple<std::string, int, bool>> &template_base_params,
|
||||||
|
// const clang::TemplateSpecializationType &template_type,
|
||||||
|
const clang::ArrayRef<clang::TemplateArgument> &template_args,
|
||||||
|
model::class_ &template_instantiation,
|
||||||
|
const std::string &full_template_specialization_name,
|
||||||
|
const clang::TemplateDecl *template_decl);
|
||||||
|
|
||||||
|
void build_template_instantiation_process_tag_argument(
|
||||||
|
model::class_ &template_instantiation,
|
||||||
|
const std::string &full_template_specialization_name,
|
||||||
|
const clang::TemplateDecl *template_decl,
|
||||||
|
const clang::TemplateArgument &arg,
|
||||||
|
model::template_parameter &argument);
|
||||||
|
|
||||||
|
void build_template_instantiation_process_expression_argument(
|
||||||
|
const clang::TemplateArgument &arg,
|
||||||
|
model::template_parameter &argument) const;
|
||||||
|
|
||||||
|
void build_template_instantiation_process_integral_argument(
|
||||||
|
const clang::TemplateArgument &arg,
|
||||||
|
model::template_parameter &argument) const;
|
||||||
|
|
||||||
|
void build_template_instantiation_process_type_argument(
|
||||||
|
std::optional<clanguml::class_diagram::model::class_ *> &parent,
|
||||||
|
const std::string &full_template_specialization_name,
|
||||||
|
const clang::TemplateDecl *template_decl,
|
||||||
|
const clang::TemplateArgument &arg,
|
||||||
|
model::class_ &template_instantiation,
|
||||||
|
model::template_parameter &argument);
|
||||||
|
|
||||||
|
void build_template_instantiation_process_template_argument(
|
||||||
|
const clang::TemplateArgument &arg,
|
||||||
|
model::template_parameter &argument) const;
|
||||||
|
|
||||||
void process_function_parameter_find_relationships_in_template(
|
void process_function_parameter_find_relationships_in_template(
|
||||||
clanguml::class_diagram::model::class_ &c,
|
clanguml::class_diagram::model::class_ &c,
|
||||||
const std::set<std::string> &template_parameter_names,
|
const std::set<std::string> &template_parameter_names,
|
||||||
|
|||||||
@@ -62,4 +62,20 @@ template <> id_t to_id(const std::filesystem::path &file)
|
|||||||
return to_id(file.lexically_normal().string());
|
return to_id(file.lexically_normal().string());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <> id_t to_id(const clang::TemplateArgument &template_argument)
|
||||||
|
{
|
||||||
|
if (template_argument.getKind() == clang::TemplateArgument::Type) {
|
||||||
|
if (template_argument.getAsType()->getAs<clang::EnumType>())
|
||||||
|
return to_id(*template_argument.getAsType()
|
||||||
|
->getAs<clang::EnumType>()
|
||||||
|
->getAsTagDecl());
|
||||||
|
else if (template_argument.getAsType()->getAs<clang::RecordType>())
|
||||||
|
return to_id(*template_argument.getAsType()
|
||||||
|
->getAs<clang::RecordType>()
|
||||||
|
->getAsRecordDecl());
|
||||||
|
}
|
||||||
|
|
||||||
|
throw std::runtime_error("Cannot generate id for template argument");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user