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/test_disassembler.h"
6*a03ca8b9SKrzysztof Kosiński
7*a03ca8b9SKrzysztof Kosiński #include "components/zucchini/test_reference_reader.h"
8*a03ca8b9SKrzysztof Kosiński
9*a03ca8b9SKrzysztof Kosiński namespace zucchini {
10*a03ca8b9SKrzysztof Kosiński
11*a03ca8b9SKrzysztof Kosiński // |num_equivalence_iterations_| = 2 to cover common case for testing.
TestDisassembler(const ReferenceTypeTraits & traits1,const std::vector<Reference> & refs1,const ReferenceTypeTraits & traits2,const std::vector<Reference> & refs2,const ReferenceTypeTraits & traits3,const std::vector<Reference> & refs3)12*a03ca8b9SKrzysztof Kosiński TestDisassembler::TestDisassembler(const ReferenceTypeTraits& traits1,
13*a03ca8b9SKrzysztof Kosiński const std::vector<Reference>& refs1,
14*a03ca8b9SKrzysztof Kosiński const ReferenceTypeTraits& traits2,
15*a03ca8b9SKrzysztof Kosiński const std::vector<Reference>& refs2,
16*a03ca8b9SKrzysztof Kosiński const ReferenceTypeTraits& traits3,
17*a03ca8b9SKrzysztof Kosiński const std::vector<Reference>& refs3)
18*a03ca8b9SKrzysztof Kosiński : Disassembler(2),
19*a03ca8b9SKrzysztof Kosiński traits_{traits1, traits2, traits3},
20*a03ca8b9SKrzysztof Kosiński refs_{refs1, refs2, refs3} {}
21*a03ca8b9SKrzysztof Kosiński
22*a03ca8b9SKrzysztof Kosiński TestDisassembler::~TestDisassembler() = default;
23*a03ca8b9SKrzysztof Kosiński
GetExeType() const24*a03ca8b9SKrzysztof Kosiński ExecutableType TestDisassembler::GetExeType() const {
25*a03ca8b9SKrzysztof Kosiński return kExeTypeUnknown;
26*a03ca8b9SKrzysztof Kosiński }
27*a03ca8b9SKrzysztof Kosiński
GetExeTypeString() const28*a03ca8b9SKrzysztof Kosiński std::string TestDisassembler::GetExeTypeString() const {
29*a03ca8b9SKrzysztof Kosiński return "(Unknown)";
30*a03ca8b9SKrzysztof Kosiński }
31*a03ca8b9SKrzysztof Kosiński
MakeReferenceGroups() const32*a03ca8b9SKrzysztof Kosiński std::vector<ReferenceGroup> TestDisassembler::MakeReferenceGroups() const {
33*a03ca8b9SKrzysztof Kosiński return {
34*a03ca8b9SKrzysztof Kosiński {traits_[0], &TestDisassembler::MakeReadRefs1,
35*a03ca8b9SKrzysztof Kosiński &TestDisassembler::MakeWriteRefs1},
36*a03ca8b9SKrzysztof Kosiński {traits_[1], &TestDisassembler::MakeReadRefs2,
37*a03ca8b9SKrzysztof Kosiński &TestDisassembler::MakeWriteRefs2},
38*a03ca8b9SKrzysztof Kosiński {traits_[2], &TestDisassembler::MakeReadRefs3,
39*a03ca8b9SKrzysztof Kosiński &TestDisassembler::MakeWriteRefs3},
40*a03ca8b9SKrzysztof Kosiński };
41*a03ca8b9SKrzysztof Kosiński }
42*a03ca8b9SKrzysztof Kosiński
Parse(ConstBufferView image)43*a03ca8b9SKrzysztof Kosiński bool TestDisassembler::Parse(ConstBufferView image) {
44*a03ca8b9SKrzysztof Kosiński return true;
45*a03ca8b9SKrzysztof Kosiński }
46*a03ca8b9SKrzysztof Kosiński
MakeReadRefs(int type)47*a03ca8b9SKrzysztof Kosiński std::unique_ptr<ReferenceReader> TestDisassembler::MakeReadRefs(int type) {
48*a03ca8b9SKrzysztof Kosiński return std::make_unique<TestReferenceReader>(refs_[type]);
49*a03ca8b9SKrzysztof Kosiński }
50*a03ca8b9SKrzysztof Kosiński
MakeWriteRefs(MutableBufferView image)51*a03ca8b9SKrzysztof Kosiński std::unique_ptr<ReferenceWriter> TestDisassembler::MakeWriteRefs(
52*a03ca8b9SKrzysztof Kosiński MutableBufferView image) {
53*a03ca8b9SKrzysztof Kosiński class NoOpWriter : public ReferenceWriter {
54*a03ca8b9SKrzysztof Kosiński public:
55*a03ca8b9SKrzysztof Kosiński // ReferenceWriter:
56*a03ca8b9SKrzysztof Kosiński void PutNext(Reference) override {}
57*a03ca8b9SKrzysztof Kosiński };
58*a03ca8b9SKrzysztof Kosiński return std::make_unique<NoOpWriter>();
59*a03ca8b9SKrzysztof Kosiński }
60*a03ca8b9SKrzysztof Kosiński
61*a03ca8b9SKrzysztof Kosiński } // namespace zucchini
62