From b122ec2a1a319f9a375a74a8ed74c8436a1d9758 Mon Sep 17 00:00:00 2001 From: Stephen Williams Date: Fri, 5 Apr 2013 19:27:03 -0700 Subject: [PATCH] parameter table in ivl_scope_s uses vector instead of C arrays. --- t-dll-api.cc | 6 +++--- t-dll.cc | 29 +++++++++++++++++------------ t-dll.h | 3 +-- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/t-dll-api.cc b/t-dll-api.cc index c7ad20ab0..0aa7dd577 100644 --- a/t-dll-api.cc +++ b/t-dll-api.cc @@ -2035,14 +2035,14 @@ extern "C" const char* ivl_scope_name(ivl_scope_t net) extern "C" unsigned ivl_scope_params(ivl_scope_t net) { assert(net); - return net->nparam_; + return net->param.size(); } extern "C" ivl_parameter_t ivl_scope_param(ivl_scope_t net, unsigned idx) { assert(net); - assert(idx < net->nparam_); - return net->param_ + idx; + assert(idx < net->param.size()); + return & (net->param[idx]); } extern "C" ivl_scope_t ivl_scope_parent(ivl_scope_t net) diff --git a/t-dll.cc b/t-dll.cc index 4cd03970b..409b81c56 100644 --- a/t-dll.cc +++ b/t-dll.cc @@ -467,9 +467,9 @@ ivl_parameter_t dll_target::scope_find_param(ivl_scope_t scope, const char*name) { unsigned idx = 0; - while (idx < scope->nparam_) { - if (strcmp(name, scope->param_[idx].basename) == 0) - return scope->param_ + idx; + while (idx < scope->param.size()) { + if (strcmp(name, scope->param[idx].basename) == 0) + return &scope->param[idx]; idx += 1; } @@ -484,13 +484,12 @@ ivl_parameter_t dll_target::scope_find_param(ivl_scope_t scope, */ void dll_target::make_scope_parameters(ivl_scope_t scop, const NetScope*net) { - scop->nparam_ = net->parameters.size(); - if (scop->nparam_ == 0) { - scop->param_ = 0; + if (net->parameters.size() == 0) { + scop->param.clear(); return; } - scop->param_ = new struct ivl_parameter_s [scop->nparam_]; + scop->param.resize(net->parameters.size()); unsigned idx = 0; typedef map::const_iterator pit_t; @@ -498,14 +497,20 @@ void dll_target::make_scope_parameters(ivl_scope_t scop, const NetScope*net) for (pit_t cur_pit = net->parameters.begin() ; cur_pit != net->parameters.end() ; ++ cur_pit ) { - assert(idx < scop->nparam_); - ivl_parameter_t cur_par = scop->param_ + idx; - cur_par->basename = (*cur_pit).first; + assert(idx < scop->param.size()); + ivl_parameter_t cur_par = &scop->param[idx]; + cur_par->basename = cur_pit->first; cur_par->local = cur_pit->second.local_flag; cur_par->scope = scop; - FILE_NAME(cur_par, &((*cur_pit).second)); + FILE_NAME(cur_par, &(cur_pit->second)); - NetExpr*etmp = (*cur_pit).second.val; + NetExpr*etmp = cur_pit->second.val; + if (etmp == 0) { + cerr << "?:?: internal error: " + << "What is the parameter expression for " << cur_pit->first + << " in " << net->fullname() << "?" << endl; + } + assert(etmp); make_scope_param_expr(cur_par, etmp); idx += 1; } diff --git a/t-dll.h b/t-dll.h index e7639b0b0..2876a5aa2 100644 --- a/t-dll.h +++ b/t-dll.h @@ -653,8 +653,7 @@ struct ivl_scope_s { unsigned nlpm_; ivl_lpm_t* lpm_; - unsigned nparam_; - ivl_parameter_t param_; + std::vector param; /* Scopes that are tasks/functions have a definition. */ ivl_statement_t def;