add (new const_form (DW_FORM_data8, fw_8));
add (new offset_form
(DW_FORM_sec_offset,
- cl_lineptr, cl_loclistptr, cl_macptr, cl_rangelistptr));
+ dw_class_set (cl_lineptr, cl_loclistptr,
+ cl_macptr, cl_rangelistptr)));
add (new exprloc_form (DW_FORM_exprloc));
add (new flag_form (DW_FORM_flag_present, fw_0));
add (new ref_form (DW_FORM_ref_sig8, fw_8));
#include "dwarf_version-imp.hh"
#include "check_debug_info.hh"
+template <class T>
+void
+dwver_index_table<T>::add (T const *f)
+{
+ _m_data[f->name ()] = f;
+}
+
+template <class T>
+T const *
+dwver_index_table<T>::get (int f) const
+{
+ typename _map_t::const_iterator it = _m_data.find (f);
+ if (it != _m_data.end ())
+ return it->second;
+ else
+ return NULL;
+}
+
+template class dwver_index_table<form>;
+template class dwver_index_table<attribute>;
+
+template<class T>
+dwver_basic<T>::dwver_basic (int a_name, dw_class_set a_classes)
+ : _m_name (a_name)
+ , _m_classes (a_classes)
+{}
+
+template<class T>
+dw_class_set const &
+dwver_basic<T>::classes () const
+{
+ return _m_classes;
+}
+
+template<class T>
+int
+dwver_basic<T>::name () const
+{
+ return _m_name;
+}
+
+template class dwver_basic<form>;
+template class dwver_basic<attribute>;
+
full_form::full_form (int a_name, dw_class_set a_classes,
form_width_t a_width, storage_class_t a_storclass)
: basic_form (a_name, a_classes)
return _m_storclass;
}
+
+offset_form::offset_form (int a_name, dw_class_set a_classes)
+ : basic_form (a_name, a_classes)
+{}
+
form_width_t
-width_off::width (cu const *cu)
+offset_form::width (cu const *cu) const
{
return static_cast<form_width_t> (cu->head->offset_size);
}
+storage_class_t
+offset_form::storage_class () const
+{
+ return sc_value;
+}
+
+
+address_form::address_form (int a_name, dw_class_set a_classes)
+ : basic_form (a_name, a_classes)
+{}
+
form_width_t
-width_addr::width (struct cu const *cu)
+address_form::width (cu const *cu) const
{
return static_cast<form_width_t> (cu->head->address_size);
}
+storage_class_t
+address_form::storage_class () const
+{
+ return sc_value;
+}
+
+
string_form::string_form (int a_name)
: preset_form<sc_string, cl_string> (a_name, fw_unknown)
{}
_map_t _m_data;
protected:
- void add (T const *f)
- {
- _m_data[f->name ()] = f;
- }
+ void add (T const *f);
public:
- T const *
- get (int f) const
- {
- typename _map_t::const_iterator it = _m_data.find (f);
- if (it != _m_data.end ())
- return it->second;
- else
- return NULL;
- }
+ T const *get (int f) const;
};
typedef dwver_index_table<form> form_table;
dw_class_set _m_classes;
public:
- dwver_basic (int a_name, dw_class_set a_classes)
- : _m_name (a_name)
- , _m_classes (a_classes)
- {}
+ dwver_basic (int a_name, dw_class_set a_classes);
- dw_class_set const &
- classes () const
- {
- return _m_classes;
- }
-
- int
- name () const
- {
- return _m_name;
- }
+ dw_class_set const &classes () const;
+ int name () const;
};
typedef dwver_basic<form> basic_form;
storage_class_t storage_class () const;
};
-struct width_off {
- static form_width_t width (cu const *cu);
-};
+struct offset_form
+ : public basic_form
+{
+ offset_form (int a_name, dw_class_set a_classes);
-struct width_addr {
- static form_width_t width (cu const *cu);
+ form_width_t width (cu const *cu) const;
+ storage_class_t storage_class () const;
};
-template<class WidthSel, storage_class_t StorClass>
-class selwidth_form
+struct address_form
: public basic_form
{
-public:
- template <class... Clss>
- selwidth_form (int a_name, Clss... a_classes)
- : basic_form (a_name, dw_class_set (a_classes...))
- {}
+ address_form (int a_name, dw_class_set a_classes);
- form_width_t
- width (struct cu const *cu) const
- {
- return WidthSel::width (cu);
- }
-
- storage_class_t
- storage_class () const
- {
- return StorClass;
- }
+ form_width_t width (cu const *cu) const;
+ storage_class_t storage_class () const;
};
template<storage_class_t StorClass, dw_class... Classes>
{}
};
-typedef selwidth_form<width_off, sc_value> offset_form;
-typedef selwidth_form<width_addr, sc_value> address_form;
typedef preset_form<sc_block, cl_block> block_form;
typedef preset_form<sc_value, cl_constant> const_form;
typedef preset_form<sc_value, cl_reference> ref_form;