clang  10.0.0svn
StmtGraphTraits.h
Go to the documentation of this file.
1 //===- StmtGraphTraits.h - Graph Traits for the class Stmt ------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file defines a template specialization of llvm::GraphTraits to
10 // treat ASTs (Stmt*) as graphs
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_CLANG_AST_STMTGRAPHTRAITS_H
15 #define LLVM_CLANG_AST_STMTGRAPHTRAITS_H
16 
17 #include "clang/AST/Stmt.h"
18 #include "llvm/ADT/DepthFirstIterator.h"
19 #include "llvm/ADT/GraphTraits.h"
20 
21 namespace llvm {
22 
23 template <> struct GraphTraits<clang::Stmt *> {
24  using NodeRef = clang::Stmt *;
26  using nodes_iterator = llvm::df_iterator<clang::Stmt *>;
27 
28  static NodeRef getEntryNode(clang::Stmt *S) { return S; }
29 
31  if (N) return N->child_begin();
32  else return ChildIteratorType();
33  }
34 
36  if (N) return N->child_end();
37  else return ChildIteratorType();
38  }
39 
41  return df_begin(S);
42  }
43 
45  return df_end(S);
46  }
47 };
48 
49 template <> struct GraphTraits<const clang::Stmt *> {
50  using NodeRef = const clang::Stmt *;
52  using nodes_iterator = llvm::df_iterator<const clang::Stmt *>;
53 
54  static NodeRef getEntryNode(const clang::Stmt *S) { return S; }
55 
57  if (N) return N->child_begin();
58  else return ChildIteratorType();
59  }
60 
62  if (N) return N->child_end();
63  else return ChildIteratorType();
64  }
65 
67  return df_begin(S);
68  }
69 
71  return df_end(S);
72  }
73 };
74 
75 } // namespace llvm
76 
77 #endif // LLVM_CLANG_AST_STMTGRAPHTRAITS_H
child_iterator child_begin()
Definition: Stmt.h:1178
static ChildIteratorType child_end(NodeRef N)
Specialize PointerLikeTypeTraits to allow LazyGenerationalUpdatePtr to be placed into a PointerUnion...
Definition: Dominators.h:30
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:1166
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:1165
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:1179