Add/update queue compile time error messages

This commit is contained in:
Cary R 2020-07-25 16:32:08 -07:00
parent d1b75d9407
commit 6ecd43d947
3 changed files with 33 additions and 14 deletions

View File

@ -2665,6 +2665,11 @@ NetExpr* PECallFunction::elaborate_expr_method_(Design*des, NetScope*scope,
if (net->darray_type()) {
if (method_name == "size") {
if (parms_.size() != 0) {
cerr << get_fileline() << ": error: size() method "
<< "takes no arguments" << endl;
des->errors += 1;
}
NetESFunc*sys_expr = new NetESFunc("$size",
IVL_VT_BOOL, 32, 1);
sys_expr->parm(0, new NetESignal(net));
@ -2673,6 +2678,11 @@ NetExpr* PECallFunction::elaborate_expr_method_(Design*des, NetScope*scope,
}
if (method_name == "pop_back") {
if (parms_.size() != 0) {
cerr << get_fileline() << ": error: pop_back() method "
<< "takes no arguments" << endl;
des->errors += 1;
}
NetESFunc*sys_expr = new NetESFunc("$ivl_darray_method$pop_back",
expr_type_,
expr_width_, 1);
@ -2682,6 +2692,11 @@ NetExpr* PECallFunction::elaborate_expr_method_(Design*des, NetScope*scope,
}
if (method_name == "pop_front") {
if (parms_.size() != 0) {
cerr << get_fileline() << ": error: pop_front() method "
<< "takes no arguments" << endl;
des->errors += 1;
}
NetESFunc*sys_expr = new NetESFunc("$ivl_darray_method$pop_front",
expr_type_,
expr_width_, 1);

View File

@ -1112,11 +1112,18 @@ NetNet* PWire::elaborate_sig(Design*des, NetScope*scope) const
max_idx = -1;
} else {
verinum res = cv->value();
max_idx = res.as_long();
if (max_idx < 0) {
cerr << get_fileline() << ": error: queue '"
<< name_ << "' bound must be positive ("
<< max_idx << ")!" << endl;
if (res.is_defined()) {
max_idx = res.as_long();
if (max_idx < 0) {
cerr << get_fileline() << ": error: queue '"
<< name_ << "' bound must be positive ("
<< max_idx << ")!" << endl;
des->errors += 1;
max_idx = -1;
}
} else {
cerr << get_fileline() << ": error: queue '" << name_
<< "' bound is undefined!" << endl;
des->errors += 1;
max_idx = -1;
}

View File

@ -3600,16 +3600,14 @@ NetProc* PCallTask::elaborate_sys_task_method_(Design*des, NetScope*scope,
// The queue delete method takes an optional element.
if (net->queue_type()) {
if (nparms > 1) {
cerr << get_fileline() << ": error: queue method "
<< "delete() takes zero or one argument." << endl;
cerr << get_fileline() << ": error: queue delete() "
<< "method takes zero or one argument." << endl;
des->errors += 1;
return 0;
}
} else if (nparms > 0) {
cerr << get_fileline() << ": error: darray method "
<< "delete() takes no arguments." << endl;
cerr << get_fileline() << ": error: darray delete() "
<< "method takes no arguments." << endl;
des->errors += 1;
return 0;
}
}
@ -3643,10 +3641,9 @@ NetProc* PCallTask::elaborate_queue_method_(Design*des, NetScope*scope,
unsigned nparms = parms_.size();
if ((nparms == 0) || (nparms > 1)) {
cerr << get_fileline() << ": error: method " << method_name
<< "() requires a single argument." << endl;
cerr << get_fileline() << ": error: " << method_name
<< "() method requires a single argument." << endl;
des->errors += 1;
return 0;
}
ivl_variable_type_t base_type = net->darray_type()->element_base_type();