You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-04 01:09:52 +08:00
3.0 list comprehensions
This commit is contained in:
BIN
test/bytecode_3.0/01_comprehension.pyc
Normal file
BIN
test/bytecode_3.0/01_comprehension.pyc
Normal file
Binary file not shown.
@@ -43,8 +43,16 @@ class Python30Parser(Python31Parser):
|
|||||||
set_comp_func ::= set_comp_func_header
|
set_comp_func ::= set_comp_func_header
|
||||||
LOAD_FAST FOR_ITER store comp_iter
|
LOAD_FAST FOR_ITER store comp_iter
|
||||||
JUMP_BACK POP_TOP JUMP_BACK RETURN_VALUE RETURN_LAST
|
JUMP_BACK POP_TOP JUMP_BACK RETURN_VALUE RETURN_LAST
|
||||||
|
|
||||||
|
list_comp_header ::= BUILD_LIST_0 DUP_TOP STORE_FAST
|
||||||
|
list_comp ::= list_comp_header
|
||||||
|
LOAD_FAST FOR_ITER store comp_iter
|
||||||
|
JUMP_BACK
|
||||||
|
|
||||||
|
|
||||||
comp_if ::= expr jmp_false comp_iter
|
comp_if ::= expr jmp_false comp_iter
|
||||||
comp_iter ::= expr expr SET_ADD
|
comp_iter ::= expr expr SET_ADD
|
||||||
|
comp_iter ::= expr expr LIST_APPEND
|
||||||
|
|
||||||
# In many ways 3.0 is like 2.6. The below rules in fact are the same or similar.
|
# In many ways 3.0 is like 2.6. The below rules in fact are the same or similar.
|
||||||
|
|
||||||
|
@@ -1052,7 +1052,8 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
ast = ast[0]
|
ast = ast[0]
|
||||||
|
|
||||||
store = None
|
store = None
|
||||||
if ast in ['set_comp_func', 'dict_comp_func', 'set_comp_func_header']:
|
if ast in ['set_comp_func', 'dict_comp_func',
|
||||||
|
'list_comp', 'set_comp_func_header']:
|
||||||
for k in ast:
|
for k in ast:
|
||||||
if k == 'comp_iter':
|
if k == 'comp_iter':
|
||||||
n = k
|
n = k
|
||||||
@@ -1125,7 +1126,7 @@ class SourceWalker(GenericASTTraversal, object):
|
|||||||
self.write(' in ')
|
self.write(' in ')
|
||||||
self.preorder(node[-3])
|
self.preorder(node[-3])
|
||||||
|
|
||||||
if ast == 'list_comp':
|
if ast == 'list_comp' and self.version != 3.0:
|
||||||
list_iter = ast[1]
|
list_iter = ast[1]
|
||||||
assert list_iter == 'list_iter'
|
assert list_iter == 'list_iter'
|
||||||
if list_iter == 'list_for':
|
if list_iter == 'list_for':
|
||||||
|
Reference in New Issue
Block a user