aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/TextAPI/SymbolSet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/TextAPI/SymbolSet.cpp')
-rw-r--r--llvm/lib/TextAPI/SymbolSet.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/llvm/lib/TextAPI/SymbolSet.cpp b/llvm/lib/TextAPI/SymbolSet.cpp
index 0cbfa2f..2e0b416 100644
--- a/llvm/lib/TextAPI/SymbolSet.cpp
+++ b/llvm/lib/TextAPI/SymbolSet.cpp
@@ -28,6 +28,21 @@ Symbol *SymbolSet::addGlobal(EncodeKind Kind, StringRef Name, SymbolFlags Flags,
return Sym;
}
-const Symbol *SymbolSet::findSymbol(EncodeKind Kind, StringRef Name) const {
- return Symbols.lookup({Kind, Name});
+const Symbol *SymbolSet::findSymbol(EncodeKind Kind, StringRef Name,
+ ObjCIFSymbolKind ObjCIF) const {
+ if (auto result = Symbols.lookup({Kind, Name}))
+ return result;
+ if ((ObjCIF == ObjCIFSymbolKind::None) || (ObjCIF > ObjCIFSymbolKind::EHType))
+ return nullptr;
+ assert(ObjCIF <= ObjCIFSymbolKind::EHType &&
+ "expected single ObjCIFSymbolKind enum value");
+ // Non-complete ObjC Interfaces are represented as global symbols.
+ if (ObjCIF == ObjCIFSymbolKind::Class)
+ return Symbols.lookup(
+ {EncodeKind::GlobalSymbol, (ObjC2ClassNamePrefix + Name).str()});
+ if (ObjCIF == ObjCIFSymbolKind::MetaClass)
+ return Symbols.lookup(
+ {EncodeKind::GlobalSymbol, (ObjC2MetaClassNamePrefix + Name).str()});
+ return Symbols.lookup(
+ {EncodeKind::GlobalSymbol, (ObjC2EHTypePrefix + Name).str()});
}