diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/AST/TemplateName.cpp')
-rw-r--r-- | contrib/llvm/tools/clang/lib/AST/TemplateName.cpp | 54 |
1 files changed, 52 insertions, 2 deletions
diff --git a/contrib/llvm/tools/clang/lib/AST/TemplateName.cpp b/contrib/llvm/tools/clang/lib/AST/TemplateName.cpp index 77c8fd5..47e0255 100644 --- a/contrib/llvm/tools/clang/lib/AST/TemplateName.cpp +++ b/contrib/llvm/tools/clang/lib/AST/TemplateName.cpp @@ -24,7 +24,7 @@ using namespace llvm; TemplateArgument SubstTemplateTemplateParmPackStorage::getArgumentPack() const { - return TemplateArgument(Arguments, size()); + return TemplateArgument(llvm::makeArrayRef(Arguments, size())); } void SubstTemplateTemplateParmStorage::Profile(llvm::FoldingSetNodeID &ID) { @@ -40,7 +40,7 @@ void SubstTemplateTemplateParmStorage::Profile(llvm::FoldingSetNodeID &ID, void SubstTemplateTemplateParmPackStorage::Profile(llvm::FoldingSetNodeID &ID, ASTContext &Context) { - Profile(ID, Context, Parameter, TemplateArgument(Arguments, size())); + Profile(ID, Context, Parameter, getArgumentPack()); } void SubstTemplateTemplateParmPackStorage::Profile(llvm::FoldingSetNodeID &ID, @@ -51,6 +51,22 @@ void SubstTemplateTemplateParmPackStorage::Profile(llvm::FoldingSetNodeID &ID, ArgPack.Profile(ID, Context); } +TemplateName::TemplateName(void *Ptr) { + Storage = StorageType::getFromOpaqueValue(Ptr); +} + +TemplateName::TemplateName(TemplateDecl *Template) : Storage(Template) {} +TemplateName::TemplateName(OverloadedTemplateStorage *Storage) + : Storage(Storage) {} +TemplateName::TemplateName(SubstTemplateTemplateParmStorage *Storage) + : Storage(Storage) {} +TemplateName::TemplateName(SubstTemplateTemplateParmPackStorage *Storage) + : Storage(Storage) {} +TemplateName::TemplateName(QualifiedTemplateName *Qual) : Storage(Qual) {} +TemplateName::TemplateName(DependentTemplateName *Dep) : Storage(Dep) {} + +bool TemplateName::isNull() const { return Storage.isNull(); } + TemplateName::NameKind TemplateName::getKind() const { if (Storage.is<TemplateDecl *>()) return Template; @@ -81,6 +97,40 @@ TemplateDecl *TemplateName::getAsTemplateDecl() const { return nullptr; } +OverloadedTemplateStorage *TemplateName::getAsOverloadedTemplate() const { + if (UncommonTemplateNameStorage *Uncommon = + Storage.dyn_cast<UncommonTemplateNameStorage *>()) + return Uncommon->getAsOverloadedStorage(); + + return nullptr; +} + +SubstTemplateTemplateParmStorage * +TemplateName::getAsSubstTemplateTemplateParm() const { + if (UncommonTemplateNameStorage *uncommon = + Storage.dyn_cast<UncommonTemplateNameStorage *>()) + return uncommon->getAsSubstTemplateTemplateParm(); + + return nullptr; +} + +SubstTemplateTemplateParmPackStorage * +TemplateName::getAsSubstTemplateTemplateParmPack() const { + if (UncommonTemplateNameStorage *Uncommon = + Storage.dyn_cast<UncommonTemplateNameStorage *>()) + return Uncommon->getAsSubstTemplateTemplateParmPack(); + + return nullptr; +} + +QualifiedTemplateName *TemplateName::getAsQualifiedTemplateName() const { + return Storage.dyn_cast<QualifiedTemplateName *>(); +} + +DependentTemplateName *TemplateName::getAsDependentTemplateName() const { + return Storage.dyn_cast<DependentTemplateName *>(); +} + bool TemplateName::isDependent() const { if (TemplateDecl *Template = getAsTemplateDecl()) { if (isa<TemplateTemplateParmDecl>(Template)) |