From 288516d8c2b6b605276844be952845fd14073fc8 Mon Sep 17 00:00:00 2001 From: rocky Date: Wed, 22 Nov 2017 11:26:50 -0500 Subject: [PATCH] Increase grammar coverage --- test/bytecode_2.2/01_augmented_assign.pyc | Bin 0 -> 1481 bytes test/bytecode_2.5/01_augmented_assign.pyc | Bin 0 -> 1319 bytes test/bytecode_2.6/01_augmented_assign.pyc | Bin 0 -> 1319 bytes test/bytecode_2.7/01_augmented_assign.pyc | Bin 0 -> 1313 bytes test/bytecode_3.6/01_augmented_assign.pyc | Bin 0 -> 1158 bytes .../stmts/01_augmented_assign.py | 71 ++++++++++++++++++ uncompyle6/parsers/parse2.py | 8 +- uncompyle6/parsers/parse27.py | 3 +- 8 files changed, 77 insertions(+), 5 deletions(-) create mode 100644 test/bytecode_2.2/01_augmented_assign.pyc create mode 100644 test/bytecode_2.5/01_augmented_assign.pyc create mode 100644 test/bytecode_2.6/01_augmented_assign.pyc create mode 100644 test/bytecode_2.7/01_augmented_assign.pyc create mode 100644 test/bytecode_3.6/01_augmented_assign.pyc create mode 100644 test/simple_source/stmts/01_augmented_assign.py diff --git a/test/bytecode_2.2/01_augmented_assign.pyc b/test/bytecode_2.2/01_augmented_assign.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bb3827c900f6e644c7e561a20012af9a87eadbe5 GIT binary patch literal 1481 zcmbtUU2hvj6g{)MPU4MSHy;idq%iPOw~^zv0^F2{P}K5NRfr%VS&FQUXY6e2{pik` z#Jr5u^2Q@SfoFaTzl8t5z2l7&A>Qz6ukJnf%$a-d?6~)LGpzm59*#l3HG0ik53qm& zhU9F*HlYQSzbJt>kaswS5(%YbudBGr;{vFHdJ9v*()}0a! z$UjyMoOYZ1>9qt9K72Ha=F>!{rBb(&H@27qd#p%;QoYhT#oN z{78PkC@->9o-az>8)xczSv=E4c&fF$D9ik5zkhjoc{nbjUlv44a?YAV^7<>aK35oW zm6Lfv+ZQrUDN3R;&eG6yXfUqUyvU|Sl*npmm~=OY>fGCVOe!{a zT?s7JW|i9i8^XyZ%uAAPcrC9k>NJSuv*m4z9nlsa2V22jZ7=9}J6=Ofgc5S_K1wAp->Rz>sz+Y_Nx8#tAs@Fm~`s!$6;ii9lJyGgf=Kk%+;!;$h& z_zC?5~l|)*xK>iH*cS3cI{uk+r0L3a~Q+?;`n@l!~9_Y5?~0R7)S=!489}q zVCaGLVd#VMK>2Wh^BH0+I{q#mKY#crjLLDMQmbSb8KcMPem)gRCiO@w zDMm$>a9&AXR*JnnVY0G_m9WZKkw@05A{C>o5S3cY3=QWW&a_$R5#>=~MK%)lObMyt zEXk*nxsfTgRr{PTY1BvJ{nVaisW_clwHIe{u}n`?!B3PDXV&IV`u)qx%l){BzD-e- z zD$9v_)a>FK(~P*4R3`6Lf-&+D35OTk{&M%UWz5b!{N+GTvf%dmYxO Htt0;z_GJl) literal 0 HcmV?d00001 diff --git a/test/bytecode_2.6/01_augmented_assign.pyc b/test/bytecode_2.6/01_augmented_assign.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0577215e25ea41c83e025b48c35f0677ae0c61d0 GIT binary patch literal 1319 zcmb7DO>fgc5S_K1G}(NWRz>6j+Y_Nx6F8Nk@Fm~`s!$6;ii9lJyGgc z{38Ae5_e`ciPHlYZ0-2%o43z1yY{c&EnfM#GYVmOaeThOk^f-;5?}kL7Tv1(A5jR{Y zR@1c-dGD^Q!i2%0(<7BjK4M9^d!_Zg74=|2$qfiy*j=)fePU}M>o9S!L|YJc<5#FB zPgkhGLkFk$L`J*dSC_!k)nyjzz>V_YssOb??crX%{yc%8W)pR|dV4eR6h_=88gR9H zGqDY$Ca4DJ7D!Ge>`Tl(sX7rzTjC=Uo+auFV#q#WZ63bMLt8YE4fuiOv~9^Am>P5y z$I*l#3Q>paRU59MR>PjW|;xD`Jfs2HK&p zLBXX^r{Gc8qp(i_2b8}X>0jZt6+um(w)2Xu#YqBlWwSctic#Glfv{}8f Gh5TQUXbGqQ literal 0 HcmV?d00001 diff --git a/test/bytecode_2.7/01_augmented_assign.pyc b/test/bytecode_2.7/01_augmented_assign.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0391ed74caa1e30f6d7ff7d85ce8007d702141dc GIT binary patch literal 1313 zcmb7EOK;Oa5T5lTO`J3-jf%(xwkJZXCU7c6;Uyjyqzbj5N|BJ|dN+>K_<_Bq4M)m9 z;U^;Q%&Z-^2QI|g@weZ8`*~*8j`@4jv48DMeW-p7yuZSc|6u?EU-ejqSl zYJf0dYJxOCnsA8o5z3`|icgw?n<)nqMf zO7PIYDc+G;nBX=lU@aQeD&~QWvf!!!xk2S&uikzMz-#J-7F>O}z3?2Sj$UZP)$Z+u zK1@3x+pyRK;gAXY8nZLmA_8emd`803M5`nw>lLZsQ38Cm6|6pKVK<%;3s0eEnLdXIhB&nl}ewD$CsCvBR})LuTT`F zw3?3)jcd0tW#~|rvm(RCXFQB?7I`X6VkaM9V|1=*mIRp>ao>v{Dt<0`R>UDT3_^p# z1_hHsi-JXAkHS6$98iC5q<@1Wr=~0X;_!v`G&&v9+Of7BlDE&xh|Ew;_>SzW7d_pQ6emeFE8)?wSI>!Y$9cNktqm$mF| Gv1PbJ zV)Co#t`7N{to>N*tw(gf+Fh~MJuJId%cOgcwjsTUVVC%2V4(xdCL>28!$^o8*vJZN z29d8V`C5ef>(5Y^&Wye#pU#AfOyl}!%{&V{WSZAIYo-(U&>Xd7b4DroNxvMQ6KITD zu!_4F+ZZ>N`JHnju@~XmB=7=X`m*(%1a0id*6ua|56#C3GU0*^?HNvW!Bum^{;T=c zPRZ_u*uVqyo;(f3BuXIFAVX0Uag=uRDNiyP4`Psfpt8jC){@t2#oit-vWe;g*HCDl z3#~z=e2^)=R`W%{!t>6Cak0|lDi=!gY{2ypxP*R|wMub;`)ws;K6I|blFt@D??-qqDrx39#_6h%pHvPBnHy>+#o>CiJ>4kijeuXvnd zln5PXsduwoHJYm|QX=7fkv`P?0=Sx_bDS2LGXr%47Q)HAVV1UmM+P1nKqGwvtH*45 zgI4$mnn=8;0zDoAJ5i?WE-h*No2VwPEBN=Qh?9H_;bO$SLMOWD-G5dk9lSEdO&5f@ zRJG90HxYI>%6b^etRIG@|8bJ)IDvOcWvZm2q!%R}m(Eu)oxn9p+Ql=^*zX)KLh? literal 0 HcmV?d00001 diff --git a/test/simple_source/stmts/01_augmented_assign.py b/test/simple_source/stmts/01_augmented_assign.py new file mode 100644 index 00000000..a91f7279 --- /dev/null +++ b/test/simple_source/stmts/01_augmented_assign.py @@ -0,0 +1,71 @@ +""" +01_augmented_assign.py modified from + +augmentedAssign.py -- source test pattern for augmented assigns + +This source is part of the decompyle test suite. + +decompyle is a Python byte-code decompiler +See http://www.crazy-compilers.com/decompyle/ for +for further information +""" + +raise RuntimeError("This program can't be run") + +a = 1 +b = 2 +a += b; # print a # a = a+b = 3 +a -= b; # print a # a = a-b = 1 +a *= b; # print a # a = a*b = 2 +a -= a; # print a # a = a-a = 0 +a += 7*3; # print a # == 21 + +l= [1,2,3] +l[1] *= 3; # print l[1]; # 6 +l[1][2][3] = 7 +l[1][2][3] *= 3; + +# Python 2.x +# augassign1 ::= expr expr inplace_op ROT_TWO STORE_SLICE+0 +l[:] += [9]; # print l + +# Python 2.x +# augassign1 ::= expr expr inplace_op ROT_THREE STORE_SLICE+2 +l[:2] += [9]; # print l + + +# Python 2.x +# augassign1 ::= expr expr inplace_op ROT_THREE STORE_SLICE+1 +l[1:] += [9]; # print l + +# Python 2.x +# augassign1 ::= expr expr inplace_op ROT_FOUR STORE_SLICE+3 +l[1:4] += [9]; # print l + +l += [42,43]; # print l + +a.value = 1 +a.value += 1; +a.b.val = 1 +a.b.val += 1; + +l = [] +for i in range(3): + lj = [] + for j in range(3): + lk = [] + for k in range(3): + lk.append(0) + lj.append(lk) + l.append(lj) + +i = j = k = 1 +def f(): + global i + i += 1 + return i + +l[i][j][k] = 1 +i = 1 +l[f()][j][k] += 1 +# print i, l diff --git a/uncompyle6/parsers/parse2.py b/uncompyle6/parsers/parse2.py index 3dfa8230..a29787b4 100644 --- a/uncompyle6/parsers/parse2.py +++ b/uncompyle6/parsers/parse2.py @@ -117,8 +117,6 @@ class Python2Parser(PythonParser): classdefdeco1 ::= expr classdefdeco2 CALL_FUNCTION_1 classdefdeco2 ::= LOAD_CONST expr mkfunc CALL_FUNCTION_0 BUILD_CLASS - assert2 ::= assert_expr jmp_true LOAD_ASSERT expr CALL_FUNCTION_1 RAISE_VARARGS_1 - assert_expr ::= expr assert_expr ::= assert_expr_or assert_expr ::= assert_expr_and @@ -215,10 +213,12 @@ class Python2Parser(PythonParser): designator ::= expr expr STORE_SLICE+1 designator ::= expr expr STORE_SLICE+2 designator ::= expr expr expr STORE_SLICE+3 - augassign1 ::= expr expr inplace_op ROT_TWO STORE_SLICE+0 + + augassign1 ::= expr expr inplace_op ROT_FOUR STORE_SLICE+3 augassign1 ::= expr expr inplace_op ROT_THREE STORE_SLICE+1 augassign1 ::= expr expr inplace_op ROT_THREE STORE_SLICE+2 - augassign1 ::= expr expr inplace_op ROT_FOUR STORE_SLICE+3 + augassign1 ::= expr expr inplace_op ROT_TWO STORE_SLICE+0 + slice0 ::= expr SLICE+0 slice0 ::= expr DUP_TOP SLICE+0 slice1 ::= expr expr SLICE+1 diff --git a/uncompyle6/parsers/parse27.py b/uncompyle6/parsers/parse27.py index 83ce8b24..81b62acd 100644 --- a/uncompyle6/parsers/parse27.py +++ b/uncompyle6/parsers/parse27.py @@ -91,7 +91,8 @@ class Python27Parser(Python2Parser): assert ::= assert_expr jmp_true LOAD_ASSERT RAISE_VARARGS_1 # assert condition, expr - assert2 ::= assert_expr jmp_true LOAD_ASSERT expr RAISE_VARARGS_2 + assert2 ::= assert_expr jmp_true LOAD_ASSERT expr CALL_FUNCTION_1 RAISE_VARARGS_1 + withstmt ::= expr SETUP_WITH POP_TOP suite_stmts_opt POP_BLOCK LOAD_CONST COME_FROM_WITH