Make ListScope and DictScope re-use the same code.

llvm-svn: 268472
This commit is contained in:
Zachary Turner 2016-05-04 01:46:59 +00:00
parent 537c5b5b62
commit e9bc5ce124
1 changed files with 11 additions and 18 deletions

View File

@ -302,33 +302,26 @@ ScopedPrinter::printHex<support::ulittle16_t>(StringRef Label,
startLine() << Label << ": " << hex(Value) << "\n";
}
struct DictScope {
DictScope(ScopedPrinter &W, StringRef N) : W(W) {
W.startLine() << N << " {\n";
template<char Open, char Close>
struct DelimitedScope {
DelimitedScope(ScopedPrinter &W, StringRef N) : W(W) {
W.startLine() << N;
if (!N.empty())
W.getOStream() << ' ';
W.getOStream() << Open << '\n';
W.indent();
}
~DictScope() {
~DelimitedScope() {
W.unindent();
W.startLine() << "}\n";
W.startLine() << Close << '\n';
}
ScopedPrinter &W;
};
struct ListScope {
ListScope(ScopedPrinter &W, StringRef N) : W(W) {
W.startLine() << N << " [\n";
W.indent();
}
~ListScope() {
W.unindent();
W.startLine() << "]\n";
}
ScopedPrinter &W;
};
using DictScope = DelimitedScope<'{', '}'>;
using ListScope = DelimitedScope<'[', ']'>;
} // namespace llvm