Use more C++11 features

This commit is contained in:
mole99 2023-07-12 15:10:23 +02:00
parent 7f5b8d49eb
commit 6b2990cfec
7 changed files with 73 additions and 114 deletions

View File

@ -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_;
}

View File

@ -22,6 +22,7 @@
# include "LineInfo.h"
# include "PExpr.h"
# include "pform_types.h"
# include <memory>
/*
* The PTimingCheck is the base class for all timing checks
@ -36,7 +37,7 @@ class PTimingCheck : public LineInfo {
bool posedge;
bool negedge;
std::vector<EdgeType> edges;
PExpr* condition;
std::unique_ptr<PExpr> 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<event_t> reference_event_;
std::unique_ptr<event_t> data_event_;
PExpr* setup_limit_;
PExpr* hold_limit_;
std::unique_ptr<PExpr> setup_limit_;
std::unique_ptr<PExpr> hold_limit_;
pform_name_t* notifier_;
std::unique_ptr<pform_name_t> notifier_;
pform_name_t* timestamp_cond_;
pform_name_t* timecheck_cond_;
std::unique_ptr<pform_name_t> timestamp_cond_;
std::unique_ptr<pform_name_t> timecheck_cond_;
pform_name_t* delayed_reference_;
pform_name_t* delayed_data_;
std::unique_ptr<pform_name_t> delayed_reference_;
std::unique_ptr<pform_name_t> 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<event_t> reference_event_;
std::unique_ptr<event_t> data_event_;
PExpr* setup_limit_;
PExpr* hold_limit_;
std::unique_ptr<PExpr> setup_limit_;
std::unique_ptr<PExpr> hold_limit_;
pform_name_t* notifier_;
std::unique_ptr<pform_name_t> notifier_;
pform_name_t* timestamp_cond_;
pform_name_t* timecheck_cond_;
std::unique_ptr<pform_name_t> timestamp_cond_;
std::unique_ptr<pform_name_t> timecheck_cond_;
pform_name_t* delayed_reference_;
pform_name_t* delayed_data_;
std::unique_ptr<pform_name_t> delayed_reference_;
std::unique_ptr<pform_name_t> delayed_data_;
};
#endif /* IVL_PTimingCheck_H */

View File

@ -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<PGenerate*>::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<PGate*>&gl = get_gates();
for (list<PGate*>::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<PSpecPath*>::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<PTimingCheck*>::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<PCallTask*>::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;

25
parse.y
View File

@ -33,6 +33,7 @@
# include <stack>
# include <cstring>
# include <sstream>
# include <memory>
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<PExpr>($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<PExpr>($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<PExpr>($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<PExpr>($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; }
;

View File

@ -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);

View File

@ -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

View File

@ -1718,10 +1718,8 @@ void Module::dump_timingchecks_(ostream&out, unsigned indent) const
{
cout << "dump_timingchecks_" << endl;
typedef list<PTimingCheck*>::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);
}
}