Use more C++11 features
This commit is contained in:
parent
7f5b8d49eb
commit
6b2990cfec
|
|
@ -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_;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
55
elaborate.cc
55
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<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
25
parse.y
|
|
@ -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; }
|
||||
;
|
||||
|
|
|
|||
10
pform.cc
10
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);
|
||||
|
|
|
|||
8
pform.h
8
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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue