in facebook-clang-plugins/libtooling/ASTExporter.h [5206:5232]
void ASTExporter<ATDWriter>::VisitObjCObjectType(const ObjCObjectType *T) {
VisitType(T);
int numProtocols = T->getNumProtocols();
bool HasProtocols = numProtocols > 0;
bool isSpecialized = T->isSpecialized();
ObjectScope Scope(OF, 1 + HasProtocols + isSpecialized);
OF.emitTag("base_type");
dumpQualTypeNoQuals(T->getBaseType());
if (HasProtocols) {
OF.emitTag("protocol_decls_ptr");
ArrayScope aScope(OF, numProtocols);
for (int i = 0; i < numProtocols; i++) {
dumpPointer(T->getProtocol(i));
}
}
if (isSpecialized) {
OF.emitTag("type_args");
ArrayScope aScope(OF, T->getTypeArgs().size());
for (auto &argType : T->getTypeArgs()) {
dumpQualType(argType);
};
}
}