clang  6.0.0svn
StmtGraphTraits.h
Go to the documentation of this file.
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_STMTGRAPHTRAITS_H
16 #define LLVM_CLANG_AST_STMTGRAPHTRAITS_H
17 
18 #include "clang/AST/Stmt.h"
19 #include "llvm/ADT/DepthFirstIterator.h"
20 #include "llvm/ADT/GraphTraits.h"
21 
22 namespace llvm {
23 
24 template <> struct GraphTraits<clang::Stmt *> {
25  using NodeRef = clang::Stmt *;
27  using nodes_iterator = llvm::df_iterator<clang::Stmt *>;
28 
29  static NodeRef getEntryNode(clang::Stmt *S) { return S; }
30 
32  if (N) return N->child_begin();
33  else return ChildIteratorType();
34  }
35 
37  if (N) return N->child_end();
38  else return ChildIteratorType();
39  }
40 
42  return df_begin(S);
43  }
44 
46  return df_end(S);
47  }
48 };
49 
50 template <> struct GraphTraits<const clang::Stmt *> {
51  using NodeRef = const clang::Stmt *;
53  using nodes_iterator = llvm::df_iterator<const clang::Stmt *>;
54 
55  static NodeRef getEntryNode(const clang::Stmt *S) { return S; }
56 
58  if (N) return N->child_begin();
59  else return ChildIteratorType();
60  }
61 
63  if (N) return N->child_end();
64  else return ChildIteratorType();
65  }
66 
68  return df_begin(S);
69  }
70 
72  return df_end(S);
73  }
74 };
75 
76 } // namespace llvm
77 
78 #endif // LLVM_CLANG_AST_STMTGRAPHTRAITS_H
child_iterator child_begin()
Definition: Stmt.h:452
static ChildIteratorType child_end(NodeRef N)
DominatorTree GraphTraits specialization so the DominatorTree can be iterable by generic graph iterat...
Definition: Dominators.h:26
Stmt - This represents one statement.
Definition: Stmt.h:66
static ChildIteratorType child_end(NodeRef N)
static NodeRef getEntryNode(const clang::Stmt *S)
static ChildIteratorType child_begin(NodeRef N)
static nodes_iterator nodes_end(clang::Stmt *S)
llvm::df_iterator< const clang::Stmt * > nodes_iterator
static ChildIteratorType child_begin(NodeRef N)
ConstStmtIterator const_child_iterator
Definition: Stmt.h:441
static nodes_iterator nodes_begin(const clang::Stmt *S)
llvm::df_iterator< clang::Stmt * > nodes_iterator
static nodes_iterator nodes_end(const clang::Stmt *S)
StmtIterator child_iterator
Child Iterators: All subclasses must implement &#39;children&#39; to permit easy iteration over the substatem...
Definition: Stmt.h:440
Dataflow Directional Tag Classes.
static nodes_iterator nodes_begin(clang::Stmt *S)
static NodeRef getEntryNode(clang::Stmt *S)
child_iterator child_end()
Definition: Stmt.h:453