diff --git a/Statement.cc b/Statement.cc index 12be8f209..e9d513bdd 100644 --- a/Statement.cc +++ b/Statement.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: Statement.cc,v 1.21 2000/05/11 23:37:26 steve Exp $" +#ident "$Id: Statement.cc,v 1.22 2000/07/26 05:08:07 steve Exp $" #endif # include "Statement.h" @@ -165,6 +165,14 @@ PDelayStatement::~PDelayStatement() { } +PDisable::PDisable(const string&sc) +: scope_(sc) +{ +} + +PDisable::~PDisable() +{ +} PEventStatement::PEventStatement(const svector&ee) : expr_(ee), statement_(0) @@ -252,6 +260,9 @@ PWhile::~PWhile() /* * $Log: Statement.cc,v $ + * Revision 1.22 2000/07/26 05:08:07 steve + * Parse disable statements to pform. + * * Revision 1.21 2000/05/11 23:37:26 steve * Add support for procedural continuous assignment. * diff --git a/Statement.h b/Statement.h index 502acb455..60ccfa3b1 100644 --- a/Statement.h +++ b/Statement.h @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: Statement.h,v 1.26 2000/05/11 23:37:26 steve Exp $" +#ident "$Id: Statement.h,v 1.27 2000/07/26 05:08:07 steve Exp $" #endif # include @@ -286,6 +286,23 @@ class PDelayStatement : public Statement { Statement*statement_; }; + +/* + * This represends the parsing of a disable statement. + */ +class PDisable : public Statement { + + public: + explicit PDisable(const string&sc); + ~PDisable(); + + virtual void dump(ostream&out, unsigned ind) const; + virtual NetProc* elaborate(Design*des, const string&path) const; + + private: + string scope_; +}; + /* * The event statement represents the event delay in behavioral * code. It comes from such things as: @@ -437,6 +454,9 @@ class PWhile : public Statement { /* * $Log: Statement.h,v $ + * Revision 1.27 2000/07/26 05:08:07 steve + * Parse disable statements to pform. + * * Revision 1.26 2000/05/11 23:37:26 steve * Add support for procedural continuous assignment. * diff --git a/elaborate.cc b/elaborate.cc index f78ac8572..eebcd4624 100644 --- a/elaborate.cc +++ b/elaborate.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: elaborate.cc,v 1.179 2000/07/22 22:09:03 steve Exp $" +#ident "$Id: elaborate.cc,v 1.180 2000/07/26 05:08:07 steve Exp $" #endif /* @@ -698,9 +698,10 @@ NetNet* PEConcat::elaborate_lnet(Design*des, const string&path) const NetProc* Statement::elaborate(Design*des, const string&path) const { - cerr << "internal error: elaborate: What kind of statement? " << + cerr << get_line() << ": internal error: elaborate: What kind of statement? " << typeid(*this).name() << endl; NetProc*cur = new NetProc; + des->errors += 1; return cur; } @@ -1629,6 +1630,17 @@ NetProc* PDelayStatement::elaborate(Design*des, const string&path) const } } +/* + * The disable statement is not yet supported. + */ +NetProc* PDisable::elaborate(Design*des, const string&path) const +{ + cerr << get_line() << ": sorry: disable not supported " << endl; + NetProc*cur = new NetProc; + des->errors += 1; + return cur; +} + /* * An event statement is an event delay of some sort, attached to a * statement. Some Verilog examples are: @@ -2477,6 +2489,9 @@ Design* elaborate(const map&modules, /* * $Log: elaborate.cc,v $ + * Revision 1.180 2000/07/26 05:08:07 steve + * Parse disable statements to pform. + * * Revision 1.179 2000/07/22 22:09:03 steve * Parse and elaborate timescale to scopes. * diff --git a/parse.y b/parse.y index b69c910e7..4193fd4f3 100644 --- a/parse.y +++ b/parse.y @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: parse.y,v 1.102 2000/07/07 04:53:54 steve Exp $" +#ident "$Id: parse.y,v 1.103 2000/07/26 05:08:07 steve Exp $" #endif # include "parse_misc.h" @@ -1901,18 +1901,22 @@ statement { PBlock*tmp = new PBlock(PBlock::BL_PAR); tmp->set_file(@1.text); tmp->set_lineno(@1.first_line); + delete $3; $$ = tmp; } - | K_disable IDENTIFIER ';' - { yyerror(@1, "sorry: disable statements not supported."); + | K_disable identifier ';' + { PDisable*tmp = new PDisable($2); + tmp->set_file(@1.text); + tmp->set_lineno(@1.first_line); delete $2; - $$ = 0; + $$ = tmp; } | K_TRIGGER IDENTIFIER ';' { PTrigger*tmp = new PTrigger($2); tmp->set_file(@2.text); tmp->set_lineno(@2.first_line); + delete $2; $$ = tmp; } | K_forever statement diff --git a/pform_dump.cc b/pform_dump.cc index f9f51d464..9a9b9164d 100644 --- a/pform_dump.cc +++ b/pform_dump.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) && !defined(macintosh) -#ident "$Id: pform_dump.cc,v 1.60 2000/05/23 16:03:13 steve Exp $" +#ident "$Id: pform_dump.cc,v 1.61 2000/07/26 05:08:07 steve Exp $" #endif /* @@ -509,6 +509,12 @@ void PDelayStatement::dump(ostream&out, unsigned ind) const } } +void PDisable::dump(ostream&out, unsigned ind) const +{ + out << setw(ind) << "" << "disable " << scope_ << "; /* " + << get_line() << " */" << endl; +} + void PEventStatement::dump(ostream&out, unsigned ind) const { out << setw(ind) << "" << "@(" << *(expr_[0]); @@ -774,6 +780,9 @@ void PUdp::dump(ostream&out) const /* * $Log: pform_dump.cc,v $ + * Revision 1.61 2000/07/26 05:08:07 steve + * Parse disable statements to pform. + * * Revision 1.60 2000/05/23 16:03:13 steve * Better parsing of expressions lists will empty expressoins. *