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 14 class BString; 15 class ContiguousStatement; 16 17 18 class DisassembledCode : public SourceCode { 19 public: 20 DisassembledCode(SourceLanguage* language); 21 ~DisassembledCode(); 22 23 virtual bool Lock(); 24 virtual void Unlock(); 25 26 virtual SourceLanguage* GetSourceLanguage() const; 27 28 virtual bool GetStatementLocationRange( 29 const SourceLocation& location, 30 SourceLocation& _start, 31 SourceLocation& _end) const; 32 33 virtual LocatableFile* GetSourceFile() const; 34 35 Statement* StatementAtAddress(target_addr_t address) const; 36 Statement* StatementAtLocation( 37 const SourceLocation& location) const; 38 TargetAddressRange StatementAddressRange() const; 39 40 // LineDataSource 41 virtual int32 CountLines() const; 42 virtual const char* LineAt(int32 index) const; 43 virtual int32 LineLengthAt(int32 index) const; 44 45 public: 46 bool AddCommentLine(const BString& line); 47 bool AddInstructionLine(const BString& line, 48 target_addr_t address, target_size_t size); 49 // instructions must be added in 50 // ascending address order 51 52 private: 53 struct Line; 54 55 typedef BObjectList<Line> LineList; 56 typedef BObjectList<ContiguousStatement> StatementList; 57 58 private: 59 bool _AddLine(const BString& line, 60 ContiguousStatement* statement); 61 static int _CompareAddressStatement( 62 const target_addr_t* address, 63 const ContiguousStatement* statement); 64 65 private: 66 SourceLanguage* fLanguage; 67 LineList fLines; 68 StatementList fStatements; 69 }; 70 71 72 #endif // DISASSEMBLED_CODE_H 73