Add statement labels for immediate assertions
authorClifford Wolf <clifford@clifford.at>
Fri, 13 Apr 2018 09:52:28 +0000 (11:52 +0200)
committerClifford Wolf <clifford@clifford.at>
Fri, 13 Apr 2018 09:52:28 +0000 (11:52 +0200)
Signed-off-by: Clifford Wolf <clifford@clifford.at>
frontends/verilog/verilog_parser.y

index ef4e03a1a9e5eaf9b1f841e922db8c1d22601806..e803d8072e293082071913fafb42da190d570fd2 100644 (file)
@@ -1239,39 +1239,42 @@ opt_label:
 opt_property:
        TOK_PROPERTY | /* empty */;
 
+opt_stmt_label:
+       TOK_ID ':' | /* empty */;
+
 assert:
-       TOK_ASSERT opt_property '(' expr ')' ';' {
-               ast_stack.back()->children.push_back(new AstNode(assume_asserts_mode ? AST_ASSUME : AST_ASSERT, $4));
+       opt_stmt_label TOK_ASSERT opt_property '(' expr ')' ';' {
+               ast_stack.back()->children.push_back(new AstNode(assume_asserts_mode ? AST_ASSUME : AST_ASSERT, $5));
        } |
-       TOK_ASSUME opt_property '(' expr ')' ';' {
-               ast_stack.back()->children.push_back(new AstNode(AST_ASSUME, $4));
+       opt_stmt_label TOK_ASSUME opt_property '(' expr ')' ';' {
+               ast_stack.back()->children.push_back(new AstNode(AST_ASSUME, $5));
        } |
-       TOK_ASSERT opt_property '(' TOK_EVENTUALLY expr ')' ';' {
-               ast_stack.back()->children.push_back(new AstNode(assume_asserts_mode ? AST_FAIR : AST_LIVE, $5));
+       opt_stmt_label TOK_ASSERT opt_property '(' TOK_EVENTUALLY expr ')' ';' {
+               ast_stack.back()->children.push_back(new AstNode(assume_asserts_mode ? AST_FAIR : AST_LIVE, $6));
        } |
-       TOK_ASSUME opt_property '(' TOK_EVENTUALLY expr ')' ';' {
-               ast_stack.back()->children.push_back(new AstNode(AST_FAIR, $5));
+       opt_stmt_label TOK_ASSUME opt_property '(' TOK_EVENTUALLY expr ')' ';' {
+               ast_stack.back()->children.push_back(new AstNode(AST_FAIR, $6));
        } |
-       TOK_COVER opt_property '(' expr ')' ';' {
-               ast_stack.back()->children.push_back(new AstNode(AST_COVER, $4));
+       opt_stmt_label TOK_COVER opt_property '(' expr ')' ';' {
+               ast_stack.back()->children.push_back(new AstNode(AST_COVER, $5));
        } |
-       TOK_COVER opt_property '(' ')' ';' {
+       opt_stmt_label TOK_COVER opt_property '(' ')' ';' {
                ast_stack.back()->children.push_back(new AstNode(AST_COVER, AstNode::mkconst_int(1, false)));
        } |
-       TOK_COVER ';' {
+       opt_stmt_label TOK_COVER ';' {
                ast_stack.back()->children.push_back(new AstNode(AST_COVER, AstNode::mkconst_int(1, false)));
        } |
-       TOK_RESTRICT opt_property '(' expr ')' ';' {
+       opt_stmt_label TOK_RESTRICT opt_property '(' expr ')' ';' {
                if (norestrict_mode)
-                       delete $4;
+                       delete $5;
                else
-                       ast_stack.back()->children.push_back(new AstNode(AST_ASSUME, $4));
+                       ast_stack.back()->children.push_back(new AstNode(AST_ASSUME, $5));
        } |
-       TOK_RESTRICT opt_property '(' TOK_EVENTUALLY expr ')' ';' {
+       opt_stmt_label TOK_RESTRICT opt_property '(' TOK_EVENTUALLY expr ')' ';' {
                if (norestrict_mode)
-                       delete $5;
+                       delete $6;
                else
-                       ast_stack.back()->children.push_back(new AstNode(AST_FAIR, $5));
+                       ast_stack.back()->children.push_back(new AstNode(AST_FAIR, $6));
        };
 
 assert_property: