You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-03 00:45:53 +08:00
Handle more ifelse reduction rules patterns
This commit is contained in:
@@ -105,6 +105,24 @@ IFELSE_STMT_RULES = frozenset(
|
|||||||
"opt_come_from_except",
|
"opt_come_from_except",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
"ifelsestmt",
|
||||||
|
(
|
||||||
|
"testexpr",
|
||||||
|
"stmts",
|
||||||
|
"jf_cfs",
|
||||||
|
"\\e_else_suite_opt",
|
||||||
|
"\\e_opt_come_from_except")
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"ifelsestmt",
|
||||||
|
(
|
||||||
|
"testexpr",
|
||||||
|
"stmts",
|
||||||
|
"jf_cfs",
|
||||||
|
"\\e_else_suite_opt",
|
||||||
|
"opt_come_from_except")
|
||||||
|
),
|
||||||
])
|
])
|
||||||
|
|
||||||
def ifelsestmt(self, lhs, n, rule, ast, tokens, first, last):
|
def ifelsestmt(self, lhs, n, rule, ast, tokens, first, last):
|
||||||
@@ -113,6 +131,11 @@ def ifelsestmt(self, lhs, n, rule, ast, tokens, first, last):
|
|||||||
# ifelsestmt jumped outside of loop. No good.
|
# ifelsestmt jumped outside of loop. No good.
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
# print("XXX", first, last)
|
||||||
|
# for t in range(first, last):
|
||||||
|
# print(tokens[t])
|
||||||
|
# print("=" * 30)
|
||||||
|
|
||||||
if rule not in IFELSE_STMT_RULES:
|
if rule not in IFELSE_STMT_RULES:
|
||||||
# print("XXX", rule)
|
# print("XXX", rule)
|
||||||
return False
|
return False
|
||||||
@@ -186,9 +209,7 @@ def ifelsestmt(self, lhs, n, rule, ast, tokens, first, last):
|
|||||||
if jump_else_end == "jf_cf_pop":
|
if jump_else_end == "jf_cf_pop":
|
||||||
jump_else_end = jump_else_end[0]
|
jump_else_end = jump_else_end[0]
|
||||||
|
|
||||||
jump_to_jump = False
|
|
||||||
if jump_else_end == "JUMP_FORWARD":
|
if jump_else_end == "JUMP_FORWARD":
|
||||||
jump_to_jump = True
|
|
||||||
endif_target = int(jump_else_end.pattr)
|
endif_target = int(jump_else_end.pattr)
|
||||||
last_offset = tokens[last].off2int()
|
last_offset = tokens[last].off2int()
|
||||||
if endif_target != last_offset:
|
if endif_target != last_offset:
|
||||||
|
Reference in New Issue
Block a user