1*a03ca8b9SKrzysztof Kosiński // Copyright 2017 The Chromium Authors. All rights reserved.
2*a03ca8b9SKrzysztof Kosiński // Use of this source code is governed by a BSD-style license that can be
3*a03ca8b9SKrzysztof Kosiński // found in the LICENSE file.
4*a03ca8b9SKrzysztof Kosiński
5*a03ca8b9SKrzysztof Kosiński #include "components/zucchini/disassembler.h"
6*a03ca8b9SKrzysztof Kosiński
7*a03ca8b9SKrzysztof Kosiński #include "base/check_op.h"
8*a03ca8b9SKrzysztof Kosiński
9*a03ca8b9SKrzysztof Kosiński namespace zucchini {
10*a03ca8b9SKrzysztof Kosiński
11*a03ca8b9SKrzysztof Kosiński /******** EmptyReferenceReader ********/
12*a03ca8b9SKrzysztof Kosiński
GetNext()13*a03ca8b9SKrzysztof Kosiński std::optional<Reference> EmptyReferenceReader::GetNext() {
14*a03ca8b9SKrzysztof Kosiński return std::nullopt;
15*a03ca8b9SKrzysztof Kosiński }
16*a03ca8b9SKrzysztof Kosiński
17*a03ca8b9SKrzysztof Kosiński /******** EmptyReferenceWriter ********/
18*a03ca8b9SKrzysztof Kosiński
PutNext(Reference)19*a03ca8b9SKrzysztof Kosiński void EmptyReferenceWriter::PutNext(Reference /* reference */) {}
20*a03ca8b9SKrzysztof Kosiński
21*a03ca8b9SKrzysztof Kosiński /******** ReferenceGroup ********/
22*a03ca8b9SKrzysztof Kosiński
GetReader(offset_t lower,offset_t upper,Disassembler * disasm) const23*a03ca8b9SKrzysztof Kosiński std::unique_ptr<ReferenceReader> ReferenceGroup::GetReader(
24*a03ca8b9SKrzysztof Kosiński offset_t lower,
25*a03ca8b9SKrzysztof Kosiński offset_t upper,
26*a03ca8b9SKrzysztof Kosiński Disassembler* disasm) const {
27*a03ca8b9SKrzysztof Kosiński DCHECK_LE(lower, upper);
28*a03ca8b9SKrzysztof Kosiński DCHECK_LE(upper, disasm->size());
29*a03ca8b9SKrzysztof Kosiński return (disasm->*reader_factory_)(lower, upper);
30*a03ca8b9SKrzysztof Kosiński }
31*a03ca8b9SKrzysztof Kosiński
GetReader(Disassembler * disasm) const32*a03ca8b9SKrzysztof Kosiński std::unique_ptr<ReferenceReader> ReferenceGroup::GetReader(
33*a03ca8b9SKrzysztof Kosiński Disassembler* disasm) const {
34*a03ca8b9SKrzysztof Kosiński return (disasm->*reader_factory_)(0, static_cast<offset_t>(disasm->size()));
35*a03ca8b9SKrzysztof Kosiński }
36*a03ca8b9SKrzysztof Kosiński
GetWriter(MutableBufferView image,Disassembler * disasm) const37*a03ca8b9SKrzysztof Kosiński std::unique_ptr<ReferenceWriter> ReferenceGroup::GetWriter(
38*a03ca8b9SKrzysztof Kosiński MutableBufferView image,
39*a03ca8b9SKrzysztof Kosiński Disassembler* disasm) const {
40*a03ca8b9SKrzysztof Kosiński DCHECK_EQ(image.begin(), disasm->image().begin());
41*a03ca8b9SKrzysztof Kosiński DCHECK_EQ(image.size(), disasm->size());
42*a03ca8b9SKrzysztof Kosiński return (disasm->*writer_factory_)(image);
43*a03ca8b9SKrzysztof Kosiński }
44*a03ca8b9SKrzysztof Kosiński
45*a03ca8b9SKrzysztof Kosiński /******** Disassembler ********/
46*a03ca8b9SKrzysztof Kosiński
Disassembler(int num_equivalence_iterations)47*a03ca8b9SKrzysztof Kosiński Disassembler::Disassembler(int num_equivalence_iterations)
48*a03ca8b9SKrzysztof Kosiński : num_equivalence_iterations_(num_equivalence_iterations) {}
49*a03ca8b9SKrzysztof Kosiński
50*a03ca8b9SKrzysztof Kosiński Disassembler::~Disassembler() = default;
51*a03ca8b9SKrzysztof Kosiński
52*a03ca8b9SKrzysztof Kosiński } // namespace zucchini
53