diff --git a/elab_scope.cc b/elab_scope.cc index 8d8b52bea..b145bb887 100644 --- a/elab_scope.cc +++ b/elab_scope.cc @@ -181,17 +181,14 @@ static void elaborate_scope_enumeration(Design*des, NetScope*scope, enum_type_t*enum_type) { std::vector ranges; + netrange_t range; bool rc_flag; if (enum_type->range.get()) evaluate_ranges(des, scope, enum_type, ranges, *enum_type->range); - long msb = 0; - long lsb = 0; - if (!ranges.empty()) { - msb = ranges.front().get_msb(); - lsb = ranges.front().get_lsb(); + range = ranges.front(); if (ranges.size() > 1) { cerr << enum_type->get_fileline() << ": error: " << "Enum type must not have more than 1 packed dimension." @@ -202,7 +199,7 @@ static void elaborate_scope_enumeration(Design*des, NetScope*scope, netenum_t*use_enum = new netenum_t(enum_type->base_type, enum_type->signed_flag, - enum_type->integer_flag, msb, lsb, + enum_type->integer_flag, range, enum_type->names->size(), enum_type); diff --git a/netenum.cc b/netenum.cc index 802a7f446..bb53088bc 100644 --- a/netenum.cc +++ b/netenum.cc @@ -24,10 +24,10 @@ using namespace std; netenum_t::netenum_t(ivl_variable_type_t btype, bool signed_flag, - bool integer_flag, long msb, long lsb, size_t name_count, + bool integer_flag, const netrange_t &range, size_t name_count, enum_type_t*enum_type) : base_type_(btype), enum_type_(enum_type), signed_flag_(signed_flag), - integer_flag_(integer_flag), msb_(msb), lsb_(lsb), + integer_flag_(integer_flag), range_(range), names_(name_count), bits_(name_count) { } @@ -56,20 +56,14 @@ bool netenum_t::packed() const long netenum_t::packed_width() const { - if (msb_ >= lsb_) - return msb_ - lsb_ + 1; - else - return lsb_ - msb_ + 1; + return range_.width(); } vector netenum_t::slice_dimensions() const { - vector tmp (1); - tmp[0] = netrange_t(msb_, lsb_); - return tmp; + return vector(1, range_); } - bool netenum_t::insert_name(size_t name_idx, perm_string name, const verinum&val) { std::pair::iterator, bool> res; diff --git a/netenum.h b/netenum.h index 8ff8a9063..b05675cfe 100644 --- a/netenum.h +++ b/netenum.h @@ -35,7 +35,7 @@ class netenum_t : public LineInfo, public ivl_type_s { public: explicit netenum_t(ivl_variable_type_t base_type, bool signed_flag, - bool isint_flag, long msb, long lsb, + bool isint_flag, const netrange_t &range, size_t name_count, enum_type_t*enum_type); ~netenum_t(); @@ -77,7 +77,7 @@ class netenum_t : public LineInfo, public ivl_type_s { enum_type_t*enum_type_; bool signed_flag_; bool integer_flag_; - long msb_, lsb_; + netrange_t range_; std::map names_map_; std::vector names_;