]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
dwarflint: Move more code from dwarf_version.hh to .cc
authorPetr Machata <pmachata@redhat.com>
Thu, 7 Oct 2010 01:47:18 +0000 (03:47 +0200)
committerPetr Machata <pmachata@redhat.com>
Thu, 7 Oct 2010 01:47:18 +0000 (03:47 +0200)
- And drop selwidth_form, which was overly general for the two uses that we
  have.  Implement corresponding classes directly.

dwarflint/dwarf_4.cc
dwarflint/dwarf_version-imp.cc
dwarflint/dwarf_version-imp.hh

index 7793aee2b0a128d665c939faa6d42f3c35bc3db5..1733582eaa986e8da06cf03d34542c5cabf0a132 100644 (file)
@@ -90,7 +90,8 @@ namespace
       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));
index e8e6b1d6d8bd0426a0fb95b2e3752ad39709f0f3..bc03d88eb5d4ed52ec5f17483fd25d4a5a96841e 100644 (file)
 #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)
@@ -45,18 +89,41 @@ full_form::storage_class () const
   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)
 {}
index e6c3609538f661185872b6dcd07e9b422dadc03d..e2d1b601c72f5247118e01d4586c97c118e276f9 100644 (file)
@@ -36,21 +36,10 @@ class dwver_index_table
   _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;
@@ -64,22 +53,10 @@ class dwver_basic
   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;
@@ -100,35 +77,22 @@ public:
   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>
@@ -155,8 +119,6 @@ struct preset_attribute
   {}
 };
 
-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;