clang 20.0.0 (based on r547379) from build 12806354. Bug: http://b/379133546 Test: N/A Change-Id: I2eb8938af55d809de674be63cb30cf27e801862b Upstream-Commit: ad834e67b1105d15ef907f6255d4c96e8e733f57
90 lines
2.8 KiB
C++
90 lines
2.8 KiB
C++
//===-- LVCompare.h ---------------------------------------------*- 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines the LVCompare class, which is used to describe a logical
|
|
// view comparison.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_DEBUGINFO_LOGICALVIEW_CORE_LVCOMPARE_H
|
|
#define LLVM_DEBUGINFO_LOGICALVIEW_CORE_LVCOMPARE_H
|
|
|
|
#include "llvm/DebugInfo/LogicalView/Core/LVObject.h"
|
|
|
|
namespace llvm {
|
|
namespace logicalview {
|
|
|
|
class LVReader;
|
|
|
|
// Record the elements missing or added and their compare pass.
|
|
using LVPassEntry = std::tuple<LVReader *, LVElement *, LVComparePass>;
|
|
using LVPassTable = std::vector<LVPassEntry>;
|
|
|
|
class LVCompare final {
|
|
raw_ostream &OS;
|
|
LVScopes ScopeStack;
|
|
|
|
// As the comparison is performed twice (by exchanging the reference
|
|
// and target readers) the element missing/added status does specify
|
|
// the comparison pass.
|
|
// By recording each missing/added elements along with its pass, it
|
|
// allows checking which elements were missing/added during each pass.
|
|
LVPassTable PassTable;
|
|
|
|
// Reader used on the LHS of the comparison.
|
|
// In the 'Missing' pass, it points to the reference reader.
|
|
// In the 'Added' pass it points to the target reader.
|
|
LVReader *Reader = nullptr;
|
|
|
|
bool FirstMissing = true;
|
|
bool PrintLines = false;
|
|
bool PrintScopes = false;
|
|
bool PrintSymbols = false;
|
|
bool PrintTypes = false;
|
|
|
|
static void setInstance(LVCompare *Compare);
|
|
|
|
void printCurrentStack();
|
|
void printSummary() const;
|
|
|
|
public:
|
|
LVCompare() = delete;
|
|
LVCompare(raw_ostream &OS);
|
|
LVCompare(const LVCompare &) = delete;
|
|
LVCompare &operator=(const LVCompare &) = delete;
|
|
~LVCompare() = default;
|
|
|
|
static LVCompare &getInstance();
|
|
|
|
// Scopes stack used during the missing/added reporting.
|
|
void push(LVScope *Scope) { ScopeStack.push_back(Scope); }
|
|
void pop() { ScopeStack.pop_back(); }
|
|
|
|
// Perform comparison between the 'Reference' and 'Target' scopes tree.
|
|
Error execute(LVReader *ReferenceReader, LVReader *TargetReader);
|
|
|
|
void addPassEntry(LVReader *Reader, LVElement *Element, LVComparePass Pass) {
|
|
PassTable.emplace_back(Reader, Element, Pass);
|
|
}
|
|
const LVPassTable &getPassTable() const & { return PassTable; }
|
|
|
|
void printItem(LVElement *Element, LVComparePass Pass);
|
|
void print(raw_ostream &OS) const;
|
|
|
|
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
|
|
void dump() const { print(dbgs()); }
|
|
#endif
|
|
};
|
|
|
|
inline LVCompare &getComparator() { return LVCompare::getInstance(); }
|
|
|
|
} // end namespace logicalview
|
|
} // end namespace llvm
|
|
|
|
#endif // LLVM_DEBUGINFO_LOGICALVIEW_CORE_LVCOMPARE_H
|