#pragma once // // This file is distributed under the MIT License. See LICENSE.md for details. // #include #include #include "revng/Yield/Function.h" namespace detail { class DissassemblyHelperImpl; } namespace model { class Function; } namespace efa { class ControlFlowGraph; } class LLVMDisassemblerInterface; class RawBinaryView; class DissassemblyHelper { private: std::unique_ptr Internal; public: explicit DissassemblyHelper(); ~DissassemblyHelper(); yield::Function disassemble(const model::Function &Function, const efa::ControlFlowGraph &Metadata, const RawBinaryView &BinaryView, const model::Binary &Binary, const model::AssemblyNameBuilder &NameBuilder) { yield::Function Result; disassemble(Function, Metadata, BinaryView, Binary, NameBuilder, Result); return Result; } void disassemble(const model::Function &Function, const efa::ControlFlowGraph &Metadata, const RawBinaryView &BinaryView, const model::Binary &Binary, const model::AssemblyNameBuilder &NameBuilder, yield::Function &ResultFunction); private: LLVMDisassemblerInterface & getDisassemblerFor(MetaAddressType::Values AddressType, const model::DisassemblyConfiguration &); };