#include "../libdw/dwarf.h"
#include <map>
#include <cassert>
+#include <string.h>
dw_class_set::dw_class_set (dw_class a, dw_class b, dw_class c,
dw_class d, dw_class e)
, _m_storclass (a_storclass)
{}
+dw_class
+form::cls (attribute const *attribute) const
+{
+ assert (attribute != NULL);
+ dw_class_set result = classes ();
+ result &= attribute->classes ();
+ assert (result.count () == 1);
+ return static_cast<dw_class> (ffsl (result.to_ulong ()));
+}
+
form_width_t
form::width (cu const *cu) const
{
#include <bitset>
#include "check_debug_info.ii"
+#include "dwarf_version.ii"
enum dw_class
{
return _m_classes;
}
+ /// Answer a class of form given attribute as a context. This
+ /// assumes that the result is exactly one class. You must validate
+ /// the form via form_allowed before calling this. If more than two
+ /// classes match, the form and attribute tables are ill-designed.
+ dw_class cls (attribute const *attribute) const;
+
/// Return width of data stored with given form. CU may be NULL if
/// you are sure that the form size doesn't depend on bitness of
/// address_size or offset_size.