Make sure any calls to numeric_std Resize have correct type
The signed/unsigned-ness of an expression needs to be preserved over any call to Resize. Also add a sanity check to make sure non-vector types are not resized.
This commit is contained in:
parent
96d32b29c9
commit
1410c339de
|
|
@ -417,7 +417,15 @@ vhdl_expr *vhdl_expr::cast(const vhdl_type *to)
|
|||
|
||||
vhdl_expr *vhdl_expr::resize(int newwidth)
|
||||
{
|
||||
vhdl_type *rtype = vhdl_type::nsigned(newwidth);
|
||||
vhdl_type *rtype;
|
||||
assert(type_);
|
||||
if (type_->get_name() == VHDL_TYPE_SIGNED)
|
||||
rtype = vhdl_type::nsigned(newwidth);
|
||||
else if (type_->get_name() == VHDL_TYPE_UNSIGNED)
|
||||
rtype = vhdl_type::nunsigned(newwidth);
|
||||
else
|
||||
assert(false); // Doesn't make sense to resize non-vector type
|
||||
|
||||
vhdl_fcall *resize = new vhdl_fcall("Resize", rtype);
|
||||
resize->add_expr(this);
|
||||
resize->add_expr(new vhdl_const_int(newwidth));
|
||||
|
|
|
|||
Loading…
Reference in New Issue