You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-03 00:45:53 +08:00
More linestart hacking.
Not very successful though
This commit is contained in:
@@ -7,11 +7,12 @@ class LineMapWalker(SourceWalker):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(LineMapWalker, self).__init__(*args, **kwargs)
|
||||
self.source_linemap = {}
|
||||
self.current_line_number = 0
|
||||
self.current_line_number = 1
|
||||
|
||||
def write(self, *data):
|
||||
"""Augment write routine to keep track of current line"""
|
||||
for l in data:
|
||||
## print("XXX write: '%s'" % l)
|
||||
for i in str(l):
|
||||
if i == '\n':
|
||||
self.current_line_number += 1
|
||||
@@ -20,6 +21,8 @@ class LineMapWalker(SourceWalker):
|
||||
pass
|
||||
return super(LineMapWalker, self).write(*data)
|
||||
|
||||
# Note n_expr needs treatment too
|
||||
|
||||
def default(self, node):
|
||||
"""Augment write default routine to record line number changes"""
|
||||
if hasattr(node, 'linestart'):
|
||||
|
@@ -211,7 +211,7 @@ class SourceWalker(GenericASTTraversal, object):
|
||||
self.classes = []
|
||||
self.pending_newlines = 0
|
||||
self.linestarts = linestarts
|
||||
self.line_number = 0
|
||||
self.line_number = 1
|
||||
self.ast_errors = []
|
||||
# FIXME: have p.insts update in a better way
|
||||
# modularity is broken here
|
||||
@@ -997,6 +997,10 @@ class SourceWalker(GenericASTTraversal, object):
|
||||
else:
|
||||
n = node[0]
|
||||
|
||||
# if (hasattr(n, 'linestart') and n.linestart and
|
||||
# hasattr(self, 'current_line_number')):
|
||||
# self.source_linemap[self.current_line_number] = n.linestart
|
||||
|
||||
self.prec = PRECEDENCE.get(n.kind, -2)
|
||||
if n == 'LOAD_CONST' and repr(n.pattr)[0] == '-':
|
||||
self.prec = 6
|
||||
@@ -2296,6 +2300,9 @@ class SourceWalker(GenericASTTraversal, object):
|
||||
elif typ == '{':
|
||||
d = node.__dict__
|
||||
expr = m.group('expr')
|
||||
if (hasattr(node, 'linestart') and node.linestart
|
||||
and hasattr(node, 'current_line_number')):
|
||||
self.source_linemap[self.current_line_number] = node.linestart
|
||||
try:
|
||||
self.write(eval(expr, d, d))
|
||||
except:
|
||||
|
Reference in New Issue
Block a user