llvm-project/llvm/unittests/TextAPI/TextStubHelpers.h
Cyndy Ishida d9a9872ec4
[TextAPI] Rename SymbolKind to EncodeKind (#79622)
A distinction that doesn't _usually_ matter is that the
MachO::SymbolKind is really a mapping of entries in TBD files not
symbols. To better understand this, rename the enum so it represents an
encoding mapped to TBDs as opposed to symbols alone.

For example, it can be a bit confusing that "GlobalSymbol" is a enum
value when all of those values can represent a GlobalSymbol.
2024-01-26 16:12:50 -08:00

66 lines
2.1 KiB
C++

//===-- TextStubHelpers.cpp -------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===-----------------------------------------------------------------------===/
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/TextAPI/InterfaceFile.h"
#include <algorithm>
#include <string>
#ifndef TEXT_STUB_HELPERS_H
#define TEXT_STUB_HELPERS_H
namespace llvm {
struct ExportedSymbol {
MachO::EncodeKind Kind = MachO::EncodeKind::GlobalSymbol;
std::string Name = {};
bool Weak = false;
bool ThreadLocalValue = false;
bool isData = false;
MachO::TargetList Targets = {};
};
using ExportedSymbolSeq = std::vector<ExportedSymbol>;
using TargetToAttr = std::vector<std::pair<llvm::MachO::Target, std::string>>;
using TBDFile = std::unique_ptr<MachO::InterfaceFile>;
using TBDReexportFile = std::shared_ptr<MachO::InterfaceFile>;
inline bool operator<(const ExportedSymbol &LHS, const ExportedSymbol &RHS) {
return std::tie(LHS.Kind, LHS.Name) < std::tie(RHS.Kind, RHS.Name);
}
inline bool operator==(const ExportedSymbol &LHS, const ExportedSymbol &RHS) {
return std::tie(LHS.Kind, LHS.Name, LHS.Weak, LHS.ThreadLocalValue) ==
std::tie(RHS.Kind, RHS.Name, RHS.Weak, RHS.ThreadLocalValue);
}
inline std::string stripWhitespace(std::string S) {
S.erase(std::remove_if(S.begin(), S.end(), ::isspace), S.end());
return S;
}
// This will transform a single InterfaceFile then compare against the other
// InterfaceFile then transform the second InterfaceFile in the same way to
// regain equality.
inline bool
checkEqualityOnTransform(MachO::InterfaceFile &FileA,
MachO::InterfaceFile &FileB,
void (*Transform)(MachO::InterfaceFile *)) {
Transform(&FileA);
// Files should not be equal.
if (FileA == FileB)
return false;
Transform(&FileB);
// Files should be equal.
if (FileA != FileB)
return false;
return true;
}
} // namespace llvm
#endif