MCPcopy Create free account
hub / github.com/andreasfertig/cppinsights / InsertTemplateArg

Method InsertTemplateArg

CodeGenerator.cpp:4611–4672  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4609//-----------------------------------------------------------------------------
4610
4611void CodeGenerator::InsertTemplateArg(const TemplateArgument& arg)
4612{
4613 switch(arg.getKind()) {
4614 case TemplateArgument::Type: mOutputFormatHelper.Append(GetName(arg.getAsType())); break;
4615 case TemplateArgument::Declaration:
4616 // TODO: handle pointers
4617 if(const auto decl = dyn_cast_or_null<TemplateParamObjectDecl>(arg.getAsDecl())) {
4618 mOutputFormatHelper.Append(GetName(*decl));
4619 } else {
4620 mOutputFormatHelper.Append("&"sv, GetName(*arg.getAsDecl(), QualifiedName::Yes));
4621 }
4622 break;
4623 case TemplateArgument::NullPtr: mOutputFormatHelper.Append(kwNullptr); break;
4624 case TemplateArgument::Integral:
4625
4626 if(const auto& integral = arg.getAsIntegral(); arg.getIntegralType()->isCharType()) {
4627 const char c{static_cast<char>(integral.getZExtValue())};
4628 mOutputFormatHelper.Append("'"sv, std::string{c}, "'"sv);
4629 } else {
4630 mOutputFormatHelper.Append(integral);
4631 }
4632
4633 break;
4634 case TemplateArgument::Expression: {
4635 if(auto val = EvaluateNTTPAsConstantExpr(arg.getAsExpr()->IgnoreParenImpCasts())) {
4636 mOutputFormatHelper.Append(
4637 GetName(val->first),
4638 BuildTemplateParamObjectName(val->second.getAsString(GetGlobalAST(), val->first)));
4639 } else {
4640 InsertArg(arg.getAsExpr());
4641 }
4642 }
4643
4644 break;
4645 case TemplateArgument::Pack: HandleTemplateParameterPack(arg.pack_elements()); break;
4646 case TemplateArgument::Template: [[fallthrough]];
4647 case TemplateArgument::TemplateExpansion:
4648 if(const auto* tmplDecl = arg.getAsTemplateOrTemplatePattern().getAsTemplateDecl()) {
4649 mOutputFormatHelper.Append(GetName(*tmplDecl, QualifiedName::Yes));
4650
4651#if IS_CLANG_NEWER_THAN(20)
4652 } else if(const auto* depName = arg.getAsTemplateOrTemplatePattern().getAsDependentTemplateName();
4653 depName->getName().getIdentifier()) {
4654 InsertNamespace(depName->getQualifier());
4655
4656 mOutputFormatHelper.Append(kwTemplateSpace, GetName(*depName));
4657#else
4658 } else if(const auto* depName = arg.getAsTemplateOrTemplatePattern().getAsDependentTemplateName();
4659 depName->isIdentifier()) {
4660 InsertNamespace(depName->getQualifier());
4661
4662 mOutputFormatHelper.Append(kwTemplateSpace, depName->getIdentifier()->getName());
4663#endif
4664 } else {
4665 ToDo(arg, mOutputFormatHelper);
4666 }
4667
4668 break;

Callers 1

InsertCoroutineMethod · 0.45

Calls 6

GetNameFunction · 0.85
ToDoFunction · 0.85
AppendMethod · 0.80
getNameMethod · 0.80

Tested by

no test coverage detected