[llvm] [NFC][TableGen] Use C++17 nested namespace definitions (PR #161958)
Rahul Joshi via llvm-commits
llvm-commits at lists.llvm.org
Sat Oct 4 07:32:45 PDT 2025
https://github.com/jurahul created https://github.com/llvm/llvm-project/pull/161958
Change NamespaceEmitter to emit nested namespace using C++17 nested namespace definitions.
>From f60366418f53024b4f94644ec05455187f5c8afa Mon Sep 17 00:00:00 2001
From: Rahul Joshi <rjoshi at nvidia.com>
Date: Sat, 4 Oct 2025 07:30:01 -0700
Subject: [PATCH] [NFC][TableGen] Use C++17 nested namespace definitions
Change NamespaceEmitter to emit nested namespace using C++17
nested namespace definitions.
---
llvm/include/llvm/TableGen/CodeGenHelpers.h | 23 +++++++++++----------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/llvm/include/llvm/TableGen/CodeGenHelpers.h b/llvm/include/llvm/TableGen/CodeGenHelpers.h
index 7dca6a051ba75..f9629236b9dfd 100644
--- a/llvm/include/llvm/TableGen/CodeGenHelpers.h
+++ b/llvm/include/llvm/TableGen/CodeGenHelpers.h
@@ -38,28 +38,29 @@ class IfDefEmitter {
// namespace (empty for anonymous namespace) or nested namespace.
class NamespaceEmitter {
public:
- NamespaceEmitter(raw_ostream &OS, StringRef Name) : OS(OS) {
- emitNamespaceStarts(Name);
+ NamespaceEmitter(raw_ostream &OS, StringRef Name)
+ : Name(trim(Name).str()), OS(OS) {
+ OS << "namespace " << this->Name << " {\n";
}
~NamespaceEmitter() { close(); }
// Explicit function to close the namespace scopes.
void close() {
- for (StringRef NS : llvm::reverse(Namespaces))
- OS << "} // namespace " << NS << "\n";
- Namespaces.clear();
+ if (!Closed)
+ OS << "} // namespace " << Name << "\n";
+ Closed = true;
}
private:
- void emitNamespaceStarts(StringRef Name) {
- llvm::SplitString(Name, Namespaces, "::");
- for (StringRef NS : Namespaces)
- OS << "namespace " << NS << " {\n";
+ // Trim "::" prefix.
+ static StringRef trim(StringRef Name) {
+ Name.consume_front("::");
+ return Name;
}
-
- SmallVector<StringRef, 2> Namespaces;
+ std::string Name;
raw_ostream &OS;
+ bool Closed = false;
};
} // end namespace llvm
More information about the llvm-commits
mailing list