verilog: move attr from simple_behav_stmt to its children to attach

This commit is contained in:
Eddie Hung 2020-05-21 09:46:26 -07:00
parent 95dcd7e785
commit c5a9abba11
1 changed files with 17 additions and 13 deletions

View File

@ -2203,32 +2203,36 @@ assert_property:
}; };
simple_behavioral_stmt: simple_behavioral_stmt:
lvalue '=' delay expr { attr lvalue '=' delay expr {
AstNode *node = new AstNode(AST_ASSIGN_EQ, $1, $4); AstNode *node = new AstNode(AST_ASSIGN_EQ, $2, $5);
ast_stack.back()->children.push_back(node); ast_stack.back()->children.push_back(node);
SET_AST_NODE_LOC(node, @1, @4); SET_AST_NODE_LOC(node, @2, @5);
append_attr(node, $1);
} | } |
lvalue TOK_INCREMENT { attr lvalue TOK_INCREMENT {
AstNode *node = new AstNode(AST_ASSIGN_EQ, $1, new AstNode(AST_ADD, $1->clone(), AstNode::mkconst_int(1, true))); AstNode *node = new AstNode(AST_ASSIGN_EQ, $2, new AstNode(AST_ADD, $2->clone(), AstNode::mkconst_int(1, true)));
ast_stack.back()->children.push_back(node); ast_stack.back()->children.push_back(node);
SET_AST_NODE_LOC(node, @1, @2); SET_AST_NODE_LOC(node, @2, @3);
append_attr(node, $1);
} | } |
lvalue TOK_DECREMENT { attr lvalue TOK_DECREMENT {
AstNode *node = new AstNode(AST_ASSIGN_EQ, $1, new AstNode(AST_SUB, $1->clone(), AstNode::mkconst_int(1, true))); AstNode *node = new AstNode(AST_ASSIGN_EQ, $2, new AstNode(AST_SUB, $2->clone(), AstNode::mkconst_int(1, true)));
ast_stack.back()->children.push_back(node); ast_stack.back()->children.push_back(node);
SET_AST_NODE_LOC(node, @1, @2); SET_AST_NODE_LOC(node, @2, @3);
append_attr(node, $1);
} | } |
lvalue OP_LE delay expr { attr lvalue OP_LE delay expr {
AstNode *node = new AstNode(AST_ASSIGN_LE, $1, $4); AstNode *node = new AstNode(AST_ASSIGN_LE, $2, $5);
ast_stack.back()->children.push_back(node); ast_stack.back()->children.push_back(node);
SET_AST_NODE_LOC(node, @1, @4); SET_AST_NODE_LOC(node, @2, @5);
append_attr(node, $1);
}; };
// this production creates the obligatory if-else shift/reduce conflict // this production creates the obligatory if-else shift/reduce conflict
behavioral_stmt: behavioral_stmt:
defattr | assert | wire_decl | param_decl | localparam_decl | typedef_decl | defattr | assert | wire_decl | param_decl | localparam_decl | typedef_decl |
non_opt_delay behavioral_stmt | non_opt_delay behavioral_stmt |
attr simple_behavioral_stmt ';' | simple_behavioral_stmt ';' |
attr ';' { attr ';' {
free_attr($1); free_attr($1);
} | } |