diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-10-30 21:02:37 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-10-30 21:02:37 +0000 |
commit | f7514454a747ac5a1029504b94410423ef6d0c54 (patch) | |
tree | 046fedcb9160c443f22dae92cf7f9731689821dd /clang/utils | |
parent | d249a3b3b21e2f07bd5b774069cfa51196c4b127 (diff) | |
download | bcm5719-llvm-f7514454a747ac5a1029504b94410423ef6d0c54.tar.gz bcm5719-llvm-f7514454a747ac5a1029504b94410423ef6d0c54.zip |
Refactor tree printing in AST dumping.
Instead of manually maintaining a flag indicating whether we're about to print
out the last child of the parent node (to determine whether we print "`" or
"|"), capture a callable to print that child and defer printing it until we
either see a next child or finish the parent.
No functionality change intended.
llvm-svn: 220930
Diffstat (limited to 'clang/utils')
-rw-r--r-- | clang/utils/TableGen/ClangAttrEmitter.cpp | 30 |
1 files changed, 4 insertions, 26 deletions
diff --git a/clang/utils/TableGen/ClangAttrEmitter.cpp b/clang/utils/TableGen/ClangAttrEmitter.cpp index a180e1f20d7..a8e1b077d5b 100644 --- a/clang/utils/TableGen/ClangAttrEmitter.cpp +++ b/clang/utils/TableGen/ClangAttrEmitter.cpp @@ -495,10 +495,9 @@ namespace { void writeDump(raw_ostream &OS) const override { } void writeDumpChildren(raw_ostream &OS) const override { - OS << " if (SA->is" << getUpperName() << "Expr()) {\n"; - OS << " lastChild();\n"; + OS << " if (SA->is" << getUpperName() << "Expr())\n"; OS << " dumpStmt(SA->get" << getUpperName() << "Expr());\n"; - OS << " } else\n"; + OS << " else\n"; OS << " dumpType(SA->get" << getUpperName() << "Type()->getType());\n"; } @@ -921,7 +920,6 @@ namespace { void writeDump(raw_ostream &OS) const override {} void writeDumpChildren(raw_ostream &OS) const override { - OS << " lastChild();\n"; OS << " dumpStmt(SA->get" << getUpperName() << "());\n"; } void writeHasChildren(raw_ostream &OS) const override { OS << "true"; } @@ -976,11 +974,8 @@ namespace { void writeDumpChildren(raw_ostream &OS) const override { OS << " for (" << getAttrName() << "Attr::" << getLowerName() << "_iterator I = SA->" << getLowerName() << "_begin(), E = SA->" - << getLowerName() << "_end(); I != E; ++I) {\n"; - OS << " if (I + 1 == E)\n"; - OS << " lastChild();\n"; + << getLowerName() << "_end(); I != E; ++I)\n"; OS << " dumpStmt(*I);\n"; - OS << " }\n"; } void writeHasChildren(raw_ostream &OS) const override { @@ -2698,25 +2693,8 @@ void EmitClangAttrDump(RecordKeeper &Records, raw_ostream &OS) { for (const auto *Arg : Args) createArgument(*Arg, R.getName())->writeDump(OS); - // Code for detecting the last child. - OS << " bool OldMoreChildren = hasMoreChildren();\n"; - OS << " bool MoreChildren;\n"; - - for (auto AI = Args.begin(), AE = Args.end(); AI != AE; ++AI) { - // More code for detecting the last child. - OS << " MoreChildren = OldMoreChildren"; - for (auto Next = AI + 1; Next != AE; ++Next) { - OS << " || "; - createArgument(**Next, R.getName())->writeHasChildren(OS); - } - OS << ";\n"; - OS << " setMoreChildren(MoreChildren);\n"; - + for (auto AI = Args.begin(), AE = Args.end(); AI != AE; ++AI) createArgument(**AI, R.getName())->writeDumpChildren(OS); - } - - // Reset the last child. - OS << " setMoreChildren(OldMoreChildren);\n"; } OS << " break;\n" |