You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-04 01:09:52 +08:00
Merge branch 'master' into python-2.4
This commit is contained in:
@@ -10,13 +10,6 @@ jobs:
|
||||
CIRCLE_ARTIFACTS: /tmp/circleci-artifacts
|
||||
CIRCLE_TEST_REPORTS: /tmp/circleci-test-results
|
||||
COMPILE: --compile
|
||||
# In CircleCI 1.0 we used a pre-configured image with a large number of languages and other packages.
|
||||
# In CircleCI 2.0 you can now specify your own image, or use one of our pre-configured images.
|
||||
# The following configuration line tells CircleCI to use the specified docker image as the runtime environment for you job.
|
||||
# We have selected a pre-built image that mirrors the build environment we use on
|
||||
# the 1.0 platform, but we recommend you choose an image more tailored to the needs
|
||||
# of each job. For more information on choosing an image (or alternatively using a
|
||||
# VM instead of a container) see https://circleci.com/docs/2.0/executor-types/
|
||||
# To see the list of pre-built images that CircleCI provides for most common languages see
|
||||
# https://circleci.com/docs/2.0/circleci-images/
|
||||
machine:
|
||||
|
@@ -58,7 +58,7 @@ entry_points = {
|
||||
]}
|
||||
ftp_url = None
|
||||
install_requires = ["spark-parser >= 1.8.9, < 1.9.0",
|
||||
"xdis >= 4.2.0, < 4.3.0"]
|
||||
"xdis >= 4.2.1, < 4.3.0"]
|
||||
|
||||
license = "GPL3"
|
||||
mailing_list = "python-debugger@googlegroups.com"
|
||||
|
Binary file not shown.
@@ -3,3 +3,6 @@
|
||||
def make_arange(n):
|
||||
# This syntax is legal starting with Python 3.7
|
||||
return (i * 2 async for i in n)
|
||||
|
||||
async def run(m):
|
||||
return [i async for i in m]
|
||||
|
@@ -162,6 +162,14 @@ case $PYVERSION in
|
||||
[test_quopri.py]=1 # Only fails on POWER
|
||||
)
|
||||
;;
|
||||
3.7)
|
||||
SKIP_TESTS=(
|
||||
[test_argparse.py]=1 #
|
||||
[test_ast.py]=1 #
|
||||
[test_contains.py]=1 # Code "while False: yield None" is optimized away in compilation
|
||||
[test_decorators.py]=1 # Control flow wrt "if elif"
|
||||
)
|
||||
;;
|
||||
*)
|
||||
SKIP_TESTS=( [test_aepack.py]=1
|
||||
[audiotests.py]=1
|
||||
|
@@ -514,7 +514,20 @@ class Python37BaseParser(PythonParser):
|
||||
store func_async_middle comp_iter
|
||||
JUMP_BACK COME_FROM
|
||||
POP_TOP POP_TOP POP_TOP POP_EXCEPT POP_TOP
|
||||
""",
|
||||
|
||||
expr ::= listcomp_async
|
||||
listcomp_async ::= LOAD_LISTCOMP LOAD_STR MAKE_FUNCTION_0
|
||||
expr GET_AITER CALL_FUNCTION_1
|
||||
GET_AWAITABLE LOAD_CONST
|
||||
YIELD_FROM
|
||||
|
||||
expr ::= listcomp_async
|
||||
listcomp_async ::= BUILD_LIST_0 LOAD_FAST func_async_prefix
|
||||
store func_async_middle list_iter
|
||||
JUMP_BACK COME_FROM
|
||||
POP_TOP POP_TOP POP_TOP POP_EXCEPT POP_TOP
|
||||
|
||||
""",
|
||||
nop_func,
|
||||
)
|
||||
custom_ops_processed.add(opname)
|
||||
|
@@ -33,7 +33,7 @@ def customize_for_version37(self, version):
|
||||
'%|async for %c in %c:\n%+%c%-%|else:\n%+%c%-\n\n',
|
||||
(7, 'store'), (1, 'expr'), (17, 'for_block'), (25, 'else_suite') ),
|
||||
'async_for_stmt': (
|
||||
'%|async for %c in %c:\n%+%c%-%-\n\n',
|
||||
'%|async for %c in %c:\n%+%c%-\n\n',
|
||||
(7, 'store'), (1, 'expr'), (17, 'for_block')),
|
||||
'async_for_stmt37': (
|
||||
'%|async for %c in %c:\n%+%c%-%-\n\n',
|
||||
|
@@ -1221,6 +1221,8 @@ class SourceWalker(GenericASTTraversal, object):
|
||||
n = k[0]
|
||||
pass
|
||||
pass
|
||||
elif ast == "listcomp_async":
|
||||
store = ast[3]
|
||||
else:
|
||||
assert n == "list_iter", n
|
||||
|
||||
@@ -1287,6 +1289,13 @@ class SourceWalker(GenericASTTraversal, object):
|
||||
self.preorder(n[1])
|
||||
else:
|
||||
self.preorder(n[0])
|
||||
|
||||
if node == "listcomp_async":
|
||||
self.write(" async")
|
||||
in_node_index = 3
|
||||
else:
|
||||
in_node_index = -3
|
||||
|
||||
self.write(" for ")
|
||||
if comp_store:
|
||||
self.preorder(comp_store)
|
||||
@@ -1295,7 +1304,7 @@ class SourceWalker(GenericASTTraversal, object):
|
||||
|
||||
# FIXME this is all merely approximate
|
||||
self.write(" in ")
|
||||
self.preorder(node[-3])
|
||||
self.preorder(node[in_node_index])
|
||||
|
||||
# Here is where we handle nested list iterations.
|
||||
if ast == "list_comp" and self.version != 3.0:
|
||||
@@ -1434,9 +1443,14 @@ class SourceWalker(GenericASTTraversal, object):
|
||||
if node[0].kind == "load_closure":
|
||||
self.listcomprehension_walk2(node)
|
||||
else:
|
||||
self.comprehension_walk_newer(node, 1, 0)
|
||||
if node == "listcomp_async":
|
||||
list_iter_index = 5
|
||||
else:
|
||||
list_iter_index = 1
|
||||
self.comprehension_walk_newer(node, list_iter_index, 0)
|
||||
self.write("]")
|
||||
self.prune()
|
||||
n_listcomp_async = n_listcomp
|
||||
|
||||
def setcomprehension_walk3(self, node, collection_index):
|
||||
"""Set comprehensions the way they are done in Python3.
|
||||
|
Reference in New Issue
Block a user