From c5cfd36a61536cb4e81b4c4817932ca02bd14427 Mon Sep 17 00:00:00 2001 From: rocky Date: Sun, 14 Apr 2019 06:54:08 -0400 Subject: [PATCH] Start 3.8 async for/else --- test/bytecode_3.8/03_async_await.pyc | Bin 0 -> 1132 bytes uncompyle6/parsers/parse38.py | 47 +++++++++++++++++++++++++-- uncompyle6/semantics/customize3.py | 4 +++ 3 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 test/bytecode_3.8/03_async_await.pyc diff --git a/test/bytecode_3.8/03_async_await.pyc b/test/bytecode_3.8/03_async_await.pyc new file mode 100644 index 0000000000000000000000000000000000000000..48a327b9663cbd067932e84fffadc8c2413b50dd GIT binary patch literal 1132 zcmaiy&2G~`5XX0H$8pjoDYR4^kU$8K%z+|8IaP=wWapz^*ir>fKuN%m<@{-FKC(_ zGFoZ)th!2D+9nU$(G~KRc6F7!tvy{M@94T-Az#s}x1JrnyIE ztiDp_Z?H=@yi^~o9C9mzb5+JbyL8^_OkdN#zSV7|!zk&6X_7=?7N<$qJ_yjayVby) zCSjZwE=GZluy9W>&LW&Bbm-*I`zAgf4x*k(M;Jz12cv#_d+Tw#C&zlhNf2j`hNnec zR=q4T8CP%ktbz?dmwdib4MJ+f?Q84)862saAT%~A^!CB@Q4=DH#hLc;OW~GCC3_UhA zGE*+IFQV|rn i7P%GqucbVT7x8wEQ#~3)&zaG1cX*EHdLCKFvws2lj=3!W literal 0 HcmV?d00001 diff --git a/uncompyle6/parsers/parse38.py b/uncompyle6/parsers/parse38.py index afe112af..8e02dbab 100644 --- a/uncompyle6/parsers/parse38.py +++ b/uncompyle6/parsers/parse38.py @@ -26,6 +26,7 @@ class Python38Parser(Python37Parser): def p_38misc(self, args): """ stmt ::= async_for_stmt38 + stmt ::= async_forelse_stmt38 stmt ::= for38 stmt ::= forelsestmt38 stmt ::= forelselaststmt38 @@ -37,11 +38,11 @@ class Python38Parser(Python37Parser): stmt ::= whileTruestmt38 stmt ::= call - # FIXME this should be restricted to being inside a try block + # FIXME: this should be restricted to being inside a try block stmt ::= except_ret38 - # FIXME this should be added only when seeing GET_AITER or YIELD_FROM - async_for_stmt38 ::= expr + # FIXME: this should be added only when seeing GET_AITER or YIELD_FROM + async_for_stmt38 ::= expr GET_AITER SETUP_FINALLY GET_ANEXT @@ -52,6 +53,21 @@ class Python38Parser(Python37Parser): COME_FROM_FINALLY END_ASYNC_FOR + # FIXME: come froms after the else_suite or END_ASYNC_FOR distinguish which of + # for / forelse is used. Add come froms and check of add up control-flow detection phase. + async_forelse_stmt38 ::= expr + GET_AITER + SETUP_FINALLY + GET_ANEXT + LOAD_CONST + YIELD_FROM + POP_BLOCK + store for_block + COME_FROM_FINALLY + END_ASYNC_FOR + else_suite + + async_with_stmt ::= expr BEFORE_ASYNC_WITH GET_AWAITABLE LOAD_CONST YIELD_FROM SETUP_ASYNC_WITH POP_TOP suite_stmts @@ -141,6 +157,18 @@ class Python38Parser(Python37Parser): stmt ::= forelsestmt stmt ::= try_except36 + async_for_stmt ::= SETUP_LOOP expr + GET_AITER + SETUP_EXCEPT GET_ANEXT LOAD_CONST + YIELD_FROM + store + POP_BLOCK JUMP_FORWARD COME_FROM_EXCEPT DUP_TOP + LOAD_GLOBAL COMPARE_OP POP_JUMP_IF_TRUE + END_FINALLY COME_FROM + for_block + COME_FROM + POP_TOP POP_TOP POP_TOP POP_EXCEPT POP_TOP POP_BLOCK + COME_FROM_LOOP async_for_stmt37 ::= SETUP_LOOP expr GET_AITER SETUP_EXCEPT GET_ANEXT @@ -153,6 +181,19 @@ class Python38Parser(Python37Parser): POP_TOP POP_BLOCK COME_FROM_LOOP + async_forelse_stmt ::= SETUP_LOOP expr + GET_AITER + SETUP_EXCEPT GET_ANEXT LOAD_CONST + YIELD_FROM + store + POP_BLOCK JUMP_FORWARD COME_FROM_EXCEPT DUP_TOP + LOAD_GLOBAL COMPARE_OP POP_JUMP_IF_TRUE + END_FINALLY COME_FROM + for_block + COME_FROM + POP_TOP POP_TOP POP_TOP POP_EXCEPT POP_TOP POP_BLOCK + else_suite COME_FROM_LOOP + for ::= SETUP_LOOP expr for_iter store for_block POP_BLOCK for ::= SETUP_LOOP expr for_iter store for_block POP_BLOCK NOP diff --git a/uncompyle6/semantics/customize3.py b/uncompyle6/semantics/customize3.py index e000e172..837371ef 100644 --- a/uncompyle6/semantics/customize3.py +++ b/uncompyle6/semantics/customize3.py @@ -956,6 +956,10 @@ def customize_for_version3(self, version): '%|async for %c in %c:\n%+%c%-%-\n\n', (7, 'store'), (0, 'expr'), (8, 'for_block') ), + 'async_forelse_stmt38': ( + '%|async for %c in %c:\n%+%c%-%|else:\n%+%c%-\n\n', + (7, 'store'), (0, 'expr'), (8, 'for_block'), (-1, 'else_suite') ), + 'async_with_stmt38': ( '%|async with %c:\n%+%|%c%-', (0, 'expr'), 7),