Path: blob/main/contrib/llvm-project/llvm/lib/TextAPI/SymbolSet.cpp
35262 views
//===- lib/TextAPI/SymbolSet.cpp - TAPI Symbol Set ------------*- C++-*----===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "llvm/TextAPI/SymbolSet.h"910using namespace llvm;11using namespace llvm::MachO;1213Symbol *SymbolSet::addGlobalImpl(EncodeKind Kind, StringRef Name,14SymbolFlags Flags) {15Name = copyString(Name);16auto Result = Symbols.try_emplace(SymbolsMapKey{Kind, Name}, nullptr);17if (Result.second)18Result.first->second =19new (Allocator) Symbol{Kind, Name, TargetList(), Flags};20return Result.first->second;21}2223Symbol *SymbolSet::addGlobal(EncodeKind Kind, StringRef Name, SymbolFlags Flags,24const Target &Targ) {25auto *Sym = addGlobalImpl(Kind, Name, Flags);26Sym->addTarget(Targ);27return Sym;28}2930const Symbol *SymbolSet::findSymbol(EncodeKind Kind, StringRef Name,31ObjCIFSymbolKind ObjCIF) const {32if (auto result = Symbols.lookup({Kind, Name}))33return result;34if ((ObjCIF == ObjCIFSymbolKind::None) || (ObjCIF > ObjCIFSymbolKind::EHType))35return nullptr;36assert(ObjCIF <= ObjCIFSymbolKind::EHType &&37"expected single ObjCIFSymbolKind enum value");38// Non-complete ObjC Interfaces are represented as global symbols.39if (ObjCIF == ObjCIFSymbolKind::Class)40return Symbols.lookup(41{EncodeKind::GlobalSymbol, (ObjC2ClassNamePrefix + Name).str()});42if (ObjCIF == ObjCIFSymbolKind::MetaClass)43return Symbols.lookup(44{EncodeKind::GlobalSymbol, (ObjC2MetaClassNamePrefix + Name).str()});45return Symbols.lookup(46{EncodeKind::GlobalSymbol, (ObjC2EHTypePrefix + Name).str()});47}484950