1/* 2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef DISASSEMBLED_CODE_H 6#define DISASSEMBLED_CODE_H 7 8 9#include <ObjectList.h> 10 11#include "SourceCode.h" 12 13 14class BString; 15class ContiguousStatement; 16 17 18class DisassembledCode : public SourceCode { 19public: 20 DisassembledCode(SourceLanguage* language); 21 ~DisassembledCode(); 22 23 virtual bool Lock(); 24 virtual void Unlock(); 25 26 virtual SourceLanguage* GetSourceLanguage() const; 27 28 virtual int32 CountLines() const; 29 virtual const char* LineAt(int32 index) const; 30 virtual int32 LineLengthAt(int32 index) const; 31 32 virtual bool GetStatementLocationRange( 33 const SourceLocation& location, 34 SourceLocation& _start, 35 SourceLocation& _end) const; 36 37 virtual LocatableFile* GetSourceFile() const; 38 39 Statement* StatementAtAddress(target_addr_t address) const; 40 Statement* StatementAtLocation( 41 const SourceLocation& location) const; 42 TargetAddressRange StatementAddressRange() const; 43 44public: 45 bool AddCommentLine(const BString& line); 46 bool AddInstructionLine(const BString& line, 47 target_addr_t address, target_size_t size); 48 // instructions must be added in 49 // ascending address order 50 51private: 52 struct Line; 53 54 typedef BObjectList<Line> LineList; 55 typedef BObjectList<ContiguousStatement> StatementList; 56 57private: 58 bool _AddLine(const BString& line, 59 ContiguousStatement* statement); 60 static int _CompareAddressStatement( 61 const target_addr_t* address, 62 const ContiguousStatement* statement); 63 64private: 65 SourceLanguage* fLanguage; 66 LineList fLines; 67 StatementList fStatements; 68}; 69 70 71#endif // DISASSEMBLED_CODE_H 72