Add basic support for parameters using typedefs

This commit is contained in:
Cary R 2016-05-14 10:33:37 -07:00
parent 61c82d2cb0
commit 45fbf55806
3 changed files with 34 additions and 0 deletions

View File

@ -5183,6 +5183,11 @@ param_type
param_active_signed = true;
param_active_type = IVL_VT_BOOL;
}
| TYPE_IDENTIFIER
{ pform_set_param_from_type(@1, $1.type, $1.text, param_active_range,
param_active_signed, param_active_type);
delete[]$1.text;
}
;
/* parameter and localparam assignment lists are broken into

View File

@ -3173,6 +3173,28 @@ void pform_set_defparam(const pform_name_t&name, PExpr*expr)
pform_cur_module.front()->defparms.push_back(make_pair(name,expr));
}
void pform_set_param_from_type(const struct vlltype&loc,
const data_type_t *data_type,
const char *name,
list<pform_range_t> *&param_range,
bool &param_signed,
ivl_variable_type_t &param_type)
{
if (const vector_type_t *vec = dynamic_cast<const vector_type_t*> (data_type)) {
param_range = vec->pdims.get();
param_signed = vec->signed_flag;
param_type = vec->base_type;
return;
}
param_range = 0;
param_signed = false;
param_type = IVL_VT_NO_TYPE;
cerr << loc.get_fileline() << ": sorry: cannot currently create a "
"parameter of type '" << name << "' which was defined at: "
<< data_type->get_fileline() << "." << endl;
error_count += 1;
}
/*
* Specify paths.
*/

View File

@ -424,6 +424,13 @@ extern void pform_set_specparam(const struct vlltype&loc,
PExpr*expr);
extern void pform_set_defparam(const pform_name_t&name, PExpr*expr);
extern void pform_set_param_from_type(const struct vlltype&loc,
const data_type_t *data_type,
const char *name,
list<pform_range_t> *&param_range,
bool &param_signed,
ivl_variable_type_t &param_type);
/*
* Functions related to specify blocks.
*/