@@ -1520,9 +1520,9 @@ def print_super_classes3(self, node):
15201520 self .write ("(" )
15211521 if kwargs :
15221522 # Last arg is tuple of keyword values: omit
1523- l = n - 1
1523+ m = n - 1
15241524 else :
1525- l = n
1525+ m = n
15261526
15271527 if kwargs :
15281528 # 3.6+ does this
@@ -1534,15 +1534,15 @@ def print_super_classes3(self, node):
15341534 j += 1
15351535
15361536 j = 0
1537- while i < l :
1537+ while i < m :
15381538 self .write (sep )
15391539 value = self .traverse (node [i ])
15401540 self .write ("%s=%s" % (kwargs [j ], value ))
15411541 sep = line_separator
15421542 j += 1
15431543 i += 1
15441544 else :
1545- while i < l :
1545+ while i < m :
15461546 value = self .traverse (node [i ])
15471547 i += 1
15481548 self .write (sep , value )
@@ -1794,12 +1794,12 @@ def n_list(self, node):
17941794
17951795 def template_engine (self , entry , startnode ):
17961796 """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
17981798 specifications such as %c, %C, and so on.
17991799 """
18001800
18011801 # print("-----")
1802- # print(startnode)
1802+ # print(startnode.kind )
18031803 # print(entry[0])
18041804 # print('======')
18051805
@@ -1854,14 +1854,27 @@ def template_engine(self, entry, startnode):
18541854
18551855 index = entry [arg ]
18561856 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+
18651878 index = index [0 ]
18661879 assert isinstance (
18671880 index , int
@@ -1881,14 +1894,21 @@ def template_engine(self, entry, startnode):
18811894 assert isinstance (tup , tuple )
18821895 if len (tup ) == 3 :
18831896 (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+
18921912 else :
18931913 assert len (tup ) == 2
18941914 (index , self .prec ) = entry [arg ]
@@ -2099,6 +2119,7 @@ def code_deparse(
20992119 # Build Syntax Tree from tokenized and massaged disassembly.
21002120 # deparsed = pysource.FragmentsWalker(out, scanner, showast=showast)
21012121 show_tree = debug_opts .get ("tree" , False )
2122+ linestarts = dict (scanner .opc .findlinestarts (co ))
21022123 deparsed = walker (
21032124 version ,
21042125 scanner ,
0 commit comments