]> granicus.if.org Git - clang/commitdiff
Added GraphTraits template specialization for Stmt* to treat ASTs like graphs.
authorTed Kremenek <kremenek@apple.com>
Wed, 19 Sep 2007 18:18:40 +0000 (18:18 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 19 Sep 2007 18:18:40 +0000 (18:18 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42146 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/Stmt.h

index e7de0b264ff9f2be9cdaef0827f63ba9402d8df8..c86da4929180b951371191b42dbe4bf1eea32863 100644 (file)
@@ -17,6 +17,7 @@
 #include "clang/Basic/SourceLocation.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/iterator"
+#include "llvm/ADT/GraphTraits.h"
 #include <iosfwd>
 
 namespace clang {
@@ -634,4 +635,41 @@ public:
 
 }  // end namespace clang
 
+//===----------------------------------------------------------------------===//
+// GraphTraits specialization to treat ASTs (Stmt*) as graphs
+//===----------------------------------------------------------------------===//
+
+namespace llvm {
+
+template <> struct GraphTraits<clang::Stmt*> {
+  typedef clang::Stmt                  NodeType;
+  typedef clang::Stmt::child_iterator  ChildIteratorType;
+  
+  static NodeType* getEntryNode(clang::Stmt* S) { return S; }
+
+  static inline ChildIteratorType child_begin(NodeType* N) {
+    return N->child_begin();
+  }
+  
+  static inline ChildIteratorType child_end(NodeType* N) {
+    return N->child_end();
+  }
+};
+
+template <> struct GraphTraits<const clang::Stmt*> {
+  typedef const clang::Stmt                  NodeType;
+  typedef clang::Stmt::const_child_iterator  ChildIteratorType;
+  
+  static NodeType* getEntryNode(const clang::Stmt* S) { return S; }
+  
+  static inline ChildIteratorType child_begin(NodeType* N) {
+    return N->child_begin();
+  }
+  
+  static inline ChildIteratorType child_end(NodeType* N) {
+    return N->child_end();
+  }
+};
+
+} // end namespace llvm
 #endif