Skip to content

Commit cd62511

Browse files
committed
Remove clang::ast_type_traits namespace in favor of clang
DynTypedNode and ASTNodeKind are implemented as part of the clang AST library, which uses the main clang namespace. There doesn't seem to be a need for this extra level of namespacing. I left behind aliases in the ast_type_traits namespace for out of tree clients of these APIs. To provide aliases for the enumerators, I used this pattern: namespace ast_type_traits { constexpr TraversalKind TK_AsIs = ::clang::TK_AsIs; } I think the typedefs will be useful for migration, but we might be able to drop these enumerator aliases. Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D74499
1 parent 2fb6268 commit cd62511

29 files changed

+466
-588
lines changed

Diff for: clang/docs/LibASTMatchersReference.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -7381,11 +7381,11 @@ <h2 id="traversal-matchers">AST Traversal Matchers</h2>
73817381
</pre></td></tr>
73827382

73837383

7384-
<tr><td>Matcher&lt;T&gt;</td><td class="name" onclick="toggle('traverse1')"><a name="traverse1Anchor">traverse</a></td><td>ast_type_traits::TraversalKind TK, const BindableMatcher&lt;T&gt; InnerMatcher</td></tr>
7384+
<tr><td>Matcher&lt;T&gt;</td><td class="name" onclick="toggle('traverse1')"><a name="traverse1Anchor">traverse</a></td><td>TraversalKind TK, const BindableMatcher&lt;T&gt; InnerMatcher</td></tr>
73857385
<tr><td colspan="4" class="doc" id="traverse1"><pre></pre></td></tr>
73867386

73877387

7388-
<tr><td>Matcher&lt;T&gt;</td><td class="name" onclick="toggle('traverse0')"><a name="traverse0Anchor">traverse</a></td><td>ast_type_traits::TraversalKind TK, const Matcher&lt;T&gt; InnerMatcher</td></tr>
7388+
<tr><td>Matcher&lt;T&gt;</td><td class="name" onclick="toggle('traverse0')"><a name="traverse0Anchor">traverse</a></td><td>TraversalKind TK, const Matcher&lt;T&gt; InnerMatcher</td></tr>
73897389
<tr><td colspan="4" class="doc" id="traverse0"><pre>Causes all nested matchers to be matched with the specified traversal kind.
73907390

