1 | //===-- DiffLog.h - Difference Log Builder and accessories ------*- 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 header defines the interface to the LLVM difference log builder. |
10 | // |
11 | //===----------------------------------------------------------------------===// |
12 | |
13 | #include "DiffLog.h" |
14 | #include "DiffConsumer.h" |
15 | #include "llvm/ADT/StringRef.h" |
16 | |
17 | using namespace llvm; |
18 | |
19 | LogBuilder::~LogBuilder() { |
20 | if (consumer) |
21 | consumer->logf(Log: *this); |
22 | } |
23 | |
24 | StringRef LogBuilder::getFormat() const { return Format; } |
25 | |
26 | unsigned LogBuilder::getNumArguments() const { return Arguments.size(); } |
27 | const Value *LogBuilder::getArgument(unsigned I) const { return Arguments[I]; } |
28 | |
29 | DiffLogBuilder::~DiffLogBuilder() { consumer.logd(Log: *this); } |
30 | |
31 | void DiffLogBuilder::addMatch(const Instruction *L, const Instruction *R) { |
32 | Diff.push_back(Elt: DiffRecord(L, R)); |
33 | } |
34 | void DiffLogBuilder::addLeft(const Instruction *L) { |
35 | // HACK: VS 2010 has a bug in the stdlib that requires this. |
36 | Diff.push_back(Elt: DiffRecord(L, DiffRecord::second_type(nullptr))); |
37 | } |
38 | void DiffLogBuilder::addRight(const Instruction *R) { |
39 | // HACK: VS 2010 has a bug in the stdlib that requires this. |
40 | Diff.push_back(Elt: DiffRecord(DiffRecord::first_type(nullptr), R)); |
41 | } |
42 | |
43 | unsigned DiffLogBuilder::getNumLines() const { return Diff.size(); } |
44 | |
45 | DiffChange DiffLogBuilder::getLineKind(unsigned I) const { |
46 | return (Diff[I].first ? (Diff[I].second ? DC_match : DC_left) |
47 | : DC_right); |
48 | } |
49 | const Instruction *DiffLogBuilder::getLeft(unsigned I) const { |
50 | return Diff[I].first; |
51 | } |
52 | const Instruction *DiffLogBuilder::getRight(unsigned I) const { |
53 | return Diff[I].second; |
54 | } |
55 |