 |
|
 |
|
| Files: |
1 |
|
Branches Taken: |
56.7% |
17 / 30 |
| Generated: |
2010-02-10 01:31 |
|
Branches Executed: |
66.7% |
20 / 30 |
| |
|
Line Coverage: |
58.8% |
20 / 34 |
| |
 |
|
 |
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 :
14 : #include "clang/AST/TemplateName.h"
15 : #include "clang/AST/DeclTemplate.h"
16 : #include "clang/AST/NestedNameSpecifier.h"
17 : #include "clang/AST/PrettyPrinter.h"
18 : #include "clang/Basic/LangOptions.h"
19 : #include "llvm/Support/raw_ostream.h"
20 : using namespace clang;
21 :
22 17194: TemplateDecl *TemplateName::getAsTemplateDecl() const {
15992: branch 1 taken
1202: branch 2 taken
23 17194: if (TemplateDecl *Template = Storage.dyn_cast<TemplateDecl *>())
24 15992: return Template;
25 :
1013: branch 1 taken
189: branch 2 taken
26 1202: if (QualifiedTemplateName *QTN = getAsQualifiedTemplateName())
27 1013: return QTN->getTemplateDecl();
28 :
29 189: return 0;
30 : }
31 :
32 8821: bool TemplateName::isDependent() const {
8755: branch 1 taken
66: branch 2 taken
33 8821: if (TemplateDecl *Template = getAsTemplateDecl()) {
34 : return isa<TemplateTemplateParmDecl>(Template) ||
8675: branch 1 taken
80: branch 2 taken
151: branch 5 taken
8524: branch 6 taken
35 8755: Template->getDeclContext()->isDependentContext();
36 : }
37 :
38 : assert(!getAsOverloadedTemplate() &&
66: branch 1 taken
0: branch 2 not taken
39 66: "overloaded templates shouldn't survive to here");
40 :
41 66: return true;
42 : }
43 :
44 : void
45 : TemplateName::print(llvm::raw_ostream &OS, const PrintingPolicy &Policy,
46 79: bool SuppressNNS) const {
71: branch 1 taken
8: branch 2 taken
47 79: if (TemplateDecl *Template = Storage.dyn_cast<TemplateDecl *>())
48 71: OS << Template->getNameAsString();
8: branch 1 taken
0: branch 2 not taken
49 8: else if (QualifiedTemplateName *QTN = getAsQualifiedTemplateName()) {
3: branch 0 taken
5: branch 1 taken
50 8: if (!SuppressNNS)
51 3: QTN->getQualifier()->print(OS, Policy);
0: branch 1 not taken
8: branch 2 taken
52 8: if (QTN->hasTemplateKeyword())
53 0: OS << "template ";
54 8: OS << QTN->getDecl()->getNameAsString();
0: branch 1 not taken
0: branch 2 not taken
55 0: } else if (DependentTemplateName *DTN = getAsDependentTemplateName()) {
0: branch 0 not taken
0: branch 1 not taken
0: branch 3 not taken
0: branch 4 not taken
0: branch 5 not taken
0: branch 6 not taken
56 0: if (!SuppressNNS && DTN->getQualifier())
57 0: DTN->getQualifier()->print(OS, Policy);
58 0: OS << "template ";
59 :
0: branch 1 not taken
0: branch 2 not taken
60 0: if (DTN->isIdentifier())
61 0: OS << DTN->getIdentifier()->getName();
62 : else
63 0: OS << "operator " << getOperatorSpelling(DTN->getOperator());
64 : }
65 79: }
66 :
67 0: void TemplateName::dump() const {
68 0: LangOptions LO; // FIXME!
69 0: LO.CPlusPlus = true;
70 0: LO.Bool = true;
71 0: print(llvm::errs(), PrintingPolicy(LO));
72 0: }
Generated: 2010-02-10 01:31 by zcov