bool RemoveNamespaceRewriteVisitor::VisitRecordTypeLoc(RecordTypeLoc RTLoc) { const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(RTLoc.getDecl()); if (!RD) return true; std::string Name; if (ConsumerInstance->getNewName(RD, Name)) { ConsumerInstance->RewriteHelper->replaceRecordType(RTLoc, Name); } return true; }
bool ReplaceClassWithBaseTemplateSpecRewriteVisitor::VisitRecordTypeLoc( RecordTypeLoc TLoc) { const Type *Ty = TLoc.getTypePtr(); if (Ty->isUnionType()) return true; const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(TLoc.getDecl()); if (!RD || (RD->getCanonicalDecl() != ConsumerInstance->TheCXXRecord)) return true; ConsumerInstance->RewriteHelper->replaceRecordType( TLoc, ConsumerInstance->TheBaseName + " "); return true; }
bool EmptyStructToIntRewriteVisitor::VisitRecordTypeLoc(RecordTypeLoc RTLoc) { const RecordDecl *RD = RTLoc.getDecl(); if (RD->getCanonicalDecl() == ConsumerInstance->TheRecordDecl) { SourceLocation LocStart = RTLoc.getLocStart(); void *LocPtr = LocStart.getPtrEncoding(); if (ConsumerInstance->VisitedLocs.count(LocPtr)) return true; ConsumerInstance->VisitedLocs.insert(LocPtr); // handle a special case - // struct S1 { // struct { } S; // }; const IdentifierInfo *TypeId = RTLoc.getType().getBaseTypeIdentifier(); if (!TypeId) return true; ConsumerInstance->RewriteHelper->replaceRecordType(RTLoc, "int"); ConsumerInstance->Rewritten = true; } return true; }
bool RemoveUnusedOuterClassVisitor::VisitRecordTypeLoc(RecordTypeLoc TLoc) { const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(TLoc.getDecl()); ConsumerInstance->UsedCXXRDSet.insert(RD->getCanonicalDecl()); return true; }