Skip to content

Commit

Permalink
Honest COME_FROMs can get added before FOR_ITER
Browse files Browse the repository at this point in the history
Addresses some of problems seen in 3.7 datetime.py
  • Loading branch information
rocky committed May 14, 2019
1 parent ce9270d commit bea9a6a
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 2 deletions.
4 changes: 4 additions & 0 deletions uncompyle6/parsers/parse36.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ def p_36misc(self, args):
"""
sstmt ::= sstmt RETURN_LAST
cf_for_iter ::= _come_froms FOR_ITER
list_for ::= expr cf_for_iter store list_iter jb_or_c
genexpr_func ::= LOAD_FAST cf_for_iter store comp_iter JUMP_BACK
# 3.6 redoes how return_closure works. FIXME: Isolate to LOAD_CLOSURE
return_closure ::= LOAD_CLOSURE DUP_TOP STORE_NAME RETURN_VALUE RETURN_LAST
Expand Down
8 changes: 7 additions & 1 deletion uncompyle6/scanners/scanner3.py
Original file line number Diff line number Diff line change
Expand Up @@ -811,7 +811,13 @@ def detect_control_flow(self, offset, targets, inst_index):
self.fixed_jumps[offset] = fix or match[-1]
return
else:
self.fixed_jumps[offset] = match[-1]
if self.version < 3.6:
# FIXME: this is putting in COME_FROMs in the wrong place.
# Fix up grammar so we don't need to do this.
# See cf_for_iter use in parser36.py
self.fixed_jumps[offset] = match[-1]
else:
self.fixed_jumps[offset] = target
return
# op == POP_JUMP_IF_TRUE
else:
Expand Down
2 changes: 1 addition & 1 deletion uncompyle6/semantics/pysource.py
Original file line number Diff line number Diff line change
Expand Up @@ -1433,7 +1433,7 @@ def print_super_classes3(self, node):
assert node[n].kind.startswith('CALL_FUNCTION')

if node[n].kind.startswith('CALL_FUNCTION_KW'):
# 3.6+ starts does this
# 3.6+ starts doing this
kwargs = node[n-1].attr
assert isinstance(kwargs, tuple)
i = n - (len(kwargs)+1)
Expand Down

0 comments on commit bea9a6a

Please sign in to comment.