Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===-- LVCompare.h ---------------------------------------------*- 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-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This file defines the LVCompare class, which is used to describe a logical
10
// view comparison.
11
//
12
//===----------------------------------------------------------------------===//
13
 
14
#ifndef LLVM_DEBUGINFO_LOGICALVIEW_CORE_LVCOMPARE_H
15
#define LLVM_DEBUGINFO_LOGICALVIEW_CORE_LVCOMPARE_H
16
 
17
#include "llvm/DebugInfo/LogicalView/Core/LVObject.h"
18
 
19
namespace llvm {
20
namespace logicalview {
21
 
22
class LVReader;
23
 
24
// Record the elements missing or added and their compare pass.
25
using LVPassEntry = std::tuple<LVReader *, LVElement *, LVComparePass>;
26
using LVPassTable = std::vector<LVPassEntry>;
27
 
28
class LVCompare final {
29
  raw_ostream &OS;
30
  LVScopes ScopeStack;
31
 
32
  // As the comparison is performed twice (by exchanging the reference
33
  // and target readers) the element missing/added status does specify
34
  // the comparison pass.
35
  // By recording each missing/added elements along with its pass, it
36
  // allows checking which elements were missing/added during each pass.
37
  LVPassTable PassTable;
38
 
39
  // Reader used on the LHS of the comparison.
40
  // In the 'Missing' pass, it points to the reference reader.
41
  // In the 'Added' pass it points to the target reader.
42
  LVReader *Reader = nullptr;
43
 
44
  bool FirstMissing = true;
45
  bool PrintLines = false;
46
  bool PrintScopes = false;
47
  bool PrintSymbols = false;
48
  bool PrintTypes = false;
49
 
50
  static void setInstance(LVCompare *Compare);
51
 
52
  void printCurrentStack();
53
  void printSummary() const;
54
 
55
public:
56
  LVCompare() = delete;
57
  LVCompare(raw_ostream &OS);
58
  LVCompare(const LVCompare &) = delete;
59
  LVCompare &operator=(const LVCompare &) = delete;
60
  ~LVCompare() = default;
61
 
62
  static LVCompare &getInstance();
63
 
64
  // Scopes stack used during the missing/added reporting.
65
  void push(LVScope *Scope) { ScopeStack.push_back(Scope); }
66
  void pop() { ScopeStack.pop_back(); }
67
 
68
  // Perform comparison between the 'Reference' and 'Target' scopes tree.
69
  Error execute(LVReader *ReferenceReader, LVReader *TargetReader);
70
 
71
  void addPassEntry(LVReader *Reader, LVElement *Element, LVComparePass Pass) {
72
    PassTable.emplace_back(Reader, Element, Pass);
73
  }
74
  const LVPassTable &getPassTable() const & { return PassTable; }
75
 
76
  void printItem(LVElement *Element, LVComparePass Pass);
77
  void print(raw_ostream &OS) const;
78
 
79
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
80
  void dump() const { print(dbgs()); }
81
#endif
82
};
83
 
84
inline LVCompare &getComparator() { return LVCompare::getInstance(); }
85
 
86
} // end namespace logicalview
87
} // end namespace llvm
88
 
89
#endif // LLVM_DEBUGINFO_LOGICALVIEW_CORE_LVCOMPARE_H