diff --git a/Module.h b/Module.h index 48c83af88..993a8c0df 100644 --- a/Module.h +++ b/Module.h @@ -97,7 +97,7 @@ class Module : public PScopeExtra, public PNamedItem { /* specparams are simpler than other parameters, in that they can have a range, but not an explicit type. The restrictions are enforced by the parser. */ - mapspecparams; + mapspecparams; /* The module also has defparam assignments which don't create new parameters within the module, but may be used to set diff --git a/PScope.h b/PScope.h index 1c0760ad5..aa0eddf84 100644 --- a/PScope.h +++ b/PScope.h @@ -105,8 +105,8 @@ class LexicalScope { SymbolType symbol_type() const; }; - mapparameters; - maplocalparams; + mapparameters; + maplocalparams; // Defined types in the scope. maptypedefs; diff --git a/elab_scope.cc b/elab_scope.cc index 4afd4b680..5554a0768 100644 --- a/elab_scope.cc +++ b/elab_scope.cc @@ -63,7 +63,7 @@ void set_scope_timescale(Design*des, NetScope*scope, PScope*pscope) des->set_precision(pscope->time_precision); } -typedef map::const_iterator mparm_it_t; +typedef map::const_iterator mparm_it_t; static void collect_parm_item_(Design*des, NetScope*scope, perm_string name, const LexicalScope::param_expr_t&cur, @@ -110,59 +110,59 @@ static void collect_parm_item_(Design*des, NetScope*scope, perm_string name, } static void collect_scope_parameters_(Design*des, NetScope*scope, - const map¶meters) + const map¶meters) { for (mparm_it_t cur = parameters.begin() ; cur != parameters.end() ; ++ cur ) { // A parameter can not have the same name as a genvar. if (scope->find_genvar((*cur).first)) { - cerr << cur->second.get_fileline() + cerr << cur->second->get_fileline() << ": error: parameter and genvar in '" << scope->fullname() << "' have the same name '" << (*cur).first << "'." << endl; des->errors += 1; } - collect_parm_item_(des, scope, (*cur).first, (*cur).second, false, false); + collect_parm_item_(des, scope, cur->first, *(cur->second), false, false); } } static void collect_scope_localparams_(Design*des, NetScope*scope, - const map&localparams) + const map&localparams) { for (mparm_it_t cur = localparams.begin() ; cur != localparams.end() ; ++ cur ) { // A localparam can not have the same name as a genvar. if (scope->find_genvar((*cur).first)) { - cerr << cur->second.get_fileline() + cerr << cur->second->get_fileline() << ": error: localparam and genvar in '" << scope->fullname() << "' have the same name '" << (*cur).first << "'." << endl; des->errors += 1; } - collect_parm_item_(des, scope, (*cur).first, (*cur).second, false, true); + collect_parm_item_(des, scope, cur->first, *(cur->second), false, true); } } static void collect_scope_specparams_(Design*des, NetScope*scope, - const map&specparams) + const map&specparams) { for (mparm_it_t cur = specparams.begin() ; cur != specparams.end() ; ++ cur ) { // A specparam can not have the same name as a genvar. if (scope->find_genvar((*cur).first)) { - cerr << cur->second.get_fileline() + cerr << cur->second->get_fileline() << ": error: specparam and genvar in '" << scope->fullname() << "' have the same name '" << (*cur).first << "'." << endl; des->errors += 1; } - collect_parm_item_(des, scope, (*cur).first, (*cur).second, true, false); + collect_parm_item_(des, scope, cur->first, *(cur->second), true, false); } } diff --git a/pform.cc b/pform.cc index d6b41f3d3..c0a57ffcc 100644 --- a/pform.cc +++ b/pform.cc @@ -3059,27 +3059,28 @@ void pform_set_parameter(const struct vlltype&loc, } assert(expr); - Module::param_expr_t&parm = scope->parameters[name]; - FILE_NAME(&parm, loc); + Module::param_expr_t*parm = new Module::param_expr_t(); + FILE_NAME(parm, loc); - parm.expr = expr; + add_local_symbol(scope, name, parm); + scope->parameters[name] = parm; - parm.type = type; + parm->expr = expr; + + parm->type = type; if (range) { assert(range->size() == 1); pform_range_t&rng = range->front(); assert(rng.first); assert(rng.second); - parm.msb = rng.first; - parm.lsb = rng.second; + parm->msb = rng.first; + parm->lsb = rng.second; } else { - parm.msb = 0; - parm.lsb = 0; + parm->msb = 0; + parm->lsb = 0; } - parm.signed_flag = signed_flag; - parm.range = value_range; - - add_local_symbol(scope, name, &parm); + parm->signed_flag = signed_flag; + parm->range = value_range; // Only a Module keeps the position of the parameter. if ((dynamic_cast(scope)) && (scope == pform_cur_module.front())) @@ -3097,27 +3098,28 @@ void pform_set_localparam(const struct vlltype&loc, } assert(expr); - Module::param_expr_t&parm = scope->localparams[name]; - FILE_NAME(&parm, loc); + Module::param_expr_t*parm = new Module::param_expr_t(); + FILE_NAME(parm, loc); - parm.expr = expr; + add_local_symbol(scope, name, parm); + scope->localparams[name] = parm; - parm.type = type; + parm->expr = expr; + + parm->type = type; if (range) { assert(range->size() == 1); pform_range_t&rng = range->front(); assert(rng.first); assert(rng.second); - parm.msb = rng.first; - parm.lsb = rng.second; + parm->msb = rng.first; + parm->lsb = rng.second; } else { - parm.msb = 0; - parm.lsb = 0; + parm->msb = 0; + parm->lsb = 0; } - parm.signed_flag = signed_flag; - parm.range = 0; - - add_local_symbol(scope, name, &parm); + parm->signed_flag = signed_flag; + parm->range = 0; } void pform_set_specparam(const struct vlltype&loc, perm_string name, @@ -3128,28 +3130,29 @@ void pform_set_specparam(const struct vlltype&loc, perm_string name, assert(scope == lexical_scope); assert(expr); - Module::param_expr_t&parm = pform_cur_module.front()->specparams[name]; - FILE_NAME(&parm, loc); + Module::param_expr_t*parm = new Module::param_expr_t(); + FILE_NAME(parm, loc); - parm.expr = expr; + add_local_symbol(scope, name, parm); + pform_cur_module.front()->specparams[name] = parm; + + parm->expr = expr; if (range) { assert(range->size() == 1); pform_range_t&rng = range->front(); assert(rng.first); assert(rng.second); - parm.type = IVL_VT_LOGIC; - parm.msb = rng.first; - parm.lsb = rng.second; + parm->type = IVL_VT_LOGIC; + parm->msb = rng.first; + parm->lsb = rng.second; } else { - parm.type = IVL_VT_NO_TYPE; - parm.msb = 0; - parm.lsb = 0; + parm->type = IVL_VT_NO_TYPE; + parm->msb = 0; + parm->lsb = 0; } - parm.signed_flag = false; - parm.range = 0; - - add_local_symbol(scope, name, &parm); + parm->signed_flag = false; + parm->range = 0; } void pform_set_defparam(const pform_name_t&name, PExpr*expr) diff --git a/pform_dump.cc b/pform_dump.cc index 26a079786..97a6f13af 100644 --- a/pform_dump.cc +++ b/pform_dump.cc @@ -1359,22 +1359,22 @@ void LexicalScope::dump_typedefs_(ostream&out, unsigned indent) const void LexicalScope::dump_parameters_(ostream&out, unsigned indent) const { - typedef map::const_iterator parm_iter_t; + typedef map::const_iterator parm_iter_t; for (parm_iter_t cur = parameters.begin() ; cur != parameters.end() ; ++ cur ) { out << setw(indent) << "" << "parameter " - << (*cur).second.type << " "; - if ((*cur).second.signed_flag) + << (*cur).second->type << " "; + if ((*cur).second->signed_flag) out << "signed "; - if ((*cur).second.msb) - out << "[" << *(*cur).second.msb << ":" - << *(*cur).second.lsb << "] "; + if ((*cur).second->msb) + out << "[" << *(*cur).second->msb << ":" + << *(*cur).second->lsb << "] "; out << (*cur).first << " = "; - if ((*cur).second.expr) - out << *(*cur).second.expr; + if ((*cur).second->expr) + out << *(*cur).second->expr; else out << "/* ERROR */"; - for (LexicalScope::range_t*tmp = (*cur).second.range + for (LexicalScope::range_t*tmp = (*cur).second->range ; tmp ; tmp = tmp->next) { if (tmp->exclude_flag) out << " exclude "; @@ -1408,16 +1408,16 @@ void LexicalScope::dump_parameters_(ostream&out, unsigned indent) const void LexicalScope::dump_localparams_(ostream&out, unsigned indent) const { - typedef map::const_iterator parm_iter_t; + typedef map::const_iterator parm_iter_t; for (parm_iter_t cur = localparams.begin() ; cur != localparams.end() ; ++ cur ) { out << setw(indent) << "" << "localparam "; - if ((*cur).second.msb) - out << "[" << *(*cur).second.msb << ":" - << *(*cur).second.lsb << "] "; + if ((*cur).second->msb) + out << "[" << *(*cur).second->msb << ":" + << *(*cur).second->lsb << "] "; out << (*cur).first << " = "; - if ((*cur).second.expr) - out << *(*cur).second.expr << ";" << endl; + if ((*cur).second->expr) + out << *(*cur).second->expr << ";" << endl; else out << "/* ERROR */;" << endl; } @@ -1513,16 +1513,16 @@ void PClass::dump(ostream&out, unsigned indent) const void Module::dump_specparams_(ostream&out, unsigned indent) const { - typedef map::const_iterator parm_iter_t; + typedef map::const_iterator parm_iter_t; for (parm_iter_t cur = specparams.begin() ; cur != specparams.end() ; ++ cur ) { out << setw(indent) << "" << "specparam "; - if ((*cur).second.msb) - out << "[" << *(*cur).second.msb << ":" - << *(*cur).second.lsb << "] "; + if ((*cur).second->msb) + out << "[" << *(*cur).second->msb << ":" + << *(*cur).second->lsb << "] "; out << (*cur).first << " = "; - if ((*cur).second.expr) - out << *(*cur).second.expr << ";" << endl; + if ((*cur).second->expr) + out << *(*cur).second->expr << ";" << endl; else out << "/* ERROR */;" << endl; }