summaryrefslogtreecommitdiffstats
path: root/clang/utils/TableGen/ASTTableGen.cpp
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2019-12-10 16:23:43 -0500
committerJohn McCall <rjmccall@apple.com>2019-12-14 00:16:47 -0500
commitf6da0cf34a5a48bf8154067206980fff9b7a1975 (patch)
treeebb0ec6dc1c20db01594dc5878e18e29d8572c15 /clang/utils/TableGen/ASTTableGen.cpp
parent30066e522c94a193dbcae9bc4d4005f8a137bd4b (diff)
downloadbcm5719-llvm-f6da0cf34a5a48bf8154067206980fff9b7a1975.tar.gz
bcm5719-llvm-f6da0cf34a5a48bf8154067206980fff9b7a1975.zip
Enable better node-hierarchy metaprogramming; NFC.
Diffstat (limited to 'clang/utils/TableGen/ASTTableGen.cpp')
-rw-r--r--clang/utils/TableGen/ASTTableGen.cpp40
1 files changed, 11 insertions, 29 deletions
diff --git a/clang/utils/TableGen/ASTTableGen.cpp b/clang/utils/TableGen/ASTTableGen.cpp
index c28d5ba9d35..11e0e42b067 100644
--- a/clang/utils/TableGen/ASTTableGen.cpp
+++ b/clang/utils/TableGen/ASTTableGen.cpp
@@ -61,13 +61,11 @@ std::string clang::tblgen::StmtNode::getId() const {
}
// A map from a node to each of its child nodes.
-template <class NodeClass>
-using ChildMap = std::multimap<NodeClass, NodeClass>;
+using ChildMap = std::multimap<ASTNode, ASTNode>;
-template <class NodeClass>
-static void visitASTNodeRecursive(NodeClass node, NodeClass base,
- const ChildMap<NodeClass> &map,
- ASTNodeHierarchyVisitor<NodeClass> visit) {
+static void visitASTNodeRecursive(ASTNode node, ASTNode base,
+ const ChildMap &map,
+ ASTNodeHierarchyVisitor<ASTNode> visit) {
visit(node, base);
auto i = map.lower_bound(node), e = map.upper_bound(node);
@@ -76,10 +74,9 @@ static void visitASTNodeRecursive(NodeClass node, NodeClass base,
}
}
-template <class NodeClass>
static void visitHierarchy(RecordKeeper &records,
StringRef nodeClassName,
- ASTNodeHierarchyVisitor<NodeClass> visit) {
+ ASTNodeHierarchyVisitor<ASTNode> visit) {
// Check for the node class, just as a sanity check.
if (!records.getClass(nodeClassName)) {
PrintFatalError(Twine("cannot find definition for node class ")
@@ -90,9 +87,9 @@ static void visitHierarchy(RecordKeeper &records,
auto nodes = records.getAllDerivedDefinitions(nodeClassName);
// Derive the child map.
- ChildMap<NodeClass> hierarchy;
- NodeClass root;
- for (NodeClass node : nodes) {
+ ChildMap hierarchy;
+ ASTNode root;
+ for (ASTNode node : nodes) {
if (auto base = node.getBase())
hierarchy.insert(std::make_pair(base, node));
else if (root)
@@ -105,26 +102,11 @@ static void visitHierarchy(RecordKeeper &records,
PrintFatalError(Twine("no root node in ") + nodeClassName + " hierarchy");
// Now visit the map recursively, starting at the root node.
- visitASTNodeRecursive(root, NodeClass(), hierarchy, visit);
+ visitASTNodeRecursive(root, ASTNode(), hierarchy, visit);
}
-void clang::tblgen::visitASTNodeHierarchy(RecordKeeper &records,
- StringRef nodeClassName,
+void clang::tblgen::visitASTNodeHierarchyImpl(RecordKeeper &records,
+ StringRef nodeClassName,
ASTNodeHierarchyVisitor<ASTNode> visit) {
visitHierarchy(records, nodeClassName, visit);
}
-
-void clang::tblgen::visitDeclNodeHierarchy(RecordKeeper &records,
- ASTNodeHierarchyVisitor<DeclNode> visit) {
- visitHierarchy(records, DeclNodeClassName, visit);
-}
-
-void clang::tblgen::visitTypeNodeHierarchy(RecordKeeper &records,
- ASTNodeHierarchyVisitor<TypeNode> visit) {
- visitHierarchy(records, TypeNodeClassName, visit);
-}
-
-void clang::tblgen::visitStmtNodeHierarchy(RecordKeeper &records,
- ASTNodeHierarchyVisitor<StmtNode> visit) {
- visitHierarchy(records, StmtNodeClassName, visit);
-}
OpenPOWER on IntegriCloud