You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-03 00:45:53 +08:00
Add 3.0 comp_if_not grammar rule
This commit is contained in:
Binary file not shown.
24
test/simple_source/bug30/06_listcomp.py
Normal file
24
test/simple_source/bug30/06_listcomp.py
Normal file
@@ -0,0 +1,24 @@
|
||||
# Python 3.0 comprehensions can produce different code from
|
||||
# all other Python versions. Thanks, Python!
|
||||
|
||||
# This code is RUNNABLE!
|
||||
|
||||
# Adapted from 3.0 ast.py; uses comprehension implemented via CLOSURE
|
||||
def _format(node):
|
||||
return [(a, int(b)) for a, b in node.items()]
|
||||
|
||||
x = {'a': '1', 'b': '2'}
|
||||
assert [('a', 1), ('b', 2)] == _format(x)
|
||||
|
||||
# Adapted from 3.0 cmd.py; ises "if" comprehension
|
||||
def monthrange(ary, dotext):
|
||||
return [a[3:] for a in ary if a.startswith(dotext)]
|
||||
|
||||
ary = ["Monday", "Twoday", "Monmonth"]
|
||||
assert ['day', 'month'] == monthrange(ary, "Mon")
|
||||
|
||||
# From 3.0 cmd.py; uses "if not" comprehension
|
||||
def columnize(l):
|
||||
return [i for i in range(len(l))
|
||||
if not isinstance(l[i], str)]
|
||||
assert [0, 2] == columnize([1, 'a', 2])
|
@@ -62,6 +62,7 @@ class Python30Parser(Python31Parser):
|
||||
# JUMP_IF_TRUE POP_TOP as a replacement
|
||||
comp_if ::= expr jmp_false comp_iter
|
||||
comp_if ::= expr jmp_false comp_iter JUMP_BACK POP_TOP
|
||||
comp_if_not ::= expr jmp_true comp_iter JUMP_BACK POP_TOP
|
||||
comp_iter ::= expr expr SET_ADD
|
||||
comp_iter ::= expr expr LIST_APPEND
|
||||
|
||||
|
Reference in New Issue
Block a user