From f27e5a09a0d815b8a4814152954ff87dadfdefc0 Mon Sep 17 00:00:00 2001 From: ed Date: Tue, 2 Jun 2009 17:58:47 +0000 Subject: Import Clang, at r72732. --- lib/AST/TemplateName.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 lib/AST/TemplateName.cpp (limited to 'lib/AST/TemplateName.cpp') diff --git a/lib/AST/TemplateName.cpp b/lib/AST/TemplateName.cpp new file mode 100644 index 0000000..3613da7 --- /dev/null +++ b/lib/AST/TemplateName.cpp @@ -0,0 +1,65 @@ +//===--- 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 "clang/AST/PrettyPrinter.h" +#include "llvm/Support/raw_ostream.h" +using namespace clang; + +TemplateDecl *TemplateName::getAsTemplateDecl() const { + if (TemplateDecl *Template = Storage.dyn_cast()) + 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(Template); + } + + return true; +} + +void +TemplateName::print(llvm::raw_ostream &OS, const PrintingPolicy &Policy, + bool SuppressNNS) const { + if (TemplateDecl *Template = Storage.dyn_cast()) + OS << Template->getIdentifier()->getName(); + else if (QualifiedTemplateName *QTN = getAsQualifiedTemplateName()) { + if (!SuppressNNS) + QTN->getQualifier()->print(OS, Policy); + if (QTN->hasTemplateKeyword()) + OS << "template "; + OS << QTN->getTemplateDecl()->getIdentifier()->getName(); + } else if (DependentTemplateName *DTN = getAsDependentTemplateName()) { + if (!SuppressNNS) + DTN->getQualifier()->print(OS, Policy); + OS << "template "; + OS << DTN->getName()->getName(); + } +} + +void TemplateName::dump() const { + PrintingPolicy Policy; + Policy.CPlusPlus = true; + print(llvm::errs(), Policy); +} -- cgit v1.1