| //===--- TemplateName.h - C++ Template Name Representation-------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file defines the TemplateName interface and subclasses. |
| // |
| //===----------------------------------------------------------------------===// |
| #include "clang/AST/TemplateName.h" |
| #include "clang/AST/DeclTemplate.h" |
| #include "clang/AST/NestedNameSpecifier.h" |
| #include "llvm/Support/raw_ostream.h" |
| #include <stdio.h> |
| |
| using namespace clang; |
| |
| TemplateDecl *TemplateName::getAsTemplateDecl() const { |
| if (TemplateDecl *Template = Storage.dyn_cast<TemplateDecl *>()) |
| return Template; |
| |
| if (QualifiedTemplateName *QTN = getAsQualifiedTemplateName()) |
| return QTN->getTemplateDecl(); |
| |
| return 0; |
| } |
| |
| bool TemplateName::isDependent() const { |
| if (TemplateDecl *Template = getAsTemplateDecl()) { |
| // FIXME: We don't yet have a notion of dependent |
| // declarations. When we do, check that. This hack won't last |
| // long!. |
| return isa<TemplateTemplateParmDecl>(Template); |
| } |
| |
| return true; |
| } |
| |
| void TemplateName::Print(llvm::raw_ostream &OS) const { |
| if (TemplateDecl *Template = Storage.dyn_cast<TemplateDecl *>()) |
| OS << Template->getIdentifier()->getName(); |
| else if (QualifiedTemplateName *QTN = getAsQualifiedTemplateName()) { |
| QTN->getQualifier()->Print(OS); |
| if (QTN->hasTemplateKeyword()) |
| OS << "template "; |
| OS << QTN->getTemplateDecl()->getIdentifier()->getName(); |
| } else if (DependentTemplateName *DTN = getAsDependentTemplateName()) { |
| DTN->getQualifier()->Print(OS); |
| OS << "template "; |
| OS << DTN->getName()->getName(); |
| } |
| } |
| |
| void TemplateName::Dump() const { |
| std::string Result; |
| { |
| llvm::raw_string_ostream OS(Result); |
| Print(OS); |
| } |
| fprintf(stderr, "%s", Result.c_str()); |
| } |