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