From 6b2990cfec74fe48e0297a28ef0f73d67ad8019f Mon Sep 17 00:00:00 2001 From: mole99 Date: Wed, 12 Jul 2023 15:10:23 +0200 Subject: [PATCH] Use more C++11 features --- PTimingCheck.cc | 36 ++++---------------------------- PTimingCheck.h | 47 +++++++++++++++++++++--------------------- elaborate.cc | 55 +++++++++++++++++++++---------------------------- parse.y | 25 ++++++++++------------ pform.cc | 10 ++++----- pform.h | 8 +++---- pform_dump.cc | 6 ++---- 7 files changed, 73 insertions(+), 114 deletions(-) diff --git a/PTimingCheck.cc b/PTimingCheck.cc index 5ec24bd21..42ea7219c 100644 --- a/PTimingCheck.cc +++ b/PTimingCheck.cc @@ -19,8 +19,8 @@ # include "PTimingCheck.h" -PRecRem::PRecRem(event_t reference_event, - event_t data_event, +PRecRem::PRecRem(event_t* reference_event, + event_t* data_event, PExpr* setup_limit, PExpr* hold_limit, pform_name_t* notifier, @@ -43,24 +43,10 @@ PRecRem::PRecRem(event_t reference_event, PRecRem::~PRecRem() { - delete setup_limit_; - delete hold_limit_; - - // Delete optional arguments - if (reference_event_.condition) delete reference_event_.condition; - if (data_event_.condition) delete data_event_.condition; - - if(notifier_) delete notifier_; - - if(timestamp_cond_) delete timestamp_cond_; - if(timecheck_cond_) delete timecheck_cond_; - - if(delayed_reference_) delete delayed_reference_; - if(delayed_data_) delete delayed_data_; } -PSetupHold::PSetupHold(event_t reference_event, - event_t data_event, +PSetupHold::PSetupHold(event_t* reference_event, + event_t* data_event, PExpr* setup_limit, PExpr* hold_limit, pform_name_t* notifier, @@ -83,18 +69,4 @@ PSetupHold::PSetupHold(event_t reference_event, PSetupHold::~PSetupHold() { - delete setup_limit_; - delete hold_limit_; - - // Delete optional arguments - if (reference_event_.condition) delete reference_event_.condition; - if (data_event_.condition) delete data_event_.condition; - - if(notifier_) delete notifier_; - - if(timestamp_cond_) delete timestamp_cond_; - if(timecheck_cond_) delete timecheck_cond_; - - if(delayed_reference_) delete delayed_reference_; - if(delayed_data_) delete delayed_data_; } diff --git a/PTimingCheck.h b/PTimingCheck.h index a716db122..cf1dfda4c 100644 --- a/PTimingCheck.h +++ b/PTimingCheck.h @@ -22,6 +22,7 @@ # include "LineInfo.h" # include "PExpr.h" # include "pform_types.h" +# include /* * The PTimingCheck is the base class for all timing checks @@ -36,7 +37,7 @@ class PTimingCheck : public LineInfo { bool posedge; bool negedge; std::vector edges; - PExpr* condition; + std::unique_ptr condition; }; // This struct is used to parse the optional arguments @@ -65,8 +66,8 @@ class PRecRem : public PTimingCheck { public: - PRecRem(event_t reference_event, - event_t data_event, + PRecRem(event_t* reference_event, + event_t* data_event, PExpr* setup_limit, PExpr* hold_limit, pform_name_t* notifier, @@ -82,19 +83,19 @@ class PRecRem : public PTimingCheck { void dump(std::ostream&out, unsigned ind) const override; private: - event_t reference_event_; // hierarchy_identifier - event_t data_event_; + std::unique_ptr reference_event_; + std::unique_ptr data_event_; - PExpr* setup_limit_; - PExpr* hold_limit_; + std::unique_ptr setup_limit_; + std::unique_ptr hold_limit_; - pform_name_t* notifier_; + std::unique_ptr notifier_; - pform_name_t* timestamp_cond_; - pform_name_t* timecheck_cond_; + std::unique_ptr timestamp_cond_; + std::unique_ptr timecheck_cond_; - pform_name_t* delayed_reference_; - pform_name_t* delayed_data_; + std::unique_ptr delayed_reference_; + std::unique_ptr delayed_data_; }; /* @@ -103,8 +104,8 @@ class PRecRem : public PTimingCheck { class PSetupHold : public PTimingCheck { public: - PSetupHold(event_t reference_event, - event_t data_event, + PSetupHold(event_t* reference_event, + event_t* data_event, PExpr* setup_limit, PExpr* hold_limit, pform_name_t* notifier, @@ -120,19 +121,19 @@ class PSetupHold : public PTimingCheck { void dump(std::ostream&out, unsigned ind) const override; private: - event_t reference_event_; // hierarchy_identifier - event_t data_event_; + std::unique_ptr reference_event_; + std::unique_ptr data_event_; - PExpr* setup_limit_; - PExpr* hold_limit_; + std::unique_ptr setup_limit_; + std::unique_ptr hold_limit_; - pform_name_t* notifier_; + std::unique_ptr notifier_; - pform_name_t* timestamp_cond_; - pform_name_t* timecheck_cond_; + std::unique_ptr timestamp_cond_; + std::unique_ptr timecheck_cond_; - pform_name_t* delayed_reference_; - pform_name_t* delayed_data_; + std::unique_ptr delayed_reference_; + std::unique_ptr delayed_data_; }; #endif /* IVL_PTimingCheck_H */ diff --git a/elaborate.cc b/elaborate.cc index bebc6399c..c5a530666 100644 --- a/elaborate.cc +++ b/elaborate.cc @@ -6321,15 +6321,15 @@ void PRecRem::elaborate(Design*des, NetScope*scope) const { if (debug_elaborate) { cerr << get_fileline() << ": PRecRem::elaborate: Assigning " - << reference_event_.name + << reference_event_->name << " to " << *delayed_reference_ << endl; } - NetNet*sig = des->find_signal(scope, reference_event_.name); + NetNet*sig = des->find_signal(scope, reference_event_->name); if (sig == nullptr) { cerr << get_fileline() << ": error: Cannot find: " - << reference_event_.name << endl; + << reference_event_->name << endl; des->errors += 1; return; } @@ -6350,15 +6350,15 @@ void PRecRem::elaborate(Design*des, NetScope*scope) const { if (debug_elaborate) { cerr << get_fileline() << ": PRecRem::elaborate: Assigning " - << data_event_.name + << data_event_->name << " to " << *delayed_data_ << endl; } - NetNet*sig = des->find_signal(scope, data_event_.name); + NetNet*sig = des->find_signal(scope, data_event_->name); if (sig == nullptr) { cerr << get_fileline() << ": error: Cannot find: " - << data_event_.name << endl; + << data_event_->name << endl; des->errors += 1; return; } @@ -6388,15 +6388,15 @@ void PSetupHold::elaborate(Design*des, NetScope*scope) const { if (debug_elaborate) { cerr << get_fileline() << ": PSetupHold::elaborate: Assigning" - << reference_event_.name + << reference_event_->name << " to " << *delayed_reference_ << endl; } - NetNet*sig = des->find_signal(scope, reference_event_.name); + NetNet*sig = des->find_signal(scope, reference_event_->name); if (sig == nullptr) { cerr << get_fileline() << ": error: Cannot find: " - << reference_event_.name << endl; + << reference_event_->name << endl; des->errors += 1; return; } @@ -6417,15 +6417,15 @@ void PSetupHold::elaborate(Design*des, NetScope*scope) const { if (debug_elaborate) { cerr << get_fileline() << ": PSetupHold::elaborate: Assigning" - << reference_event_.name - << " to " << *delayed_reference_ << endl; + << data_event_->name + << " to " << *delayed_data_ << endl; } - NetNet*sig = des->find_signal(scope, data_event_.name); + NetNet*sig = des->find_signal(scope, data_event_->name); if (sig == nullptr) { cerr << get_fileline() << ": error: Cannot find: " - << data_event_.name << endl; + << data_event_->name << endl; des->errors += 1; return; } @@ -6518,10 +6518,8 @@ bool Module::elaborate(Design*des, NetScope*scope) const bool result_flag = true; // Elaborate within the generate blocks. - typedef list::const_iterator generate_it_t; - for (generate_it_t cur = generate_schemes.begin() - ; cur != generate_schemes.end() ; ++ cur ) { - (*cur)->elaborate(des, scope); + for (const auto cur : generate_schemes) { + cur->elaborate(des, scope); } // Elaborate functions. @@ -6540,10 +6538,8 @@ bool Module::elaborate(Design*des, NetScope*scope) const // complex. const list&gl = get_gates(); - for (list::const_iterator gt = gl.begin() - ; gt != gl.end() ; ++ gt ) { - - (*gt)->elaborate(des, scope); + for (const auto gt : gl) { + gt->elaborate(des, scope); } // Elaborate the variable initialization statements, making a @@ -6556,23 +6552,18 @@ bool Module::elaborate(Design*des, NetScope*scope) const result_flag &= elaborate_behaviors_(des, scope); // Elaborate the specify paths of the module. - for (list::const_iterator sp = specify_paths.begin() - ; sp != specify_paths.end() ; ++ sp ) { - - (*sp)->elaborate(des, scope); + for (const auto sp : specify_paths) { + sp->elaborate(des, scope); } // Elaborate the timing checks of the module. - for (list::const_iterator tc = timing_checks.begin() - ; tc != timing_checks.end() ; ++ tc ) { - - (*tc)->elaborate(des, scope); + for (const auto tc : timing_checks) { + tc->elaborate(des, scope); } // Elaborate the elaboration tasks. - for (list::const_iterator et = elab_tasks.begin() - ; et != elab_tasks.end() ; ++ et ) { - result_flag &= (*et)->elaborate_elab(des, scope); + for (const auto et : elab_tasks) { + result_flag &= et->elaborate_elab(des, scope); } return result_flag; diff --git a/parse.y b/parse.y index d7b63559b..5ad95b7c0 100644 --- a/parse.y +++ b/parse.y @@ -33,6 +33,7 @@ # include # include # include +# include using namespace std; @@ -5970,11 +5971,9 @@ specify_item cerr << endl; } - PRecRem*recrem = pform_make_recrem(@1, *$3, *$5, $7, $9, $10); - pform_module_timing_check((PTimingCheck*)recrem); + PRecRem*recrem = pform_make_recrem(@1, $3, $5, $7, $9, $10); + pform_module_timing_check(recrem); - delete $3; // spec_reference_event - delete $5; // spec_reference_event delete $10; // setuphold_recrem_opt_notifier } | K_Sremoval '(' spec_reference_event ',' spec_reference_event @@ -6009,11 +6008,9 @@ specify_item cerr << endl; } - PSetupHold*setuphold = pform_make_setuphold(@1, *$3, *$5, $7, $9, $10); - pform_module_timing_check((PTimingCheck*)setuphold); + PSetupHold*setuphold = pform_make_setuphold(@1, $3, $5, $7, $9, $10); + pform_module_timing_check(setuphold); - delete $3; // spec_reference_event - delete $5; // spec_reference_event delete $10; // setuphold_recrem_opt_notifier } | K_Sskew '(' spec_reference_event ',' spec_reference_event @@ -6267,7 +6264,7 @@ spec_reference_event event->name = *$1; event->posedge = false; event->negedge = false; - event->condition = $3; + event->condition = std::unique_ptr($3); delete $1; $$ = event; } @@ -6294,7 +6291,7 @@ spec_reference_event event->name = *$2; event->posedge = true; event->negedge = false; - event->condition = $4; + event->condition = std::unique_ptr($4); delete $2; $$ = event; } @@ -6303,7 +6300,7 @@ spec_reference_event event->name = *$2; event->posedge = false; event->negedge = true; - event->condition = $4; + event->condition = std::unique_ptr($4); delete $2; $$ = event; } @@ -6323,7 +6320,7 @@ spec_reference_event event->posedge = false; event->negedge = false; // TODO add edge descriptors - event->condition = $7; + event->condition = std::unique_ptr($7); delete $5; $$ = event; } @@ -6526,14 +6523,14 @@ timeskew_fullskew_opt_remain_active_flag spec_notifier_opt : /* empty */ - { $$ = 0; } + { $$ = nullptr; } | spec_notifier { $$ = $1; } ; spec_notifier : ',' - { $$ = 0; } + { $$ = nullptr; } | ',' hierarchy_identifier { $$ = $2; } ; diff --git a/pform.cc b/pform.cc index 7b60d15f3..3957019ed 100644 --- a/pform.cc +++ b/pform.cc @@ -3114,8 +3114,8 @@ extern void pform_module_specify_path(PSpecPath*obj) * Timing checks. */ extern PRecRem* pform_make_recrem(const struct vlltype&li, - PTimingCheck::event_t&reference_event, - PTimingCheck::event_t&data_event, + PTimingCheck::event_t*reference_event, + PTimingCheck::event_t*data_event, PExpr*setup_limit, PExpr*hold_limit, PTimingCheck::optional_args_t* args) @@ -3139,8 +3139,8 @@ extern void pform_module_specify_path(PSpecPath*obj) return recrem; } extern PSetupHold* pform_make_setuphold(const struct vlltype&li, - PTimingCheck::event_t&reference_event, - PTimingCheck::event_t&data_event, + PTimingCheck::event_t*reference_event, + PTimingCheck::event_t*data_event, PExpr*setup_limit, PExpr*hold_limit, PTimingCheck::optional_args_t* args) @@ -3166,7 +3166,7 @@ extern PSetupHold* pform_make_setuphold(const struct vlltype&li, extern void pform_module_timing_check(PTimingCheck*obj) { - if (obj == 0) + if (!obj) return; pform_cur_module.front()->timing_checks.push_back(obj); diff --git a/pform.h b/pform.h index 51038d1b1..7eeb93621 100644 --- a/pform.h +++ b/pform.h @@ -434,15 +434,15 @@ extern void pform_module_specify_path(PSpecPath*obj); * Functions related to timing checks. */ extern PRecRem* pform_make_recrem(const struct vlltype&li, - PTimingCheck::event_t&reference_event, - PTimingCheck::event_t&data_event, + PTimingCheck::event_t*reference_event, + PTimingCheck::event_t*data_event, PExpr*setup_limit, PExpr*hold_limit, PTimingCheck::optional_args_t* args ); extern PSetupHold* pform_make_setuphold(const struct vlltype&li, - PTimingCheck::event_t&reference_event, - PTimingCheck::event_t&data_event, + PTimingCheck::event_t*reference_event, + PTimingCheck::event_t*data_event, PExpr*setup_limit, PExpr*hold_limit, PTimingCheck::optional_args_t* args diff --git a/pform_dump.cc b/pform_dump.cc index 86ab8a62d..4f5ba286e 100644 --- a/pform_dump.cc +++ b/pform_dump.cc @@ -1718,10 +1718,8 @@ void Module::dump_timingchecks_(ostream&out, unsigned indent) const { cout << "dump_timingchecks_" << endl; - typedef list::const_iterator tcheck_iter_t; - for (tcheck_iter_t cur = timing_checks.begin() - ; cur != timing_checks.end() ; ++ cur ) { - (*cur)->dump(out, indent); + for (const auto cur : timing_checks) { + cur->dump(out, indent); } }