Add sorry messages for missing array methods
This commit is contained in:
parent
89eabdfa35
commit
5442f3fee7
96
elab_expr.cc
96
elab_expr.cc
|
|
@ -1354,7 +1354,7 @@ unsigned PECallFunction::test_width_method_(Design*des, NetScope*scope,
|
||||||
cerr << get_fileline() << ": " << __func__ << ": "
|
cerr << get_fileline() << ": " << __func__ << ": "
|
||||||
<< "net->net_type()=" << *net->net_type() << endl;
|
<< "net->net_type()=" << *net->net_type() << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
const netdarray_t*use_darray = 0;
|
const netdarray_t*use_darray = 0;
|
||||||
|
|
||||||
if (net != 0)
|
if (net != 0)
|
||||||
|
|
@ -2934,7 +2934,7 @@ NetExpr* PECallFunction::elaborate_expr_method_par_(Design*, NetScope*scope,
|
||||||
// expression is a constant string, it should be able to calculate the
|
// expression is a constant string, it should be able to calculate the
|
||||||
// result at compile time.
|
// result at compile time.
|
||||||
if (dynamic_cast<const netstring_t*>(par_type)) {
|
if (dynamic_cast<const netstring_t*>(par_type)) {
|
||||||
|
|
||||||
const NetECString*par_string = dynamic_cast<const NetECString*>(par);
|
const NetECString*par_string = dynamic_cast<const NetECString*>(par);
|
||||||
ivl_assert(*par, par_string);
|
ivl_assert(*par, par_string);
|
||||||
string par_value = par_string->value().as_string();
|
string par_value = par_string->value().as_string();
|
||||||
|
|
@ -4349,6 +4349,98 @@ NetExpr* PEIdent::elaborate_expr(Design*des, NetScope*scope,
|
||||||
|
|
||||||
fun->parm(0, arg);
|
fun->parm(0, arg);
|
||||||
return fun;
|
return fun;
|
||||||
|
} else if (member_comp.name == "find") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'find()' "
|
||||||
|
"array location method is not currently "
|
||||||
|
"implemented." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
} else if (member_comp.name == "find_index") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'find_index()' "
|
||||||
|
"array location method is not currently "
|
||||||
|
"implemented." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
} else if (member_comp.name == "find_first") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'find_first()' "
|
||||||
|
"array location method is not currently "
|
||||||
|
"implemented." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
} else if (member_comp.name == "find_first_index") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'find_first_index()' "
|
||||||
|
"array location method is not currently "
|
||||||
|
"implemented." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
} else if (member_comp.name == "find_last") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'find_last()' "
|
||||||
|
"array location method is not currently "
|
||||||
|
"implemented." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
} else if (member_comp.name == "find_last_index") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'find_last_index()' "
|
||||||
|
"array location method is not currently "
|
||||||
|
"implemented." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
} else if (member_comp.name == "min") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'min()' "
|
||||||
|
"array location method is not currently "
|
||||||
|
"implemented." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
} else if (member_comp.name == "max") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'max()' "
|
||||||
|
"array location method is not currently "
|
||||||
|
"implemented." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
} else if (member_comp.name == "unique") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'unique()' "
|
||||||
|
"array location method is not currently "
|
||||||
|
"implemented." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
} else if (member_comp.name == "unique_index") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'unique_index()' "
|
||||||
|
"array location method is not currently "
|
||||||
|
"implemented." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
// FIXME: Check this is a real or integral type.
|
||||||
|
} else if (member_comp.name == "sum") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'sum()' "
|
||||||
|
"array reduction method is not currently "
|
||||||
|
"implemented." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
} else if (member_comp.name == "product") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'product()' "
|
||||||
|
"array reduction method is not currently "
|
||||||
|
"implemented." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
// FIXME: Check this is only an integral type.
|
||||||
|
} else if (member_comp.name == "and") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'and()' "
|
||||||
|
"array reduction method is not currently "
|
||||||
|
"implemented." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
} else if (member_comp.name == "or") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'or()' "
|
||||||
|
"array reduction method is not currently "
|
||||||
|
"implemented." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
} else if (member_comp.name == "xor") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'xor()' "
|
||||||
|
"array reduction method is not currently "
|
||||||
|
"implemented." << endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
25
elaborate.cc
25
elaborate.cc
|
|
@ -3816,6 +3816,31 @@ NetProc* PCallTask::elaborate_method_(Design*des, NetScope*scope,
|
||||||
IVL_VT_BOOL, 32,
|
IVL_VT_BOOL, 32,
|
||||||
true, method_name,
|
true, method_name,
|
||||||
"$size");
|
"$size");
|
||||||
|
else if (method_name=="reverse") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'reverse()' "
|
||||||
|
"array sorting method is not currently supported."
|
||||||
|
<< endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
} else if (method_name=="sort") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'sort()' "
|
||||||
|
"array sorting method is not currently supported."
|
||||||
|
<< endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
} else if (method_name=="rsort") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'rsort()' "
|
||||||
|
"array sorting method is not currently supported."
|
||||||
|
<< endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
} else if (method_name=="shuffle") {
|
||||||
|
cerr << get_fileline() << ": sorry: 'shuffle()' "
|
||||||
|
"array sorting method is not currently supported."
|
||||||
|
<< endl;
|
||||||
|
des->errors += 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (net->queue_type()) {
|
if (net->queue_type()) {
|
||||||
|
|
|
||||||
35
parse.y
35
parse.y
|
|
@ -3851,6 +3851,39 @@ expr_primary
|
||||||
$$ = tmp;
|
$$ = tmp;
|
||||||
delete $1;
|
delete $1;
|
||||||
}
|
}
|
||||||
|
/* These are array methods that cannot be matched with the above rule */
|
||||||
|
| hierarchy_identifier '.' K_and
|
||||||
|
{ pform_name_t * nm = $1;
|
||||||
|
nm->push_back(name_component_t(lex_strings.make("and")));
|
||||||
|
PEIdent*tmp = pform_new_ident(@1, *nm);
|
||||||
|
FILE_NAME(tmp, @1);
|
||||||
|
$$ = tmp;
|
||||||
|
delete nm;
|
||||||
|
}
|
||||||
|
| hierarchy_identifier '.' K_or
|
||||||
|
{ pform_name_t * nm = $1;
|
||||||
|
nm->push_back(name_component_t(lex_strings.make("or")));
|
||||||
|
PEIdent*tmp = pform_new_ident(@1, *nm);
|
||||||
|
FILE_NAME(tmp, @1);
|
||||||
|
$$ = tmp;
|
||||||
|
delete nm;
|
||||||
|
}
|
||||||
|
| hierarchy_identifier '.' K_unique
|
||||||
|
{ pform_name_t * nm = $1;
|
||||||
|
nm->push_back(name_component_t(lex_strings.make("unique")));
|
||||||
|
PEIdent*tmp = pform_new_ident(@1, *nm);
|
||||||
|
FILE_NAME(tmp, @1);
|
||||||
|
$$ = tmp;
|
||||||
|
delete nm;
|
||||||
|
}
|
||||||
|
| hierarchy_identifier '.' K_xor
|
||||||
|
{ pform_name_t * nm = $1;
|
||||||
|
nm->push_back(name_component_t(lex_strings.make("xor")));
|
||||||
|
PEIdent*tmp = pform_new_ident(@1, *nm);
|
||||||
|
FILE_NAME(tmp, @1);
|
||||||
|
$$ = tmp;
|
||||||
|
delete nm;
|
||||||
|
}
|
||||||
|
|
||||||
| PACKAGE_IDENTIFIER K_SCOPE_RES hierarchy_identifier
|
| PACKAGE_IDENTIFIER K_SCOPE_RES hierarchy_identifier
|
||||||
{ $$ = pform_package_ident(@2, $1, $3);
|
{ $$ = pform_package_ident(@2, $1, $3);
|
||||||
|
|
@ -5524,7 +5557,7 @@ net_type
|
||||||
This is used by parameter_assign, which is found to the right of
|
This is used by parameter_assign, which is found to the right of
|
||||||
the param_type in various rules. */
|
the param_type in various rules. */
|
||||||
|
|
||||||
param_type : data_type_or_implicit { param_data_type = $1; }
|
param_type : data_type_or_implicit { param_data_type = $1; }
|
||||||
|
|
||||||
/* parameter and localparam assignment lists are broken into
|
/* parameter and localparam assignment lists are broken into
|
||||||
separate BNF so that I can call slightly different parameter
|
separate BNF so that I can call slightly different parameter
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue