Add support for C++ namespace-aware typo correction, e.g., correcting
vector<int>
to
std::vector<int>
Patch by Kaelyn Uhrain, with minor tweaks + PCH support from me. Fixes
PR5776/<rdar://problem/8652971>.
Thanks Kaelyn!
llvm-svn: 134007
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index 4d7e364..3e95df4 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -2369,6 +2369,15 @@
TentativeDefinitions.insert(TentativeDefinitions.end(),
Record.begin(), Record.end());
break;
+
+ case KNOWN_NAMESPACES:
+ // Optimization for the first block.
+ if (KnownNamespaces.empty())
+ KnownNamespaces.swap(Record);
+ else
+ KnownNamespaces.insert(KnownNamespaces.end(),
+ Record.begin(), Record.end());
+ break;
}
First = false;
}
@@ -4452,6 +4461,17 @@
return std::pair<ObjCMethodList, ObjCMethodList>();
}
+void ASTReader::ReadKnownNamespaces(
+ llvm::SmallVectorImpl<NamespaceDecl *> &Namespaces) {
+ Namespaces.clear();
+
+ for (unsigned I = 0, N = KnownNamespaces.size(); I != N; ++I) {
+ if (NamespaceDecl *Namespace
+ = dyn_cast_or_null<NamespaceDecl>(GetDecl(KnownNamespaces[I])))
+ Namespaces.push_back(Namespace);
+ }
+}
+
void ASTReader::LoadSelector(Selector Sel) {
// It would be complicated to avoid reading the methods anyway. So don't.
ReadMethodPool(Sel);