diff options
Diffstat (limited to 'llvm/lib/TextAPI/SymbolSet.cpp')
-rw-r--r-- | llvm/lib/TextAPI/SymbolSet.cpp | 19 |
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()}); } |