 |
|
 |
|
| Files: |
1 |
|
Branches Taken: |
0.0% |
0 / 4 |
| Generated: |
2010-02-10 01:31 |
|
Branches Executed: |
0.0% |
0 / 4 |
| |
|
Line Coverage: |
0.0% |
0 / 11 |
| |
 |
|
 |
1 : //===--- StmtGraphTraits.h - Graph Traits for the class Stmt ----*- 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 a template specialization of llvm::GraphTraits to
11 : // treat ASTs (Stmt*) as graphs
12 : //
13 : //===----------------------------------------------------------------------===//
14 :
15 : #ifndef LLVM_CLANG_AST_STMT_GRAPHTRAITS_H
16 : #define LLVM_CLANG_AST_STMT_GRAPHTRAITS_H
17 :
18 : #include "clang/AST/Stmt.h"
19 : #include "llvm/ADT/GraphTraits.h"
20 : #include "llvm/ADT/DepthFirstIterator.h"
21 :
22 : namespace llvm {
23 :
24 : //template <typename T> struct GraphTraits;
25 :
26 :
27 : template <> struct GraphTraits<clang::Stmt*> {
28 : typedef clang::Stmt NodeType;
29 : typedef clang::Stmt::child_iterator ChildIteratorType;
30 : typedef llvm::df_iterator<clang::Stmt*> nodes_iterator;
31 :
32 : static NodeType* getEntryNode(clang::Stmt* S) { return S; }
33 :
34 : static inline ChildIteratorType child_begin(NodeType* N) {
35 : if (N) return N->child_begin();
36 : else return ChildIteratorType();
37 : }
38 :
39 : static inline ChildIteratorType child_end(NodeType* N) {
40 : if (N) return N->child_end();
41 : else return ChildIteratorType();
42 : }
43 :
44 : static nodes_iterator nodes_begin(clang::Stmt* S) {
45 : return df_begin(S);
46 : }
47 :
48 : static nodes_iterator nodes_end(clang::Stmt* S) {
49 : return df_end(S);
50 : }
51 : };
52 :
53 :
54 : template <> struct GraphTraits<const clang::Stmt*> {
55 : typedef const clang::Stmt NodeType;
56 : typedef clang::Stmt::const_child_iterator ChildIteratorType;
57 : typedef llvm::df_iterator<const clang::Stmt*> nodes_iterator;
58 :
59 0: static NodeType* getEntryNode(const clang::Stmt* S) { return S; }
60 :
61 0: static inline ChildIteratorType child_begin(NodeType* N) {
0: branch 0 not taken
0: branch 1 not taken
62 0: if (N) return N->child_begin();
63 0: else return ChildIteratorType();
64 : }
65 :
66 0: static inline ChildIteratorType child_end(NodeType* N) {
0: branch 0 not taken
0: branch 1 not taken
67 0: if (N) return N->child_end();
68 0: else return ChildIteratorType();
69 : }
70 :
71 0: static nodes_iterator nodes_begin(const clang::Stmt* S) {
72 0: return df_begin(S);
73 : }
74 :
75 0: static nodes_iterator nodes_end(const clang::Stmt* S) {
76 0: return df_end(S);
77 : }
78 : };
79 :
80 :
81 : } // end namespace llvm
82 :
83 : #endif
Generated: 2010-02-10 01:31 by zcov