// fix the "B" part of names like A::B::C if B is our target void TypeRenameTransform::processQualifierLoc(NestedNameSpecifierLoc NNSL, bool forceRewriteMacro) { while (NNSL) { auto NNS = NNSL.getNestedNameSpecifier(); auto NNSK = NNS->getKind(); if (NNSK == NestedNameSpecifier::TypeSpec || NNSK == NestedNameSpecifier::TypeSpecWithTemplate) { processTypeLoc(NNSL.getTypeLoc(), forceRewriteMacro); } else if (NNSK == NestedNameSpecifier::Namespace) { std::string newName; if (nameMatches(NNS->getAsNamespace(), newName, true)) { renameLocation(NNSL.getLocalBeginLoc(), newName); } processTypeLoc(NNSL.getTypeLoc(), forceRewriteMacro); } else if (NNSK == NestedNameSpecifier::NamespaceAlias) { std::string newName; if (nameMatches(NNS->getAsNamespaceAlias(), newName, true)) { renameLocation(NNSL.getLocalBeginLoc(), newName); } processTypeLoc(NNSL.getTypeLoc(), forceRewriteMacro); } // else { // auto srcrange = NNSL.getSourceRange(); // llvm::errs() << indent() // << "==> ??? (" << ii << ") " // << " range=[" << range(srcrange) // << "\n"; // break; // } NNSL = NNSL.getPrefix(); } }