in facebook-clang-plugins/libtooling/ASTExporter.h [2001:2050]
void ASTExporter<ATDWriter>::dumpTemplateArgument(const TemplateArgument &Arg) {
switch (Arg.getKind()) {
case TemplateArgument::Null:
OF.emitSimpleVariant("Null");
break;
case TemplateArgument::Type: {
VariantScope Scope(OF, "Type");
dumpQualType(Arg.getAsType());
break;
}
case TemplateArgument::Declaration: {
VariantScope Scope(OF, "Declaration");
dumpPointer(Arg.getAsDecl());
break;
}
case TemplateArgument::NullPtr:
OF.emitSimpleVariant("NullPtr");
break;
case TemplateArgument::Integral: {
VariantScope Scope(OF, "Integral");
llvm::SmallString<64> buf;
Arg.getAsIntegral().toString(buf, 10);
OF.emitString(buf.str().str());
break;
}
case TemplateArgument::Template: {
OF.emitSimpleVariant("Template");
break;
}
case TemplateArgument::TemplateExpansion: {
OF.emitSimpleVariant("TemplateExpansion");
break;
}
case TemplateArgument::Expression: {
OF.emitSimpleVariant("Expression");
break;
}
case TemplateArgument::Pack: {
VariantScope Scope(OF, "Pack");
ArrayScope aScope(OF, Arg.pack_size());
for (TemplateArgument::pack_iterator I = Arg.pack_begin(),
E = Arg.pack_end();
I != E;
++I) {
dumpTemplateArgument(*I);
}
break;
}
}
}