73917391
Given
@@ -7394,7 +7394,7 @@ <h2 id="traversal-matchers">AST Traversal Matchers</h2>
73947394
int i = 3.0;
73957395
}
73967396
The matcher
7397-
traverse(ast_type_traits::TK_IgnoreImplicitCastsAndParentheses,
7397+
traverse(TK_IgnoreImplicitCastsAndParentheses,
73987398
varDecl(hasInitializer(floatLiteral().bind("init")))
73997399
)
74007400
matches the variable declaration with "init" bound to the "3.0".

Diff for: clang/include/clang/AST/ASTContext.h

+1-3
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ class CXXMethodDecl;
9494
class CXXRecordDecl;
9595
class DiagnosticsEngine;
9696
class ParentMapContext;
97+
class DynTypedNode;
9798
class DynTypedNodeList;
9899
class Expr;
99100
class FixedPointSemantics;
@@ -130,9 +131,6 @@ class VarTemplateDecl;
130131
class VTableContextBase;
131132
struct BlockVarCopyInit;
132133

133-
namespace ast_type_traits {
134-
class DynTypedNode;
135-
}
136134

137135
namespace Builtin {
138136

Diff for: clang/include/clang/AST/ASTNodeTraverser.h

+8-10
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ class ASTNodeTraverser
6666
/// not already been loaded.
6767
bool Deserialize = false;
6868

69-
ast_type_traits::TraversalKind Traversal =
70-
ast_type_traits::TraversalKind::TK_AsIs;
69+
TraversalKind Traversal = TraversalKind::TK_AsIs;
7170

7271
NodeDelegateType &getNodeDelegate() {
7372
return getDerived().doGetNodeDelegate();
@@ -78,7 +77,7 @@ class ASTNodeTraverser
7877
void setDeserialize(bool D) { Deserialize = D; }
7978
bool getDeserialize() const { return Deserialize; }
8079

81-
void SetTraversalKind(ast_type_traits::TraversalKind TK) { Traversal = TK; }
80+
void SetTraversalKind(TraversalKind TK) { Traversal = TK; }
8281

8382
void Visit(const Decl *D) {
8483
getNodeDelegate().AddChild([=] {
@@ -109,12 +108,12 @@ class ASTNodeTraverser
109108

110109
if (auto *E = dyn_cast_or_null<Expr>(S)) {
111110
switch (Traversal) {
112-
case ast_type_traits::TK_AsIs:
111+
case TK_AsIs:
113112
break;
114-
case ast_type_traits::TK_IgnoreImplicitCastsAndParentheses:
113+
case TK_IgnoreImplicitCastsAndParentheses:
115114
S = E->IgnoreParenImpCasts();
116115
break;
117-
case ast_type_traits::TK_IgnoreUnlessSpelledInSource:
116+
case TK_IgnoreUnlessSpelledInSource:
118117
S = E->IgnoreUnlessSpelledInSource();
119118
break;
120119
}
@@ -132,8 +131,7 @@ class ASTNodeTraverser
132131
if (isa<DeclStmt>(S) || isa<GenericSelectionExpr>(S))
133132
return;
134133

135-
if (isa<LambdaExpr>(S) &&
136-
Traversal == ast_type_traits::TK_IgnoreUnlessSpelledInSource)
134+
if (isa<LambdaExpr>(S) && Traversal == TK_IgnoreUnlessSpelledInSource)
137135
return;
138136

139137
for (const Stmt *SubStmt : S->children())
@@ -229,7 +227,7 @@ class ASTNodeTraverser
229227
});
230228
}
231229

232-
void Visit(const ast_type_traits::DynTypedNode &N) {
230+
void Visit(const DynTypedNode &N) {
233231
// FIXME: Improve this with a switch or a visitor pattern.
234232
if (const auto *D = N.get<Decl>())
235233
Visit(D);
@@ -659,7 +657,7 @@ class ASTNodeTraverser
659657
}
660658

661659
void VisitLambdaExpr(const LambdaExpr *Node) {
662-
if (Traversal == ast_type_traits::TK_IgnoreUnlessSpelledInSource) {
660+
if (Traversal == TK_IgnoreUnlessSpelledInSource) {
663661
for (unsigned I = 0, N = Node->capture_size(); I != N; ++I) {
664662
const auto *C = Node->capture_begin() + I;
665663
if (!C->isExplicit())

Diff for: clang/include/clang/AST/ASTTypeTraits.h

+16-7
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ namespace clang {
3333

3434
struct PrintingPolicy;
3535

36-
namespace ast_type_traits {
37-
3836
/// Defines how we descend a level in the AST when we pass
3937
/// through expressions.
4038
enum TraversalKind {
@@ -522,18 +520,29 @@ template <typename T, typename EnablerT> struct DynTypedNode::BaseConverter {
522520
}
523521
};
524522

525-
} // end namespace ast_type_traits
523+
// Previously these types were defined in the clang::ast_type_traits namespace.
524+
// Provide typedefs so that legacy code can be fixed asynchronously.
525+
namespace ast_type_traits {
526+
using DynTypedNode = ::clang::DynTypedNode;
527+
using ASTNodeKind = ::clang::ASTNodeKind;
528+
using TraversalKind = ::clang::TraversalKind;
529+
530+
constexpr TraversalKind TK_AsIs = ::clang::TK_AsIs;
531+
constexpr TraversalKind TK_IgnoreImplicitCastsAndParentheses =
532+
::clang::TK_IgnoreImplicitCastsAndParentheses;
533+
constexpr TraversalKind TK_IgnoreUnlessSpelledInSource =
534+
::clang::TK_IgnoreUnlessSpelledInSource;
535+
} // namespace ast_type_traits
536+
526537
} // end namespace clang
527538

528539
namespace llvm {
529540

530541
template <>
531-
struct DenseMapInfo<clang::ast_type_traits::ASTNodeKind>
532-
: clang::ast_type_traits::ASTNodeKind::DenseMapInfo {};
542+
struct DenseMapInfo<clang::ASTNodeKind> : clang::ASTNodeKind::DenseMapInfo {};
533543

534544
template <>
535-
struct DenseMapInfo<clang::ast_type_traits::DynTypedNode>
536-
: clang::ast_type_traits::DynTypedNode::DenseMapInfo {};
545+
struct DenseMapInfo<clang::DynTypedNode> : clang::DynTypedNode::DenseMapInfo {};
537546

538547
} // end namespace llvm
539548

Diff for: clang/include/clang/AST/ParentMapContext.h

+13-17
Original file line numberDiff line numberDiff line change
@@ -52,33 +52,31 @@ class ParentMapContext {
5252
/// NestedNameSpecifier or NestedNameSpecifierLoc.
5353
template <typename NodeT> DynTypedNodeList getParents(const NodeT &Node);
5454

55-
DynTypedNodeList getParents(const ast_type_traits::DynTypedNode &Node);
55+
DynTypedNodeList getParents(const DynTypedNode &Node);
5656

5757
/// Clear parent maps.
5858
void clear();
5959

60-
ast_type_traits::TraversalKind getTraversalKind() const { return Traversal; }
61-
void setTraversalKind(ast_type_traits::TraversalKind TK) { Traversal = TK; }
60+
TraversalKind getTraversalKind() const { return Traversal; }
61+
void setTraversalKind(TraversalKind TK) { Traversal = TK; }
6262

6363
const Expr *traverseIgnored(const Expr *E) const;
6464
Expr *traverseIgnored(Expr *E) const;
65-
ast_type_traits::DynTypedNode
66-
traverseIgnored(const ast_type_traits::DynTypedNode &N) const;
65+
DynTypedNode traverseIgnored(const DynTypedNode &N) const;
6766

6867
private:
6968
ASTContext &ASTCtx;
7069
class ParentMap;
71-
ast_type_traits::TraversalKind Traversal = ast_type_traits::TK_AsIs;
70+
TraversalKind Traversal = TK_AsIs;
7271
std::unique_ptr<ParentMap> Parents;
7372
};
7473

7574
class TraversalKindScope {
7675
ParentMapContext &Ctx;
77-
ast_type_traits::TraversalKind TK = ast_type_traits::TK_AsIs;
76+
TraversalKind TK = TK_AsIs;
7877

7978
public:
80-
TraversalKindScope(ASTContext &ASTCtx,
81-
llvm::Optional<ast_type_traits::TraversalKind> ScopeTK)
79+
TraversalKindScope(ASTContext &ASTCtx, llvm::Optional<TraversalKind> ScopeTK)
8280
: Ctx(ASTCtx.getParentMapContext()) {
8381
TK = Ctx.getTraversalKind();
8482
if (ScopeTK)
@@ -91,10 +89,9 @@ class TraversalKindScope {
9189
/// Container for either a single DynTypedNode or for an ArrayRef to
9290
/// DynTypedNode. For use with ParentMap.
9391
class DynTypedNodeList {
94-
using DynTypedNode = ast_type_traits::DynTypedNode;
92+
using DynTypedNode = DynTypedNode;
9593

96-
llvm::AlignedCharArrayUnion<ast_type_traits::DynTypedNode,
97-
ArrayRef<DynTypedNode>> Storage;
94+
llvm::AlignedCharArrayUnion<DynTypedNode, ArrayRef<DynTypedNode>> Storage;
9895
bool IsSingleNode;
9996

10097
public:
@@ -106,14 +103,14 @@ class DynTypedNodeList {
106103
new (Storage.buffer) ArrayRef<DynTypedNode>(A);
107104
}
108105

109-
const ast_type_traits::DynTypedNode *begin() const {
106+
const DynTypedNode *begin() const {
110107
if (!IsSingleNode)
111108
return reinterpret_cast<const ArrayRef<DynTypedNode> *>(Storage.buffer)
112109
->begin();
113110
return reinterpret_cast<const DynTypedNode *>(Storage.buffer);
114111
}
115112

116-
const ast_type_traits::DynTypedNode *end() const {
113+
const DynTypedNode *end() const {
117114
if (!IsSingleNode)
118115
return reinterpret_cast<const ArrayRef<DynTypedNode> *>(Storage.buffer)
119116
->end();
@@ -131,7 +128,7 @@ class DynTypedNodeList {
131128

132129
template <typename NodeT>
133130
inline DynTypedNodeList ParentMapContext::getParents(const NodeT &Node) {
134-
return getParents(ast_type_traits::DynTypedNode::create(Node));
131+
return getParents(DynTypedNode::create(Node));
135132
}
136133

137134
template <typename NodeT>
@@ -140,8 +137,7 @@ inline DynTypedNodeList ASTContext::getParents(const NodeT &Node) {
140137
}
141138

142139
template <>
143-
inline DynTypedNodeList
144-
ASTContext::getParents(const ast_type_traits::DynTypedNode &Node) {
140+
inline DynTypedNodeList ASTContext::getParents(const DynTypedNode &Node) {
145141
return getParentMapContext().getParents(Node);
146142
}
147143

Diff for: clang/include/clang/ASTMatchers/ASTMatchFinder.h

+10-14
Original file line numberDiff line numberDiff line change
@@ -182,10 +182,9 @@ class MatchFinder {
182182
///
183183
/// @{
184184
template <typename T> void match(const T &Node, ASTContext &Context) {
185-
match(clang::ast_type_traits::DynTypedNode::create(Node), Context);
185+
match(clang::DynTypedNode::create(Node), Context);
186186
}
187-
void match(const clang::ast_type_traits::DynTypedNode &Node,
188-
ASTContext &Context);
187+
void match(const clang::DynTypedNode &Node, ASTContext &Context);
189188
/// @}
190189

191190
/// Finds all matches in the given AST.
@@ -242,9 +241,8 @@ SmallVector<BoundNodes, 1>
242241
match(MatcherT Matcher, const NodeT &Node, ASTContext &Context);
243242

244243
template <typename MatcherT>
245-
SmallVector<BoundNodes, 1>
246-
match(MatcherT Matcher, const ast_type_traits::DynTypedNode &Node,
247-
ASTContext &Context);
244+
SmallVector<BoundNodes, 1> match(MatcherT Matcher, const DynTypedNode &Node,
245+
ASTContext &Context);
248246
/// @}
249247

250248
/// Returns the results of matching \p Matcher on the translation unit of
@@ -283,9 +281,8 @@ class CollectMatchesCallback : public MatchFinder::MatchCallback {
283281
}
284282

285283
template <typename MatcherT>
286-
SmallVector<BoundNodes, 1>
287-
match(MatcherT Matcher, const ast_type_traits::DynTypedNode &Node,
288-
ASTContext &Context) {
284+
SmallVector<BoundNodes, 1> match(MatcherT Matcher, const DynTypedNode &Node,
285+
ASTContext &Context) {
289286
internal::CollectMatchesCallback Callback;
290287
MatchFinder Finder;
291288
Finder.addMatcher(Matcher, &Callback);
@@ -296,7 +293,7 @@ match(MatcherT Matcher, const ast_type_traits::DynTypedNode &Node,
296293
template <typename MatcherT, typename NodeT>
297294
SmallVector<BoundNodes, 1>
298295
match(MatcherT Matcher, const NodeT &Node, ASTContext &Context) {
299-
return match(Matcher, ast_type_traits::DynTypedNode::create(Node), Context);
296+
return match(Matcher, DynTypedNode::create(Node), Context);
300297
}
301298

302299
template <typename MatcherT>
@@ -310,8 +307,8 @@ match(MatcherT Matcher, ASTContext &Context) {
310307
}
311308

312309
inline SmallVector<BoundNodes, 1>
313-
matchDynamic(internal::DynTypedMatcher Matcher,
314-
const ast_type_traits::DynTypedNode &Node, ASTContext &Context) {
310+
matchDynamic(internal::DynTypedMatcher Matcher, const DynTypedNode &Node,
311+
ASTContext &Context) {
315312
internal::CollectMatchesCallback Callback;
316313
MatchFinder Finder;
317314
Finder.addDynamicMatcher(Matcher, &Callback);
@@ -323,8 +320,7 @@ template <typename NodeT>
323320
SmallVector<BoundNodes, 1> matchDynamic(internal::DynTypedMatcher Matcher,
324321
const NodeT &Node,
325322
ASTContext &Context) {
326-
return matchDynamic(Matcher, ast_type_traits::DynTypedNode::create(Node),
327-
Context);
323+
return matchDynamic(Matcher, DynTypedNode::create(Node), Context);
328324
}
329325

330326
inline SmallVector<BoundNodes, 1>

0 commit comments

Comments
 (0)