elab_expr: Support part select for enums inside of structs
Fixes #1033 Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
This commit is contained in:
parent
d564cecfb9
commit
e0b255f34f
22
elab_expr.cc
22
elab_expr.cc
|
|
@ -2486,8 +2486,8 @@ static NetExpr* check_for_struct_members(const LineInfo*li,
|
||||||
|
|
||||||
} else if (const netenum_t*tmp_enum = dynamic_cast<const netenum_t*> (member_type)) {
|
} else if (const netenum_t*tmp_enum = dynamic_cast<const netenum_t*> (member_type)) {
|
||||||
|
|
||||||
// If the element is an enum, then we don't have
|
// If the element is an enum, then we only need to check if
|
||||||
// anything special to do.
|
// there is a part select for it
|
||||||
if (debug_elaborate) {
|
if (debug_elaborate) {
|
||||||
cerr << li->get_fileline() << ": check_for_struct_members: "
|
cerr << li->get_fileline() << ": check_for_struct_members: "
|
||||||
<< "Tail element is an enum" << *tmp_enum
|
<< "Tail element is an enum" << *tmp_enum
|
||||||
|
|
@ -2495,6 +2495,24 @@ static NetExpr* check_for_struct_members(const LineInfo*li,
|
||||||
}
|
}
|
||||||
struct_type = 0;
|
struct_type = 0;
|
||||||
|
|
||||||
|
if (!member_comp.index.empty()) {
|
||||||
|
|
||||||
|
if (member_comp.index.size() > 1) {
|
||||||
|
cerr << li->get_fileline() << ": error: "
|
||||||
|
<< "Too many index expressions for enum member." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
long tail_off = 0;
|
||||||
|
unsigned long tail_wid = 0;
|
||||||
|
bool rc = calculate_part(li, des, scope, member_comp.index.back(), tail_off, tail_wid);
|
||||||
|
if (! rc) return 0;
|
||||||
|
|
||||||
|
off += tail_off;
|
||||||
|
use_width = tail_wid;
|
||||||
|
}
|
||||||
|
|
||||||
} else if (const netvector_t*mem_vec = dynamic_cast<const netvector_t*>(member_type)) {
|
} else if (const netvector_t*mem_vec = dynamic_cast<const netvector_t*>(member_type)) {
|
||||||
|
|
||||||
if (debug_elaborate) {
|
if (debug_elaborate) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue