brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · f21a061 Raw
54 lines · cpp
1//===- lib/TextAPI/SymbolSet.cpp - TAPI Symbol Set ------------*- C++-*----===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "llvm/TextAPI/SymbolSet.h"10 11using namespace llvm;12using namespace llvm::MachO;13 14SymbolSet::~SymbolSet() {15  for (auto &[Key, Sym] : Symbols)16    Sym->~Symbol();17}18 19Symbol *SymbolSet::addGlobalImpl(EncodeKind Kind, StringRef Name,20                                 SymbolFlags Flags) {21  Name = copyString(Name);22  auto Result = Symbols.try_emplace(SymbolsMapKey{Kind, Name}, nullptr);23  if (Result.second)24    Result.first->second =25        new (Allocator) Symbol{Kind, Name, TargetList(), Flags};26  return Result.first->second;27}28 29Symbol *SymbolSet::addGlobal(EncodeKind Kind, StringRef Name, SymbolFlags Flags,30                             const Target &Targ) {31  auto *Sym = addGlobalImpl(Kind, Name, Flags);32  Sym->addTarget(Targ);33  return Sym;34}35 36const Symbol *SymbolSet::findSymbol(EncodeKind Kind, StringRef Name,37                                    ObjCIFSymbolKind ObjCIF) const {38  if (auto result = Symbols.lookup({Kind, Name}))39    return result;40  if ((ObjCIF == ObjCIFSymbolKind::None) || (ObjCIF > ObjCIFSymbolKind::EHType))41    return nullptr;42  assert(ObjCIF <= ObjCIFSymbolKind::EHType &&43         "expected single ObjCIFSymbolKind enum value");44  // Non-complete ObjC Interfaces are represented as global symbols.45  if (ObjCIF == ObjCIFSymbolKind::Class)46    return Symbols.lookup(47        {EncodeKind::GlobalSymbol, (ObjC2ClassNamePrefix + Name).str()});48  if (ObjCIF == ObjCIFSymbolKind::MetaClass)49    return Symbols.lookup(50        {EncodeKind::GlobalSymbol, (ObjC2MetaClassNamePrefix + Name).str()});51  return Symbols.lookup(52      {EncodeKind::GlobalSymbol, (ObjC2EHTypePrefix + Name).str()});53}54