@@ -840,11 +840,13 @@ def p_assignment(self, p):
840840 'assignment : ASSIGN lvalue EQUALS rvalue SEMICOLON'
841841 p [0 ] = Assign (p [2 ], p [4 ], lineno = p .lineno (1 ))
842842 p .set_lineno (0 , p .lineno (1 ))
843+ p [0 ].end_lineno = p .lineno (5 )
843844
844845 def p_assignment_delay (self , p ):
845846 'assignment : ASSIGN delays lvalue EQUALS delays rvalue SEMICOLON'
846847 p [0 ] = Assign (p [3 ], p [6 ], p [2 ], p [5 ], lineno = p .lineno (1 ))
847848 p .set_lineno (0 , p .lineno (1 ))
849+ p [0 ].end_lineno = p .lineno (7 )
848850
849851 # --------------------------------------------------------------------------
850852 def p_lpartselect_lpointer (self , p ):
@@ -1299,21 +1301,25 @@ def p_always(self, p):
12991301 'always : ALWAYS senslist always_statement'
13001302 p [0 ] = Always (p [2 ], p [3 ], lineno = p .lineno (1 ))
13011303 p .set_lineno (0 , p .lineno (1 ))
1304+ p [0 ].end_lineno = p [3 ].end_lineno
13021305
13031306 def p_always_ff (self , p ):
13041307 'always_ff : ALWAYS_FF senslist always_statement'
13051308 p [0 ] = AlwaysFF (p [2 ], p [3 ], lineno = p .lineno (1 ))
13061309 p .set_lineno (0 , p .lineno (1 ))
1310+ p [0 ].end_lineno = p [3 ].end_lineno
13071311
13081312 def p_always_comb (self , p ):
13091313 'always_comb : ALWAYS_COMB senslist always_statement'
13101314 p [0 ] = AlwaysComb (p [2 ], p [3 ], lineno = p .lineno (1 ))
13111315 p .set_lineno (0 , p .lineno (1 ))
1316+ p [0 ].end_lineno = p [3 ].end_lineno
13121317
13131318 def p_always_latch (self , p ):
13141319 'always_latch : ALWAYS_LATCH senslist always_statement'
13151320 p [0 ] = AlwaysLatch (p [2 ], p [3 ], lineno = p .lineno (1 ))
13161321 p .set_lineno (0 , p .lineno (1 ))
1322+ p [0 ].end_lineno = p [3 ].end_lineno
13171323
13181324 def p_sens_egde_paren (self , p ):
13191325 'senslist : AT LPAREN edgesigs RPAREN'
@@ -1449,6 +1455,7 @@ def p_blocking_substitution(self, p):
14491455 'blocking_substitution : delays lvalue EQUALS delays rvalue SEMICOLON'
14501456 p [0 ] = BlockingSubstitution (p [2 ], p [5 ], p [1 ], p [4 ], lineno = p .lineno (2 ))
14511457 p .set_lineno (0 , p .lineno (2 ))
1458+ p [0 ].end_lineno = p .lineno (6 )
14521459
14531460 def p_blocking_substitution_base (self , p ):
14541461 'blocking_substitution_base : delays lvalue EQUALS delays rvalue'
@@ -1460,6 +1467,7 @@ def p_nonblocking_substitution(self, p):
14601467 p [0 ] = NonblockingSubstitution (
14611468 p [2 ], p [5 ], p [1 ], p [4 ], lineno = p .lineno (2 ))
14621469 p .set_lineno (0 , p .lineno (2 ))
1470+ p [0 ].end_lineno = p .lineno (6 )
14631471
14641472 # --------------------------------------------------------------------------
14651473 def p_delays (self , p ):
@@ -1493,11 +1501,13 @@ def p_block(self, p):
14931501 'block : BEGIN block_statements END'
14941502 p [0 ] = Block (p [2 ], lineno = p .lineno (1 ))
14951503 p .set_lineno (0 , p .lineno (1 ))
1504+ p [0 ].end_lineno = p .lineno (3 )
14961505
14971506 def p_block_empty (self , p ):
14981507 'block : BEGIN END'
14991508 p [0 ] = Block ((), lineno = p .lineno (1 ))
15001509 p .set_lineno (0 , p .lineno (1 ))
1510+ p [0 ].end_lineno = p .lineno (2 )
15011511
15021512 def p_block_statements (self , p ):
15031513 'block_statements : block_statements block_statement'
@@ -1519,11 +1529,13 @@ def p_namedblock(self, p):
15191529 'namedblock : BEGIN COLON ID namedblock_statements END'
15201530 p [0 ] = Block (p [4 ], p [3 ], lineno = p .lineno (1 ))
15211531 p .set_lineno (0 , p .lineno (1 ))
1532+ p [0 ].end_lineno = p .lineno (5 )
15221533
15231534 def p_namedblock_empty (self , p ):
15241535 'namedblock : BEGIN COLON ID END'
15251536 p [0 ] = Block ((), p [3 ], lineno = p .lineno (1 ))
15261537 p .set_lineno (0 , p .lineno (1 ))
1538+ p [0 ].end_lineno = p .lineno (4 )
15271539
15281540 def p_namedblock_statements (self , p ):
15291541 'namedblock_statements : namedblock_statements namedblock_statement'
@@ -1568,21 +1580,25 @@ def p_if_statement(self, p):
15681580 'if_statement : IF LPAREN cond RPAREN true_statement ELSE else_statement'
15691581 p [0 ] = IfStatement (p [3 ], p [5 ], p [7 ], lineno = p .lineno (1 ))
15701582 p .set_lineno (0 , p .lineno (1 ))
1583+ p [0 ].end_lineno = p [7 ].end_lineno
15711584
15721585 def p_if_statement_woelse (self , p ):
15731586 'if_statement : IF LPAREN cond RPAREN true_statement'
15741587 p [0 ] = IfStatement (p [3 ], p [5 ], None , lineno = p .lineno (1 ))
15751588 p .set_lineno (0 , p .lineno (1 ))
1589+ p [0 ].end_lineno = p [5 ].end_lineno
15761590
15771591 def p_if_statement_delay (self , p ):
15781592 'if_statement : delays IF LPAREN cond RPAREN true_statement ELSE else_statement'
15791593 p [0 ] = IfStatement (p [4 ], p [6 ], p [8 ], lineno = p .lineno (2 ))
15801594 p .set_lineno (0 , p .lineno (2 ))
1595+ p [0 ].end_lineno = p [8 ].end_lineno
15811596
15821597 def p_if_statement_woelse_delay (self , p ):
15831598 'if_statement : delays IF LPAREN cond RPAREN true_statement'
15841599 p [0 ] = IfStatement (p [4 ], p [6 ], None , lineno = p .lineno (2 ))
15851600 p .set_lineno (0 , p .lineno (2 ))
1601+ p [0 ].end_lineno = p [6 ].end_lineno
15861602
15871603 def p_cond (self , p ):
15881604 'cond : expression'
@@ -1660,21 +1676,25 @@ def p_case_statement(self, p):
16601676 'case_statement : CASE LPAREN case_comp RPAREN casecontent_statements ENDCASE'
16611677 p [0 ] = CaseStatement (p [3 ], p [5 ], lineno = p .lineno (1 ))
16621678 p .set_lineno (0 , p .lineno (1 ))
1679+ p [0 ].end_lineno = p .lineno (6 )
16631680
16641681 def p_casex_statement (self , p ):
16651682 'casex_statement : CASEX LPAREN case_comp RPAREN casecontent_statements ENDCASE'
16661683 p [0 ] = CasexStatement (p [3 ], p [5 ], lineno = p .lineno (1 ))
16671684 p .set_lineno (0 , p .lineno (1 ))
1685+ p [0 ].end_lineno = p .lineno (6 )
16681686
16691687 def p_casez_statement (self , p ):
16701688 'casez_statement : CASEZ LPAREN case_comp RPAREN casecontent_statements ENDCASE'
16711689 p [0 ] = CasezStatement (p [3 ], p [5 ], lineno = p .lineno (1 ))
16721690 p .set_lineno (0 , p .lineno (1 ))
1691+ p [0 ].end_lineno = p .lineno (6 )
16731692
16741693 def p_unique_case_statement (self , p ):
16751694 'unique_case_statement : UNIQUE CASE LPAREN case_comp RPAREN casecontent_statements ENDCASE'
16761695 p [0 ] = UniqueCaseStatement (p [3 ], p [5 ], lineno = p .lineno (1 ))
16771696 p .set_lineno (0 , p .lineno (1 ))
1697+ p [0 ].end_lineno = p .lineno (7 )
16781698
16791699 def p_case_comp (self , p ):
16801700 'case_comp : expression'
@@ -1760,6 +1780,7 @@ def p_instance(self, p):
17601780 p [0 ] = InstanceList (p [1 ], p [2 ], tuple (
17611781 instancelist ), lineno = p .lineno (1 ))
17621782 p .set_lineno (0 , p .lineno (1 ))
1783+ p [0 ].end_lineno = p .lineno (4 )
17631784
17641785 def p_instance_or (self , p ):
17651786 'instance : SENS_OR parameterlist instance_bodylist SEMICOLON'
@@ -1770,6 +1791,7 @@ def p_instance_or(self, p):
17701791 p [0 ] = InstanceList (p [1 ], p [2 ], tuple (
17711792 instancelist ), lineno = p .lineno (1 ))
17721793 p .set_lineno (0 , p .lineno (1 ))
1794+ p [0 ].end_lineno = p .lineno (4 )
17731795
17741796 def p_instance_bodylist (self , p ):
17751797 'instance_bodylist : instance_bodylist COMMA instance_body'
@@ -1799,6 +1821,7 @@ def p_instance_noname(self, p):
17991821 (), instance_array , lineno = p .lineno (1 )))
18001822 p [0 ] = InstanceList (p [1 ], (), tuple (instancelist ), lineno = p .lineno (1 ))
18011823 p .set_lineno (0 , p .lineno (1 ))
1824+ p [0 ].end_lineno = p .lineno (3 )
18021825
18031826 def p_instance_or_noname (self , p ):
18041827 'instance : SENS_OR instance_bodylist_noname SEMICOLON'
@@ -1808,6 +1831,7 @@ def p_instance_or_noname(self, p):
18081831 (), instance_array , lineno = p .lineno (1 )))
18091832 p [0 ] = InstanceList (p [1 ], (), tuple (instancelist ), lineno = p .lineno (1 ))
18101833 p .set_lineno (0 , p .lineno (1 ))
1834+ p [0 ].end_lineno = p .lineno (3 )
18111835
18121836 def p_instance_bodylist_noname (self , p ):
18131837 'instance_bodylist_noname : instance_bodylist_noname COMMA instance_body_noname'
@@ -1953,6 +1977,7 @@ def p_generate(self, p):
19531977 'generate : GENERATE generate_items ENDGENERATE'
19541978 p [0 ] = GenerateStatement (p [2 ], lineno = p .lineno (1 ))
19551979 p .set_lineno (0 , p .lineno (1 ))
1980+ p [0 ].end_lineno = p .lineno (3 )
19561981
19571982 def p_generate_items_empty (self , p ):
19581983 'generate_items : empty'
@@ -1981,11 +2006,13 @@ def p_generate_block(self, p):
19812006 'generate_block : BEGIN generate_items END'
19822007 p [0 ] = Block (p [2 ], lineno = p .lineno (1 ))
19832008 p .set_lineno (0 , p .lineno (1 ))
2009+ p [0 ].end_lineno = p .lineno (3 )
19842010
19852011 def p_generate_named_block (self , p ):
19862012 'generate_block : BEGIN COLON ID generate_items END'
19872013 p [0 ] = Block (p [4 ], p [3 ], lineno = p .lineno (1 ))
19882014 p .set_lineno (0 , p .lineno (1 ))
2015+ p [0 ].end_lineno = p .lineno (5 )
19892016
19902017 def p_generate_if (self , p ):
19912018 'generate_if : IF LPAREN cond RPAREN gif_true_item ELSE gif_false_item'
@@ -2063,6 +2090,7 @@ def p_function(self, p):
20632090 'function : FUNCTION width ID SEMICOLON function_statement ENDFUNCTION'
20642091 p [0 ] = Function (p [3 ], p [2 ], p [5 ], lineno = p .lineno (1 ))
20652092 p .set_lineno (0 , p .lineno (1 ))
2093+ p [0 ].end_lineno = p .lineno (6 )
20662094
20672095 def p_function_nowidth (self , p ):
20682096 'function : FUNCTION ID SEMICOLON function_statement ENDFUNCTION'
@@ -2072,6 +2100,7 @@ def p_function_nowidth(self, p):
20722100 lineno = p .lineno (1 )),
20732101 p [4 ], lineno = p .lineno (1 ))
20742102 p .set_lineno (0 , p .lineno (1 ))
2103+ p [0 ].end_lineno = p .lineno (5 )
20752104
20762105 def p_function_integer (self , p ):
20772106 'function : FUNCTION INTEGER ID SEMICOLON function_statement ENDFUNCTION'
@@ -2081,6 +2110,7 @@ def p_function_integer(self, p):
20812110 lineno = p .lineno (1 )),
20822111 p [5 ], lineno = p .lineno (1 ))
20832112 p .set_lineno (0 , p .lineno (1 ))
2113+ p [0 ].end_lineno = p .lineno (6 )
20842114
20852115 def p_function_statement (self , p ):
20862116 'function_statement : funcvardecls function_calc'
@@ -2231,16 +2261,19 @@ def p_single_statement_delays(self, p):
22312261 p [0 ] = SingleStatement (DelayStatement (
22322262 p [2 ], lineno = p .lineno (1 )), lineno = p .lineno (1 ))
22332263 p .set_lineno (0 , p .lineno (1 ))
2264+ p [0 ].end_lineno = p .lineno (3 )
22342265
22352266 def p_single_statement_systemcall (self , p ):
22362267 'single_statement : systemcall SEMICOLON'
22372268 p [0 ] = SingleStatement (p [1 ], lineno = p .lineno (1 ))
22382269 p .set_lineno (0 , p .lineno (1 ))
2270+ p [0 ].end_lineno = p .lineno (2 )
22392271
22402272 def p_single_statement_disable (self , p ):
22412273 'single_statement : disable SEMICOLON'
22422274 p [0 ] = SingleStatement (p [1 ], lineno = p .lineno (1 ))
22432275 p .set_lineno (0 , p .lineno (1 ))
2276+ p [0 ].end_lineno = p .lineno (2 )
22442277
22452278 # fix me: to support task-call-statement
22462279 # def p_single_statement_taskcall(self, p):
0 commit comments