[cfe-commits] [PATCH] Add support for pretty-printing attributes

Douglas Gregor dgregor at apple.com
Mon Nov 7 20:00:59 PST 2011


On Nov 4, 2011, at 7:44 AM, Richard Membarth wrote:

> Attached is a patch that adds support for pretty-printing attributes
> stored in the AST. Tblgen is used to generate the necessary code for
> pretty printing attributes as suggest by Peter in [1].
> 
> Please let me know if this is ok.


This generally looks good. My only non-trivial comment is that this printing assumes that all of the attributes can be pretty-printed by just printing the arguments as a comma-separated list, but I doubt that's actually the case. If nothing else, the printing of VersionArguments looks incorrect for the "availability" attribute. It would be better to have some way to escape out to hand-written printing code, and then implement that code for the cases where the default comma-separated list printing doesn't work.

One minor thing:

@@ -362,6 +382,18 @@ namespace {
          << getLowerName() << "_end(); i != e; ++i)\n";
       OS << "      " << WritePCHRecord(type, "(*i)");
     }
+    void writeValue(raw_ostream &OS) const {
+      OS << "\";\n";
+      OS << "  bool isFirst = true;\n"
+         << "  for (" << getAttrName() << "Attr::" << getLowerName()
+         << "_iterator i = " << getLowerName() << "_begin(), e = "
+         << getLowerName() << "_end(); i != e; ++i) {\n"
+         << "    if (!isFirst) isFirst = false;\n"
+         << "    else OS << \", \";\n"

Shouldn't this be if(isFirst)?

+         << "    OS << *i;\n"
+         << "  }\n";
+      OS << "  OS << \"";
+    }
   };



	- Doug



More information about the cfe-commits mailing list