@@ -1520,9 +1520,9 @@ def print_super_classes3(self, node):
1520
1520
self .write ("(" )
1521
1521
if kwargs :
1522
1522
# Last arg is tuple of keyword values: omit
1523
- l = n - 1
1523
+ m = n - 1
1524
1524
else :
1525
- l = n
1525
+ m = n
1526
1526
1527
1527
if kwargs :
1528
1528
# 3.6+ does this
@@ -1534,15 +1534,15 @@ def print_super_classes3(self, node):
1534
1534
j += 1
1535
1535
1536
1536
j = 0
1537
- while i < l :
1537
+ while i < m :
1538
1538
self .write (sep )
1539
1539
value = self .traverse (node [i ])
1540
1540
self .write ("%s=%s" % (kwargs [j ], value ))
1541
1541
sep = line_separator
1542
1542
j += 1
1543
1543
i += 1
1544
1544
else :
1545
- while i < l :
1545
+ while i < m :
1546
1546
value = self .traverse (node [i ])
1547
1547
i += 1
1548
1548
self .write (sep , value )
@@ -1794,12 +1794,12 @@ def n_list(self, node):
1794
1794
1795
1795
def template_engine (self , entry , startnode ):
1796
1796
"""The format template interpretation engine. See the comment at the
1797
- beginning of this module for the how we interpret format
1797
+ beginning of this module for how we interpret format
1798
1798
specifications such as %c, %C, and so on.
1799
1799
"""
1800
1800
1801
1801
# print("-----")
1802
- # print(startnode)
1802
+ # print(startnode.kind )
1803
1803
# print(entry[0])
1804
1804
# print('======')
1805
1805
@@ -1854,14 +1854,27 @@ def template_engine(self, entry, startnode):
1854
1854
1855
1855
index = entry [arg ]
1856
1856
if isinstance (index , tuple ):
1857
- assert (
1858
- node [index [0 ]] == index [1 ]
1859
- ), "at %s[%d], expected %s node; got %s" % (
1860
- node .kind ,
1861
- arg ,
1862
- node [index [0 ]].kind ,
1863
- index [1 ],
1864
- )
1857
+ if isinstance (index [1 ], str ):
1858
+ # if node[index[0]] != index[1]:
1859
+ # from trepan.api import debug; debug()
1860
+ assert (
1861
+ node [index [0 ]] == index [1 ]
1862
+ ), "at %s[%d], expected '%s' node; got '%s'" % (
1863
+ node .kind ,
1864
+ arg ,
1865
+ index [1 ],
1866
+ node [index [0 ]].kind ,
1867
+ )
1868
+ else :
1869
+ assert (
1870
+ node [index [0 ]] in index [1 ]
1871
+ ), "at %s[%d], expected to be in '%s' node; got '%s'" % (
1872
+ node .kind ,
1873
+ arg ,
1874
+ index [1 ],
1875
+ node [index [0 ]].kind ,
1876
+ )
1877
+
1865
1878
index = index [0 ]
1866
1879
assert isinstance (
1867
1880
index , int
@@ -1881,14 +1894,21 @@ def template_engine(self, entry, startnode):
1881
1894
assert isinstance (tup , tuple )
1882
1895
if len (tup ) == 3 :
1883
1896
(index , nonterm_name , self .prec ) = tup
1884
- assert (
1885
- node [index ] == nonterm_name
1886
- ), "at %s[%d], expected '%s' node; got '%s'" % (
1887
- node .kind ,
1888
- arg ,
1889
- nonterm_name ,
1890
- node [index ].kind ,
1891
- )
1897
+ if isinstance (tup [1 ], str ):
1898
+ assert (
1899
+ node [index ] == nonterm_name
1900
+ ), "at %s[%d], expected '%s' node; got '%s'" % (
1901
+ node .kind ,
1902
+ arg ,
1903
+ nonterm_name ,
1904
+ node [index ].kind ,
1905
+ )
1906
+ else :
1907
+ assert node [tup [0 ]] in tup [1 ], (
1908
+ f"at { node .kind } [{ tup [0 ]} ], expected to be in '{ tup [1 ]} ' "
1909
+ f"node; got '{ node [tup [0 ]].kind } '"
1910
+ )
1911
+
1892
1912
else :
1893
1913
assert len (tup ) == 2
1894
1914
(index , self .prec ) = entry [arg ]
@@ -2099,6 +2119,7 @@ def code_deparse(
2099
2119
# Build Syntax Tree from tokenized and massaged disassembly.
2100
2120
# deparsed = pysource.FragmentsWalker(out, scanner, showast=showast)
2101
2121
show_tree = debug_opts .get ("tree" , False )
2122
+ linestarts = dict (scanner .opc .findlinestarts (co ))
2102
2123
deparsed = walker (
2103
2124
version ,
2104
2125
scanner ,
0 commit comments