disassembler.cc 1.7 KB

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