diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2023-12-18 20:30:12 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2024-04-19 21:12:03 +0000 |
| commit | c9157d925c489f07ba9c0b2ce47e5149b75969a5 (patch) | |
| tree | 08bc4a3d9cad3f9ebffa558ddf140b9d9257b219 /contrib/llvm-project/llvm/lib/TextAPI/Symbol.cpp | |
| parent | 2a66844f606a35d68ad8a8061f4bea204274b3bc (diff) | |
Diffstat (limited to 'contrib/llvm-project/llvm/lib/TextAPI/Symbol.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/TextAPI/Symbol.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/lib/TextAPI/Symbol.cpp b/contrib/llvm-project/llvm/lib/TextAPI/Symbol.cpp index 20fa6362716a..fd395436051d 100644 --- a/contrib/llvm-project/llvm/lib/TextAPI/Symbol.cpp +++ b/contrib/llvm-project/llvm/lib/TextAPI/Symbol.cpp @@ -72,5 +72,31 @@ bool Symbol::operator==(const Symbol &O) const { std::tie(O.Name, O.Kind, O.Targets, RHSFlags); } +SimpleSymbol parseSymbol(StringRef SymName, const SymbolFlags Flags) { + if (SymName.starts_with(ObjC1ClassNamePrefix)) + return {SymName.drop_front(ObjC1ClassNamePrefix.size()), + SymbolKind::ObjectiveCClass}; + if (SymName.starts_with(ObjC2ClassNamePrefix)) + return {SymName.drop_front(ObjC2ClassNamePrefix.size()), + SymbolKind::ObjectiveCClass}; + if (SymName.starts_with(ObjC2MetaClassNamePrefix)) + return {SymName.drop_front(ObjC2MetaClassNamePrefix.size()), + SymbolKind::ObjectiveCClass}; + if (SymName.starts_with(ObjC2EHTypePrefix)) { + // When classes without ehtype are used in try/catch blocks + // a weak-defined symbol is exported. In those cases, treat these as a + // global instead. + if ((Flags & SymbolFlags::WeakDefined) == SymbolFlags::WeakDefined) + return {SymName, SymbolKind::GlobalSymbol}; + return {SymName.drop_front(ObjC2EHTypePrefix.size()), + SymbolKind::ObjectiveCClassEHType}; + } + + if (SymName.starts_with(ObjC2IVarPrefix)) + return {SymName.drop_front(ObjC2IVarPrefix.size()), + SymbolKind::ObjectiveCInstanceVariable}; + return {SymName, SymbolKind::GlobalSymbol}; +} + } // end namespace MachO. } // end namespace llvm. |
