clang 20.0.0git
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
21namespace llvm {
22
23template <> struct GraphTraits<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
49template <> 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
Stmt - This represents one statement.
Definition: Stmt.h:84
StmtIterator child_iterator
Child Iterators: All subclasses must implement 'children' to permit easy iteration over the substatem...
Definition: Stmt.h:1449
child_iterator child_begin()
Definition: Stmt.h:1462
child_iterator child_end()
Definition: Stmt.h:1463
ConstStmtIterator const_child_iterator
Definition: Stmt.h:1450
The JSON file list parser is used to communicate input to InstallAPI.
Diagnostic wrappers for TextAPI types for error reporting.
Definition: Dominators.h:30
static ChildIteratorType child_begin(NodeRef N)
llvm::df_iterator< clang::Stmt * > nodes_iterator
static nodes_iterator nodes_begin(clang::Stmt *S)
static NodeRef getEntryNode(clang::Stmt *S)
static ChildIteratorType child_end(NodeRef N)
static nodes_iterator nodes_end(clang::Stmt *S)
static ChildIteratorType child_end(NodeRef N)
llvm::df_iterator< const clang::Stmt * > nodes_iterator
static ChildIteratorType child_begin(NodeRef N)
static nodes_iterator nodes_end(const clang::Stmt *S)
static NodeRef getEntryNode(const clang::Stmt *S)
static nodes_iterator nodes_begin(const clang::Stmt *S)