1 //===-- DWARFAbbreviationDeclaration.h --------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_DWARFAbbreviationDeclaration_h_
11 #define liblldb_DWARFAbbreviationDeclaration_h_
13 #include "SymbolFileDWARF.h"
14 #include "DWARFAttribute.h"
16 class DWARFCompileUnit;
18 class DWARFAbbreviationDeclaration
21 enum { InvalidCode = 0 };
22 DWARFAbbreviationDeclaration();
24 // For hand crafting an abbreviation declaration
25 DWARFAbbreviationDeclaration(dw_tag_t tag, uint8_t has_children);
26 void AddAttribute(const DWARFAttribute& attr)
28 m_attributes.push_back(attr);
31 dw_uleb128_t Code() const { return m_code; }
32 void SetCode(dw_uleb128_t code) { m_code = code; }
33 dw_tag_t Tag() const { return m_tag; }
34 bool HasChildren() const { return m_has_children; }
35 size_t NumAttributes() const { return m_attributes.size(); }
36 dw_attr_t GetAttrByIndex(uint32_t idx) const { return m_attributes.size() > idx ? m_attributes[idx].get_attr() : 0; }
37 dw_form_t GetFormByIndex(uint32_t idx) const { return m_attributes.size() > idx ? m_attributes[idx].get_form() : 0; }
38 bool GetAttrAndFormByIndex(uint32_t idx, dw_attr_t& attr, dw_form_t& form) const
40 if (m_attributes.size() > idx)
42 m_attributes[idx].get(attr, form);
49 // idx is assumed to be valid when calling GetAttrAndFormByIndexUnchecked()
50 void GetAttrAndFormByIndexUnchecked(uint32_t idx, dw_attr_t& attr, dw_form_t& form) const
52 m_attributes[idx].get(attr, form);
54 dw_form_t GetFormByIndexUnchecked (uint32_t idx) const
56 return m_attributes[idx].get_form();
58 void CopyExcludingAddressAttributes(const DWARFAbbreviationDeclaration& abbr_decl, const uint32_t idx);
59 void CopyChangingStringToStrp(
60 const DWARFAbbreviationDeclaration& abbr_decl,
61 const lldb_private::DataExtractor& debug_info_data,
62 dw_offset_t debug_info_offset,
63 const DWARFCompileUnit* cu,
64 const uint32_t strp_min_len);
65 uint32_t FindAttributeIndex(dw_attr_t attr) const;
66 bool Extract(const lldb_private::DataExtractor& data, lldb::offset_t *offset_ptr);
67 bool Extract(const lldb_private::DataExtractor& data, lldb::offset_t *offset_ptr, dw_uleb128_t code);
68 // void Append(BinaryStreamBuf& out_buff) const;
70 void Dump(lldb_private::Stream *s) const;
71 bool operator == (const DWARFAbbreviationDeclaration& rhs) const;
72 // DWARFAttribute::collection& Attributes() { return m_attributes; }
73 const DWARFAttribute::collection& Attributes() const { return m_attributes; }
77 uint8_t m_has_children;
78 DWARFAttribute::collection m_attributes;
81 #endif // liblldb_DWARFAbbreviationDeclaration_h_