@@ -840,11 +840,13 @@ def p_assignment(self, p):
840
840
'assignment : ASSIGN lvalue EQUALS rvalue SEMICOLON'
841
841
p [0 ] = Assign (p [2 ], p [4 ], lineno = p .lineno (1 ))
842
842
p .set_lineno (0 , p .lineno (1 ))
843
+ p [0 ].end_lineno = p .lineno (5 )
843
844
844
845
def p_assignment_delay (self , p ):
845
846
'assignment : ASSIGN delays lvalue EQUALS delays rvalue SEMICOLON'
846
847
p [0 ] = Assign (p [3 ], p [6 ], p [2 ], p [5 ], lineno = p .lineno (1 ))
847
848
p .set_lineno (0 , p .lineno (1 ))
849
+ p [0 ].end_lineno = p .lineno (7 )
848
850
849
851
# --------------------------------------------------------------------------
850
852
def p_lpartselect_lpointer (self , p ):
@@ -1299,21 +1301,25 @@ def p_always(self, p):
1299
1301
'always : ALWAYS senslist always_statement'
1300
1302
p [0 ] = Always (p [2 ], p [3 ], lineno = p .lineno (1 ))
1301
1303
p .set_lineno (0 , p .lineno (1 ))
1304
+ p [0 ].end_lineno = p [3 ].end_lineno
1302
1305
1303
1306
def p_always_ff (self , p ):
1304
1307
'always_ff : ALWAYS_FF senslist always_statement'
1305
1308
p [0 ] = AlwaysFF (p [2 ], p [3 ], lineno = p .lineno (1 ))
1306
1309
p .set_lineno (0 , p .lineno (1 ))
1310
+ p [0 ].end_lineno = p [3 ].end_lineno
1307
1311
1308
1312
def p_always_comb (self , p ):
1309
1313
'always_comb : ALWAYS_COMB senslist always_statement'
1310
1314
p [0 ] = AlwaysComb (p [2 ], p [3 ], lineno = p .lineno (1 ))
1311
1315
p .set_lineno (0 , p .lineno (1 ))
1316
+ p [0 ].end_lineno = p [3 ].end_lineno
1312
1317
1313
1318
def p_always_latch (self , p ):
1314
1319
'always_latch : ALWAYS_LATCH senslist always_statement'
1315
1320
p [0 ] = AlwaysLatch (p [2 ], p [3 ], lineno = p .lineno (1 ))
1316
1321
p .set_lineno (0 , p .lineno (1 ))
1322
+ p [0 ].end_lineno = p [3 ].end_lineno
1317
1323
1318
1324
def p_sens_egde_paren (self , p ):
1319
1325
'senslist : AT LPAREN edgesigs RPAREN'
@@ -1449,6 +1455,7 @@ def p_blocking_substitution(self, p):
1449
1455
'blocking_substitution : delays lvalue EQUALS delays rvalue SEMICOLON'
1450
1456
p [0 ] = BlockingSubstitution (p [2 ], p [5 ], p [1 ], p [4 ], lineno = p .lineno (2 ))
1451
1457
p .set_lineno (0 , p .lineno (2 ))
1458
+ p [0 ].end_lineno = p .lineno (6 )
1452
1459
1453
1460
def p_blocking_substitution_base (self , p ):
1454
1461
'blocking_substitution_base : delays lvalue EQUALS delays rvalue'
@@ -1460,6 +1467,7 @@ def p_nonblocking_substitution(self, p):
1460
1467
p [0 ] = NonblockingSubstitution (
1461
1468
p [2 ], p [5 ], p [1 ], p [4 ], lineno = p .lineno (2 ))
1462
1469
p .set_lineno (0 , p .lineno (2 ))
1470
+ p [0 ].end_lineno = p .lineno (6 )
1463
1471
1464
1472
# --------------------------------------------------------------------------
1465
1473
def p_delays (self , p ):
@@ -1493,11 +1501,13 @@ def p_block(self, p):
1493
1501
'block : BEGIN block_statements END'
1494
1502
p [0 ] = Block (p [2 ], lineno = p .lineno (1 ))
1495
1503
p .set_lineno (0 , p .lineno (1 ))
1504
+ p [0 ].end_lineno = p .lineno (3 )
1496
1505
1497
1506
def p_block_empty (self , p ):
1498
1507
'block : BEGIN END'
1499
1508
p [0 ] = Block ((), lineno = p .lineno (1 ))
1500
1509
p .set_lineno (0 , p .lineno (1 ))
1510
+ p [0 ].end_lineno = p .lineno (2 )
1501
1511
1502
1512
def p_block_statements (self , p ):
1503
1513
'block_statements : block_statements block_statement'
@@ -1519,11 +1529,13 @@ def p_namedblock(self, p):
1519
1529
'namedblock : BEGIN COLON ID namedblock_statements END'
1520
1530
p [0 ] = Block (p [4 ], p [3 ], lineno = p .lineno (1 ))
1521
1531
p .set_lineno (0 , p .lineno (1 ))
1532
+ p [0 ].end_lineno = p .lineno (5 )
1522
1533
1523
1534
def p_namedblock_empty (self , p ):
1524
1535
'namedblock : BEGIN COLON ID END'
1525
1536
p [0 ] = Block ((), p [3 ], lineno = p .lineno (1 ))
1526
1537
p .set_lineno (0 , p .lineno (1 ))
1538
+ p [0 ].end_lineno = p .lineno (4 )
1527
1539
1528
1540
def p_namedblock_statements (self , p ):
1529
1541
'namedblock_statements : namedblock_statements namedblock_statement'
@@ -1568,21 +1580,25 @@ def p_if_statement(self, p):
1568
1580
'if_statement : IF LPAREN cond RPAREN true_statement ELSE else_statement'
1569
1581
p [0 ] = IfStatement (p [3 ], p [5 ], p [7 ], lineno = p .lineno (1 ))
1570
1582
p .set_lineno (0 , p .lineno (1 ))
1583
+ p [0 ].end_lineno = p [7 ].end_lineno
1571
1584
1572
1585
def p_if_statement_woelse (self , p ):
1573
1586
'if_statement : IF LPAREN cond RPAREN true_statement'
1574
1587
p [0 ] = IfStatement (p [3 ], p [5 ], None , lineno = p .lineno (1 ))
1575
1588
p .set_lineno (0 , p .lineno (1 ))
1589
+ p [0 ].end_lineno = p [5 ].end_lineno
1576
1590
1577
1591
def p_if_statement_delay (self , p ):
1578
1592
'if_statement : delays IF LPAREN cond RPAREN true_statement ELSE else_statement'
1579
1593
p [0 ] = IfStatement (p [4 ], p [6 ], p [8 ], lineno = p .lineno (2 ))
1580
1594
p .set_lineno (0 , p .lineno (2 ))
1595
+ p [0 ].end_lineno = p [8 ].end_lineno
1581
1596
1582
1597
def p_if_statement_woelse_delay (self , p ):
1583
1598
'if_statement : delays IF LPAREN cond RPAREN true_statement'
1584
1599
p [0 ] = IfStatement (p [4 ], p [6 ], None , lineno = p .lineno (2 ))
1585
1600
p .set_lineno (0 , p .lineno (2 ))
1601
+ p [0 ].end_lineno = p [6 ].end_lineno
1586
1602
1587
1603
def p_cond (self , p ):
1588
1604
'cond : expression'
@@ -1660,21 +1676,25 @@ def p_case_statement(self, p):
1660
1676
'case_statement : CASE LPAREN case_comp RPAREN casecontent_statements ENDCASE'
1661
1677
p [0 ] = CaseStatement (p [3 ], p [5 ], lineno = p .lineno (1 ))
1662
1678
p .set_lineno (0 , p .lineno (1 ))
1679
+ p [0 ].end_lineno = p .lineno (6 )
1663
1680
1664
1681
def p_casex_statement (self , p ):
1665
1682
'casex_statement : CASEX LPAREN case_comp RPAREN casecontent_statements ENDCASE'
1666
1683
p [0 ] = CasexStatement (p [3 ], p [5 ], lineno = p .lineno (1 ))
1667
1684
p .set_lineno (0 , p .lineno (1 ))
1685
+ p [0 ].end_lineno = p .lineno (6 )
1668
1686
1669
1687
def p_casez_statement (self , p ):
1670
1688
'casez_statement : CASEZ LPAREN case_comp RPAREN casecontent_statements ENDCASE'
1671
1689
p [0 ] = CasezStatement (p [3 ], p [5 ], lineno = p .lineno (1 ))
1672
1690
p .set_lineno (0 , p .lineno (1 ))
1691
+ p [0 ].end_lineno = p .lineno (6 )
1673
1692
1674
1693
def p_unique_case_statement (self , p ):
1675
1694
'unique_case_statement : UNIQUE CASE LPAREN case_comp RPAREN casecontent_statements ENDCASE'
1676
1695
p [0 ] = UniqueCaseStatement (p [3 ], p [5 ], lineno = p .lineno (1 ))
1677
1696
p .set_lineno (0 , p .lineno (1 ))
1697
+ p [0 ].end_lineno = p .lineno (7 )
1678
1698
1679
1699
def p_case_comp (self , p ):
1680
1700
'case_comp : expression'
@@ -1760,6 +1780,7 @@ def p_instance(self, p):
1760
1780
p [0 ] = InstanceList (p [1 ], p [2 ], tuple (
1761
1781
instancelist ), lineno = p .lineno (1 ))
1762
1782
p .set_lineno (0 , p .lineno (1 ))
1783
+ p [0 ].end_lineno = p .lineno (4 )
1763
1784
1764
1785
def p_instance_or (self , p ):
1765
1786
'instance : SENS_OR parameterlist instance_bodylist SEMICOLON'
@@ -1770,6 +1791,7 @@ def p_instance_or(self, p):
1770
1791
p [0 ] = InstanceList (p [1 ], p [2 ], tuple (
1771
1792
instancelist ), lineno = p .lineno (1 ))
1772
1793
p .set_lineno (0 , p .lineno (1 ))
1794
+ p [0 ].end_lineno = p .lineno (4 )
1773
1795
1774
1796
def p_instance_bodylist (self , p ):
1775
1797
'instance_bodylist : instance_bodylist COMMA instance_body'
@@ -1799,6 +1821,7 @@ def p_instance_noname(self, p):
1799
1821
(), instance_array , lineno = p .lineno (1 )))
1800
1822
p [0 ] = InstanceList (p [1 ], (), tuple (instancelist ), lineno = p .lineno (1 ))
1801
1823
p .set_lineno (0 , p .lineno (1 ))
1824
+ p [0 ].end_lineno = p .lineno (3 )
1802
1825
1803
1826
def p_instance_or_noname (self , p ):
1804
1827
'instance : SENS_OR instance_bodylist_noname SEMICOLON'
@@ -1808,6 +1831,7 @@ def p_instance_or_noname(self, p):
1808
1831
(), instance_array , lineno = p .lineno (1 )))
1809
1832
p [0 ] = InstanceList (p [1 ], (), tuple (instancelist ), lineno = p .lineno (1 ))
1810
1833
p .set_lineno (0 , p .lineno (1 ))
1834
+ p [0 ].end_lineno = p .lineno (3 )
1811
1835
1812
1836
def p_instance_bodylist_noname (self , p ):
1813
1837
'instance_bodylist_noname : instance_bodylist_noname COMMA instance_body_noname'
@@ -1953,6 +1977,7 @@ def p_generate(self, p):
1953
1977
'generate : GENERATE generate_items ENDGENERATE'
1954
1978
p [0 ] = GenerateStatement (p [2 ], lineno = p .lineno (1 ))
1955
1979
p .set_lineno (0 , p .lineno (1 ))
1980
+ p [0 ].end_lineno = p .lineno (3 )
1956
1981
1957
1982
def p_generate_items_empty (self , p ):
1958
1983
'generate_items : empty'
@@ -1981,11 +2006,13 @@ def p_generate_block(self, p):
1981
2006
'generate_block : BEGIN generate_items END'
1982
2007
p [0 ] = Block (p [2 ], lineno = p .lineno (1 ))
1983
2008
p .set_lineno (0 , p .lineno (1 ))
2009
+ p [0 ].end_lineno = p .lineno (3 )
1984
2010
1985
2011
def p_generate_named_block (self , p ):
1986
2012
'generate_block : BEGIN COLON ID generate_items END'
1987
2013
p [0 ] = Block (p [4 ], p [3 ], lineno = p .lineno (1 ))
1988
2014
p .set_lineno (0 , p .lineno (1 ))
2015
+ p [0 ].end_lineno = p .lineno (5 )
1989
2016
1990
2017
def p_generate_if (self , p ):
1991
2018
'generate_if : IF LPAREN cond RPAREN gif_true_item ELSE gif_false_item'
@@ -2063,6 +2090,7 @@ def p_function(self, p):
2063
2090
'function : FUNCTION width ID SEMICOLON function_statement ENDFUNCTION'
2064
2091
p [0 ] = Function (p [3 ], p [2 ], p [5 ], lineno = p .lineno (1 ))
2065
2092
p .set_lineno (0 , p .lineno (1 ))
2093
+ p [0 ].end_lineno = p .lineno (6 )
2066
2094
2067
2095
def p_function_nowidth (self , p ):
2068
2096
'function : FUNCTION ID SEMICOLON function_statement ENDFUNCTION'
@@ -2072,6 +2100,7 @@ def p_function_nowidth(self, p):
2072
2100
lineno = p .lineno (1 )),
2073
2101
p [4 ], lineno = p .lineno (1 ))
2074
2102
p .set_lineno (0 , p .lineno (1 ))
2103
+ p [0 ].end_lineno = p .lineno (5 )
2075
2104
2076
2105
def p_function_integer (self , p ):
2077
2106
'function : FUNCTION INTEGER ID SEMICOLON function_statement ENDFUNCTION'
@@ -2081,6 +2110,7 @@ def p_function_integer(self, p):
2081
2110
lineno = p .lineno (1 )),
2082
2111
p [5 ], lineno = p .lineno (1 ))
2083
2112
p .set_lineno (0 , p .lineno (1 ))
2113
+ p [0 ].end_lineno = p .lineno (6 )
2084
2114
2085
2115
def p_function_statement (self , p ):
2086
2116
'function_statement : funcvardecls function_calc'
@@ -2231,16 +2261,19 @@ def p_single_statement_delays(self, p):
2231
2261
p [0 ] = SingleStatement (DelayStatement (
2232
2262
p [2 ], lineno = p .lineno (1 )), lineno = p .lineno (1 ))
2233
2263
p .set_lineno (0 , p .lineno (1 ))
2264
+ p [0 ].end_lineno = p .lineno (3 )
2234
2265
2235
2266
def p_single_statement_systemcall (self , p ):
2236
2267
'single_statement : systemcall SEMICOLON'
2237
2268
p [0 ] = SingleStatement (p [1 ], lineno = p .lineno (1 ))
2238
2269
p .set_lineno (0 , p .lineno (1 ))
2270
+ p [0 ].end_lineno = p .lineno (2 )
2239
2271
2240
2272
def p_single_statement_disable (self , p ):
2241
2273
'single_statement : disable SEMICOLON'
2242
2274
p [0 ] = SingleStatement (p [1 ], lineno = p .lineno (1 ))
2243
2275
p .set_lineno (0 , p .lineno (1 ))
2276
+ p [0 ].end_lineno = p .lineno (2 )
2244
2277
2245
2278
# fix me: to support task-call-statement
2246
2279
# def p_single_statement_taskcall(self, p):
0 commit comments