Skip to content

Commit f603664

Browse files
committed
[NFC][TableGen] Use C++17 nested namespace definitions
Change NamespaceEmitter to emit nested namespace using C++17 nested namespace definitions.
1 parent e9330fd commit f603664

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

llvm/include/llvm/TableGen/CodeGenHelpers.h

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,28 +38,29 @@ class IfDefEmitter {
3838
// namespace (empty for anonymous namespace) or nested namespace.
3939
class NamespaceEmitter {
4040
public:
41-
NamespaceEmitter(raw_ostream &OS, StringRef Name) : OS(OS) {
42-
emitNamespaceStarts(Name);
41+
NamespaceEmitter(raw_ostream &OS, StringRef Name)
42+
: Name(trim(Name).str()), OS(OS) {
43+
OS << "namespace " << this->Name << " {\n";
4344
}
4445

4546
~NamespaceEmitter() { close(); }
4647

4748
// Explicit function to close the namespace scopes.
4849
void close() {
49-
for (StringRef NS : llvm::reverse(Namespaces))
50-
OS << "} // namespace " << NS << "\n";
51-
Namespaces.clear();
50+
if (!Closed)
51+
OS << "} // namespace " << Name << "\n";
52+
Closed = true;
5253
}
5354

5455
private:
55-
void emitNamespaceStarts(StringRef Name) {
56-
llvm::SplitString(Name, Namespaces, "::");
57-
for (StringRef NS : Namespaces)
58-
OS << "namespace " << NS << " {\n";
56+
// Trim "::" prefix.
57+
static StringRef trim(StringRef Name) {
58+
Name.consume_front("::");
59+
return Name;
5960
}
60-
61-
SmallVector<StringRef, 2> Namespaces;
61+
std::string Name;
6262
raw_ostream &OS;
63+
bool Closed = false;
6364
};
6465

6566
} // end namespace llvm

0 commit comments

Comments
 (0)