You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-04 01:09:52 +08:00
Add fragment offsets for more instructions
Save and restore class name across switches
This commit is contained in:
@@ -101,6 +101,7 @@ class FragmentsWalker(pysource.SourceWalker, object):
|
|||||||
self.classes = []
|
self.classes = []
|
||||||
self.pending_newlines = 0
|
self.pending_newlines = 0
|
||||||
self.hide_internal = False
|
self.hide_internal = False
|
||||||
|
self.name = None
|
||||||
|
|
||||||
self.offsets = {}
|
self.offsets = {}
|
||||||
self.last_finish = -1
|
self.last_finish = -1
|
||||||
@@ -285,11 +286,17 @@ class FragmentsWalker(pysource.SourceWalker, object):
|
|||||||
node[0].parent = node
|
node[0].parent = node
|
||||||
self.last_finish = len(self.f.getvalue())
|
self.last_finish = len(self.f.getvalue())
|
||||||
self.preorder(node[0])
|
self.preorder(node[0])
|
||||||
|
finish = len(self.f.getvalue())
|
||||||
|
if hasattr(node[0], 'offset'):
|
||||||
|
self.set_pos_info(node[0], self.last_finish, )
|
||||||
self.write(')')
|
self.write(')')
|
||||||
self.last_finish = len(self.f.getvalue())
|
self.last_finish = finish + 1
|
||||||
else:
|
else:
|
||||||
node[0].parent = node
|
node[0].parent = node
|
||||||
|
start = len(self.f.getvalue())
|
||||||
self.preorder(node[0])
|
self.preorder(node[0])
|
||||||
|
if hasattr(node[0], 'offset'):
|
||||||
|
self.set_pos_info(node[0], start, len(self.f.getvalue()))
|
||||||
self.prec = p
|
self.prec = p
|
||||||
self.set_pos_info(node, start, len(self.f.getvalue()))
|
self.set_pos_info(node, start, len(self.f.getvalue()))
|
||||||
self.prune()
|
self.prune()
|
||||||
@@ -461,7 +468,6 @@ class FragmentsWalker(pysource.SourceWalker, object):
|
|||||||
|
|
||||||
def n_mkfunc(self, node):
|
def n_mkfunc(self, node):
|
||||||
start = len(self.f.getvalue())
|
start = len(self.f.getvalue())
|
||||||
old_name = self.name
|
|
||||||
if self.version >= 3.0:
|
if self.version >= 3.0:
|
||||||
# LOAD_CONST code object ..
|
# LOAD_CONST code object ..
|
||||||
# LOAD_CONST 'x0' if >= 3.3
|
# LOAD_CONST 'x0' if >= 3.3
|
||||||
@@ -484,7 +490,6 @@ class FragmentsWalker(pysource.SourceWalker, object):
|
|||||||
self.write(func_name)
|
self.write(func_name)
|
||||||
self.indentMore()
|
self.indentMore()
|
||||||
self.make_function(node, isLambda=False, code_index=code_index)
|
self.make_function(node, isLambda=False, code_index=code_index)
|
||||||
self.name = old_name
|
|
||||||
self.set_pos_info(node, start, len(self.f.getvalue()))
|
self.set_pos_info(node, start, len(self.f.getvalue()))
|
||||||
if len(self.param_stack) > 1:
|
if len(self.param_stack) > 1:
|
||||||
self.write('\n\n')
|
self.write('\n\n')
|
||||||
@@ -798,6 +803,7 @@ class FragmentsWalker(pysource.SourceWalker, object):
|
|||||||
|
|
||||||
rn = self.return_none
|
rn = self.return_none
|
||||||
self.return_none = returnNone
|
self.return_none = returnNone
|
||||||
|
old_name = self.name
|
||||||
self.name = name
|
self.name = name
|
||||||
# if code would be empty, append 'pass'
|
# if code would be empty, append 'pass'
|
||||||
if len(ast) == 0:
|
if len(ast) == 0:
|
||||||
@@ -805,6 +811,7 @@ class FragmentsWalker(pysource.SourceWalker, object):
|
|||||||
else:
|
else:
|
||||||
self.customize(customize)
|
self.customize(customize)
|
||||||
self.text = self.traverse(ast, isLambda=isLambda)
|
self.text = self.traverse(ast, isLambda=isLambda)
|
||||||
|
self.name = old_name
|
||||||
self.return_none = rn
|
self.return_none = rn
|
||||||
|
|
||||||
def build_ast(self, tokens, customize, isLambda=False, noneInNames=False):
|
def build_ast(self, tokens, customize, isLambda=False, noneInNames=False):
|
||||||
|
@@ -536,6 +536,7 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
self.classes = []
|
self.classes = []
|
||||||
self.pending_newlines = 0
|
self.pending_newlines = 0
|
||||||
self.hide_internal = True
|
self.hide_internal = True
|
||||||
|
self.name = None
|
||||||
self.version = version
|
self.version = version
|
||||||
|
|
||||||
if 2.0 <= version <= 2.3:
|
if 2.0 <= version <= 2.3:
|
||||||
@@ -1821,7 +1822,9 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
for g in find_globals(ast, set()):
|
for g in find_globals(ast, set()):
|
||||||
self.println(indent, 'global ', g)
|
self.println(indent, 'global ', g)
|
||||||
|
|
||||||
|
old_name = self.name
|
||||||
self.gen_source(ast, code.co_name, code._customize)
|
self.gen_source(ast, code.co_name, code._customize)
|
||||||
|
self.name = old_name
|
||||||
code._tokens = None; code._customize = None # save memory
|
code._tokens = None; code._customize = None # save memory
|
||||||
self.classes.pop(-1)
|
self.classes.pop(-1)
|
||||||
|
|
||||||
@@ -1830,6 +1833,7 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
|
|
||||||
rn = self.return_none
|
rn = self.return_none
|
||||||
self.return_none = returnNone
|
self.return_none = returnNone
|
||||||
|
old_name = self.name
|
||||||
self.name = name
|
self.name = name
|
||||||
# if code would be empty, append 'pass'
|
# if code would be empty, append 'pass'
|
||||||
if len(ast) == 0:
|
if len(ast) == 0:
|
||||||
@@ -1841,6 +1845,7 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
else:
|
else:
|
||||||
self.text = self.traverse(ast, isLambda=isLambda)
|
self.text = self.traverse(ast, isLambda=isLambda)
|
||||||
self.println(self.text)
|
self.println(self.text)
|
||||||
|
self.name = old_name
|
||||||
self.return_none = rn
|
self.return_none = rn
|
||||||
|
|
||||||
def build_ast(self, tokens, customize, isLambda=False,
|
def build_ast(self, tokens, customize, isLambda=False,
|
||||||
|
Reference in New Issue
Block a user