mirror of
https://github.com/steveicarus/iverilog.git
synced 2026-09-08 04:20:49 +02:00
Handle indexed defparams.
The l-value of a defparam assignment is a hierarchical name that may include array selects to select scopes from module arrays. Therefore it makes no sense to store parsed defparams in a map. Instead, they should go into an ordered list. This also maked more sense because later defparams *may* have the same name as a previous defparam, and will override the previous defparam. So replace the map of parsed defparams with a list of parsed defparams. Also, as soon as the defparam expression is elaborated, the list entry is no longer needed, so delete it. Save memory.
This commit is contained in:
@@ -22,6 +22,7 @@
|
||||
|
||||
# include <list>
|
||||
# include <map>
|
||||
# include <utility>
|
||||
# include "svector.h"
|
||||
# include "StringHeap.h"
|
||||
# include "HName.h"
|
||||
@@ -118,7 +119,8 @@ class Module : public PScope, public LineInfo {
|
||||
new parameters within the module, but may be used to set
|
||||
values within this module (when instantiated) or in other
|
||||
instantiated modules. */
|
||||
map<pform_name_t,PExpr*>defparms;
|
||||
typedef pair<pform_name_t,PExpr*> named_expr_t;
|
||||
list<named_expr_t>defparms;
|
||||
|
||||
/* Parameters may be overridden at instantiation time;
|
||||
the overrides do not contain explicit parameter names,
|
||||
@@ -169,7 +171,7 @@ class Module : public PScope, public LineInfo {
|
||||
bool elaborate(Design*, NetScope*scope) const;
|
||||
|
||||
typedef map<perm_string,NetExpr*> replace_t;
|
||||
bool elaborate_scope(Design*, NetScope*scope, const replace_t&rep) const;
|
||||
bool elaborate_scope(Design*, NetScope*scope, const replace_t&rep);
|
||||
|
||||
bool elaborate_sig(Design*, NetScope*scope) const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user