Respond better to some error/sorry situations.

This commit is contained in:
Stephen Williams 2012-02-12 11:16:31 -08:00
parent 6eeef8311f
commit c1b73c83f4
3 changed files with 19 additions and 6 deletions

View File

@ -3293,6 +3293,12 @@ NetExpr* PEIdent::elaborate_expr_net_idx_up_(Design*des, NetScope*scope,
return ss;
}
if (net->sig()->packed_dims().size() > 1) {
cerr << get_fileline() << ": sorry: Indexed part select of packed arrays not supported here." << endl;
des->errors += 1;
return net;
}
base = normalize_variable_base(base, net->msi(), net->lsi(), wid, true);
NetESelect*ss = new NetESelect(net, base, wid, IVL_SEL_IDX_UP);
@ -3551,7 +3557,7 @@ NetExpr* PEIdent::elaborate_expr_net(Design*des, NetScope*scope,
list<long> prefix_indices;
bool rc = evaluate_index_prefix(des, scope, prefix_indices, path_.back().index);
ivl_assert(*this, rc);
if (!rc) return 0;
// If this is a part select of a signal, then make a new
// temporary signal that is connected to just the

View File

@ -359,7 +359,7 @@ bool PEIdent::elaborate_lval_net_bit_(Design*des,
{
list<long>prefix_indices;
bool rc = calculate_packed_indices_(des, scope, lv->sig(), prefix_indices);
ivl_assert(*this, rc);
if (!rc) return false;
const name_component_t&name_tail = path_.back();
ivl_assert(*this, !name_tail.index.empty());
@ -597,6 +597,13 @@ bool PEIdent::elaborate_lval_net_idx_(Design*des,
}
}
} else {
if (reg->packed_dims().size() > 1) {
cerr << get_fileline() << ": sorry: "
<< "Indexed part select of packed arrays not supported nere." << endl;
des->errors += 1;
return false;
}
/* Correct the mux for the range of the vector. */
if (use_sel == index_component_t::SEL_IDX_UP) {
base = normalize_variable_base(base, reg->packed_dims(),

View File

@ -937,13 +937,13 @@ bool evaluate_index_prefix(Design*des, NetScope*scope,
assert(icur != indices.end());
assert(icur->sel == index_component_t::SEL_BIT);
NetExpr*texpr = elab_and_eval(des, scope, icur->msb, -1, true);
ivl_assert(*icur->msb, texpr);
long tmp;
if (!eval_as_long(tmp, texpr)) {
if (texpr == 0 || !eval_as_long(tmp, texpr)) {
cerr << icur->msb->get_fileline() << ": error: "
"Array index expressions must be constant." << endl;
"Array index expressions must be constant here." << endl;
des->errors += 1;
return 0;
return false;
}
prefix_indices .push_back(tmp);