diff --git a/elab_scope.cc b/elab_scope.cc index 728b897e2..8d8b52bea 100644 --- a/elab_scope.cc +++ b/elab_scope.cc @@ -180,18 +180,25 @@ static void collect_scope_specparams(Design*des, NetScope*scope, static void elaborate_scope_enumeration(Design*des, NetScope*scope, enum_type_t*enum_type) { + std::vector ranges; bool rc_flag; - assert(enum_type->range->size() == 1); - pform_range_t&range = enum_type->range->front(); - NetExpr*msb_ex = elab_and_eval(des, scope, range.first, -1); - NetExpr*lsb_ex = elab_and_eval(des, scope, range.second, -1); + + if (enum_type->range.get()) + evaluate_ranges(des, scope, enum_type, ranges, *enum_type->range); long msb = 0; - rc_flag = eval_as_long(msb, msb_ex); - assert(rc_flag); long lsb = 0; - rc_flag = eval_as_long(lsb, lsb_ex); - assert(rc_flag); + + if (!ranges.empty()) { + msb = ranges.front().get_msb(); + lsb = ranges.front().get_lsb(); + if (ranges.size() > 1) { + cerr << enum_type->get_fileline() << ": error: " + << "Enum type must not have more than 1 packed dimension." + << endl; + des->errors++; + } + } netenum_t*use_enum = new netenum_t(enum_type->base_type, enum_type->signed_flag, diff --git a/pform.cc b/pform.cc index 65fe6ebcb..91851d075 100644 --- a/pform.cc +++ b/pform.cc @@ -3575,8 +3575,6 @@ static void pform_set_enum(const struct vlltype&li, enum_type_t*enum_type, cur->set_signed(enum_type->signed_flag); - assert(enum_type->range.get() != 0); - assert(enum_type->range->size() == 1); //XXXXcur->set_range(*enum_type->range, SR_NET); // If this is an integer enumeration switch the wire to an integer. if (enum_type->integer_flag) { @@ -3594,9 +3592,6 @@ static void pform_set_enum(const struct vlltype&li, enum_type_t*enum_type, // IVL_VT_BOOL. assert(enum_type->base_type==IVL_VT_LOGIC || enum_type->base_type==IVL_VT_BOOL); - assert(enum_type->range.get() != 0); - assert(enum_type->range->size() == 1); - // Add the file and line information to the enumeration type. FILE_NAME(&(enum_type->li), li);