Fixed brojen $error()/$info/$warning() on non-generate blocks

(within always/initial blocks)
This commit is contained in:
Udi Finkelstein 2019-06-11 02:52:06 +03:00
parent a91ea6612a
commit 4b56f6646d
2 changed files with 13 additions and 3 deletions

View File

@ -313,7 +313,7 @@ supply1 { return TOK_SUPPLY1; }
"$"(info|warning|error|fatal) { "$"(info|warning|error|fatal) {
frontend_verilog_yylval.string = new std::string(yytext); frontend_verilog_yylval.string = new std::string(yytext);
return TOK_ELAB_TASK; return TOK_MSG_TASKS;
} }
"$signed" { return TOK_TO_SIGNED; } "$signed" { return TOK_TO_SIGNED; }

View File

@ -133,7 +133,7 @@ struct specify_rise_fall {
} }
%token <string> TOK_STRING TOK_ID TOK_CONSTVAL TOK_REALVAL TOK_PRIMITIVE %token <string> TOK_STRING TOK_ID TOK_CONSTVAL TOK_REALVAL TOK_PRIMITIVE
%token <string> TOK_SVA_LABEL TOK_SPECIFY_OPER TOK_ELAB_TASK %token <string> TOK_SVA_LABEL TOK_SPECIFY_OPER TOK_MSG_TASKS
%token TOK_ASSERT TOK_ASSUME TOK_RESTRICT TOK_COVER TOK_FINAL %token TOK_ASSERT TOK_ASSUME TOK_RESTRICT TOK_COVER TOK_FINAL
%token ATTR_BEGIN ATTR_END DEFATTR_BEGIN DEFATTR_END %token ATTR_BEGIN ATTR_END DEFATTR_BEGIN DEFATTR_END
%token TOK_MODULE TOK_ENDMODULE TOK_PARAMETER TOK_LOCALPARAM TOK_DEFPARAM %token TOK_MODULE TOK_ENDMODULE TOK_PARAMETER TOK_LOCALPARAM TOK_DEFPARAM
@ -1881,6 +1881,16 @@ behavioral_stmt:
} opt_arg_list ';'{ } opt_arg_list ';'{
ast_stack.pop_back(); ast_stack.pop_back();
} | } |
TOK_MSG_TASKS attr {
AstNode *node = new AstNode(AST_TCALL);
node->str = *$1;
delete $1;
ast_stack.back()->children.push_back(node);
ast_stack.push_back(node);
append_attr(node, $2);
} opt_arg_list ';'{
ast_stack.pop_back();
} |
attr TOK_BEGIN opt_label { attr TOK_BEGIN opt_label {
AstNode *node = new AstNode(AST_BLOCK); AstNode *node = new AstNode(AST_BLOCK);
ast_stack.back()->children.push_back(node); ast_stack.back()->children.push_back(node);
@ -2177,7 +2187,7 @@ gen_stmt:
delete $6; delete $6;
ast_stack.pop_back(); ast_stack.pop_back();
} | } |
TOK_ELAB_TASK { TOK_MSG_TASKS {
AstNode *node = new AstNode(AST_TECALL); AstNode *node = new AstNode(AST_TECALL);
node->str = *$1; node->str = *$1;
delete $1; delete $1;