From bb02da0319c059464b8c8f34517e9ec6700e76b4 Mon Sep 17 00:00:00 2001 From: steve Date: Tue, 27 Feb 2007 06:10:16 +0000 Subject: [PATCH] Better error message around repeat concatenation syntax. --- elab_net.cc | 7 +++++-- parse.y | 19 ++++++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/elab_net.cc b/elab_net.cc index 0344fb076..b1150031f 100644 --- a/elab_net.cc +++ b/elab_net.cc @@ -17,7 +17,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifdef HAVE_CVS_IDENT -#ident "$Id: elab_net.cc,v 1.199 2007/02/26 19:49:48 steve Exp $" +#ident "$Id: elab_net.cc,v 1.200 2007/02/27 06:10:16 steve Exp $" #endif # include "config.h" @@ -1417,7 +1417,7 @@ NetNet* PEConcat::elaborate_net(Design*des, NetScope*scope, NetEConst*erep = dynamic_cast(etmp); if (erep == 0) { - cerr << get_line() << ": internal error: Unable to " + cerr << get_line() << ": error: Unable to " << "evaluate constant repeat expression." << endl; des->errors += 1; return 0; @@ -2909,6 +2909,9 @@ NetNet* PEUnary::elaborate_net(Design*des, NetScope*scope, /* * $Log: elab_net.cc,v $ + * Revision 1.200 2007/02/27 06:10:16 steve + * Better error message around repeat concatenation syntax. + * * Revision 1.199 2007/02/26 19:49:48 steve * Spelling fixes (larry doolittle) * diff --git a/parse.y b/parse.y index f7093b5a8..1bd801886 100644 --- a/parse.y +++ b/parse.y @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifdef HAVE_CVS_IDENT -#ident "$Id: parse.y,v 1.227 2007/02/13 04:39:25 steve Exp $" +#ident "$Id: parse.y,v 1.228 2007/02/27 06:10:16 steve Exp $" #endif # include "config.h" @@ -1092,18 +1092,23 @@ expr_primary } | '{' expression '{' expression_list '}' '}' { PExpr*rep = $2; - if (!pform_expression_is_constant($2)) { - yyerror(@2, "error: Repeat expression " - "must be constant."); - delete rep; - rep = 0; - } PEConcat*tmp = new PEConcat(*$4, rep); tmp->set_file(@1.text); tmp->set_lineno(@1.first_line); delete $4; $$ = tmp; } + | '{' expression '{' expression_list '}' error '}' + { PExpr*rep = $2; + PEConcat*tmp = new PEConcat(*$4, rep); + tmp->set_file(@1.text); + tmp->set_lineno(@1.first_line); + delete $4; + $$ = tmp; + yyerror(@5, "error: Syntax error between internal '}' " + "and closing '}' of repeat concatenation."); + yyerrok; + } ; /* A function_item is either a block item (i.e. a reg or integer