TemplateName.cpp revision 1734317845d60307d474b5da8a8d33adbaf5e723
1//===--- TemplateName.h - C++ Template Name Representation-------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file defines the TemplateName interface and subclasses. 11// 12//===----------------------------------------------------------------------===// 13#include "clang/AST/TemplateName.h" 14#include "clang/AST/DeclTemplate.h" 15#include "clang/AST/NestedNameSpecifier.h" 16#include "llvm/Support/raw_ostream.h" 17 18using namespace clang; 19 20TemplateDecl *TemplateName::getAsTemplateDecl() const { 21 if (TemplateDecl *Template = Storage.dyn_cast<TemplateDecl *>()) 22 return Template; 23 24 if (QualifiedTemplateName *QTN = getAsQualifiedTemplateName()) 25 return QTN->getTemplateDecl(); 26 27 return 0; 28} 29 30bool TemplateName::isDependent() const { 31 if (TemplateDecl *Template = getAsTemplateDecl()) { 32 // FIXME: We don't yet have a notion of dependent 33 // declarations. When we do, check that. This hack won't last 34 // long!. 35 return isa<TemplateTemplateParmDecl>(Template); 36 } 37 38 return true; 39} 40 41void TemplateName::print(llvm::raw_ostream &OS, bool SuppressNNS) const { 42 if (TemplateDecl *Template = Storage.dyn_cast<TemplateDecl *>()) 43 OS << Template->getIdentifier()->getName(); 44 else if (QualifiedTemplateName *QTN = getAsQualifiedTemplateName()) { 45 if (!SuppressNNS) 46 QTN->getQualifier()->print(OS); 47 if (QTN->hasTemplateKeyword()) 48 OS << "template "; 49 OS << QTN->getTemplateDecl()->getIdentifier()->getName(); 50 } else if (DependentTemplateName *DTN = getAsDependentTemplateName()) { 51 if (!SuppressNNS) 52 DTN->getQualifier()->print(OS); 53 OS << "template "; 54 OS << DTN->getName()->getName(); 55 } 56} 57 58void TemplateName::dump() const { 59 print(llvm::errs()); 60} 61