netenum_t: Use netrange_t to store range

Use netrange_t, which is meant for storing ranges, for storing the range of
a netenum_t.

This makes the integration with the rest of the codebase a bit more
seamlessly and also allow to reuse methods defined for netrange_t such as
the width() method rather than having to reimplement it.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
This commit is contained in:
Lars-Peter Clausen 2022-01-08 13:01:20 +01:00
parent 90edf48ac6
commit 3176611771
3 changed files with 9 additions and 18 deletions

View File

@ -181,17 +181,14 @@ static void elaborate_scope_enumeration(Design*des, NetScope*scope,
enum_type_t*enum_type) enum_type_t*enum_type)
{ {
std::vector<netrange_t> ranges; std::vector<netrange_t> ranges;
netrange_t range;
bool rc_flag; bool rc_flag;
if (enum_type->range.get()) if (enum_type->range.get())
evaluate_ranges(des, scope, enum_type, ranges, *enum_type->range); evaluate_ranges(des, scope, enum_type, ranges, *enum_type->range);
long msb = 0;
long lsb = 0;
if (!ranges.empty()) { if (!ranges.empty()) {
msb = ranges.front().get_msb(); range = ranges.front();
lsb = ranges.front().get_lsb();
if (ranges.size() > 1) { if (ranges.size() > 1) {
cerr << enum_type->get_fileline() << ": error: " cerr << enum_type->get_fileline() << ": error: "
<< "Enum type must not have more than 1 packed dimension." << "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, netenum_t*use_enum = new netenum_t(enum_type->base_type,
enum_type->signed_flag, enum_type->signed_flag,
enum_type->integer_flag, msb, lsb, enum_type->integer_flag, range,
enum_type->names->size(), enum_type->names->size(),
enum_type); enum_type);

View File

@ -24,10 +24,10 @@
using namespace std; using namespace std;
netenum_t::netenum_t(ivl_variable_type_t btype, bool signed_flag, 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) enum_type_t*enum_type)
: base_type_(btype), enum_type_(enum_type), signed_flag_(signed_flag), : 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) names_(name_count), bits_(name_count)
{ {
} }
@ -56,20 +56,14 @@ bool netenum_t::packed() const
long netenum_t::packed_width() const long netenum_t::packed_width() const
{ {
if (msb_ >= lsb_) return range_.width();
return msb_ - lsb_ + 1;
else
return lsb_ - msb_ + 1;
} }
vector<netrange_t> netenum_t::slice_dimensions() const vector<netrange_t> netenum_t::slice_dimensions() const
{ {
vector<netrange_t> tmp (1); return vector<netrange_t>(1, range_);
tmp[0] = netrange_t(msb_, lsb_);
return tmp;
} }
bool netenum_t::insert_name(size_t name_idx, perm_string name, const verinum&val) bool netenum_t::insert_name(size_t name_idx, perm_string name, const verinum&val)
{ {
std::pair<std::map<perm_string,verinum>::iterator, bool> res; std::pair<std::map<perm_string,verinum>::iterator, bool> res;

View File

@ -35,7 +35,7 @@ class netenum_t : public LineInfo, public ivl_type_s {
public: public:
explicit netenum_t(ivl_variable_type_t base_type, bool signed_flag, 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); size_t name_count, enum_type_t*enum_type);
~netenum_t(); ~netenum_t();
@ -77,7 +77,7 @@ class netenum_t : public LineInfo, public ivl_type_s {
enum_type_t*enum_type_; enum_type_t*enum_type_;
bool signed_flag_; bool signed_flag_;
bool integer_flag_; bool integer_flag_;
long msb_, lsb_; netrange_t range_;
std::map<perm_string,verinum> names_map_; std::map<perm_string,verinum> names_map_;
std::vector<perm_string> names_; std::vector<perm_string> names_;