From 86fd5dbf7af02a1a0342e773aba03ca6ee4dae7e Mon Sep 17 00:00:00 2001 From: rocky Date: Sat, 8 Jun 2019 18:40:50 -0400 Subject: [PATCH] 3.3-3.4 pos kwargs ordering --- test/bytecode_3.3_run/04_def_annotate.pyc | Bin 0 -> 5605 bytes test/bytecode_3.3_run/15_assert.pyc | Bin 633 -> 633 bytes test/bytecode_3.5_run/04_def_annotate.pyc | Bin 3627 -> 3895 bytes test/bytecode_3.6_run/04_def_annotate.pyc | Bin 2321 -> 3625 bytes test/simple_source/bug31/04_def_annotate.py | 7 ++++--- uncompyle6/parsers/parse3.py | 12 +++++++++--- 6 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 test/bytecode_3.3_run/04_def_annotate.pyc diff --git a/test/bytecode_3.3_run/04_def_annotate.pyc b/test/bytecode_3.3_run/04_def_annotate.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a04626597e395418acb9e551bc1ec173265ecd8b GIT binary patch literal 5605 zcmcIoNp}-R5U$ZkW(Q-lIR+z^fJj(ud1W_S2qDiLd~=dFPg0MJf-E_j8Nhj*Vt#-R zxg>}Di2R#e^B0n14*9<7nbBAX9$m*}_I@+<&$oZ>5vfV$!Mn_( z1>>%W5%KkF9Pu47IWex7ylfQYts_f#%^;Y9m;o`nWFxOoU}m6xUYG9{vnN?z5KMOI z17WY2ePZ^@#(=yPSpu~K{csM7Iixs{VV9UEF^(A&b6CufY`7}G9uhahVvdM8DjPYa z2^PncDHt6Wb3)8Wg1=wPC*)`mxNua=NnPkTOPD{U3nAy2nA2j4sww0=D38qVMsG6W=f@*QfXiSEBjHUJ}qWO%&htW;vZ8p!&mSIc+ZKsF6Kt! z#^d6{&o_w!#q0o%ZHUzK@**d}m0Wm2enNnx&|6||i@77~t`pDSWx%lE$rL!EA6yyL@i*})ZS?O>(8o=0M=&<95QKwZy0_syh&xOy>fRLoTp&x`3lq|@h6Q?^_qU--riFWDLmD9fEIjklO<-hP;gaDcxyR9X|(E%pC)r!6lJeFt8URr z0?_WG1xL^!2_E@4Y~dJ$9;c3^FzD(h&+b4P_6lG5h z=6OFvm8ON;G_**~cCFG3Ja6l&SuxI1W~w%5RkO3|kB;T{9;eXU>XeVmntDX%K{Y?( zt)m*%>wX7^rLD$(TJc+9F??PLi#W_wqGlKr!*+4nszmJ9 zo7_hWs5S>NU{>LL%5$Ei3B@&f=2?ZC3iVf>cSy)u~y+MQx)B?`h~l^C>atbMCEeknRdm9Vzs2e3o2UAI(tQmquL zYsE|=+G0}GFpU$Dmf^$S)Jlw6yVH-_18Kx4c&Nf9L@^QX!8Bb=d27aUK>(Ux#*ejC zUN<#NZE_;*cb_;kYHtquINl>4k&JF~J4?`nz}r8dLE+8^KOuky1pu2xe z#tQy_Y%V>foJ&*~%tbw*?iDGi0KNBzo@zk5(i)FR^Eo=C>i6)fBO~xEFQ_9D=6FGk z0j`XMt^&%N0eJxImG| zt{UwYw(y91&b=V;J0T_>bvo@%>L5mb5O#FqsW;n|xQdfz=FZp0dRvP;+LvP9CR;|7 zI3xN=704ECO7ZSZR-+XViq7#npe@_LZCQRW5Z2e3b>ziK(v?fa4BQmo&bM zQPoL2+$2uwE1X^yY`(;*miu~yvLpZcd4@c!Cy4a!fuqZJTP`R+0QJ5uDC6H1NJl;z zCa5C%Tdi~&w0A>=XCkM!&}F>fIXB;6jKG(7*WKm1KDl{YcyNiZhm#aRNyc*t zuKx33?a8BS8nLub7~x-q?jHo{sN9X?bZ#;oO{Jr06=b2^>JphrfwKy1Hi9snnoCF5 zGv~9+VM{Z#tqWOnbzmB`P^Cs0>D`!go_UufL^3G%35l+sb@X4ZF-);r_Plq8tb!SI yXWTLO3_j=GQTHg?7}{`t)IH%2IYZ9*y~BmEfw5f|ompqx8FMb?MxC+Tpz|+l?p{#< literal 0 HcmV?d00001 diff --git a/test/bytecode_3.3_run/15_assert.pyc b/test/bytecode_3.3_run/15_assert.pyc index b0c06d71f01f1aec47411c516e68f64bf2e1b041..37df7a85dabc60fc635c38575145cf3b2abf1fd3 100644 GIT binary patch delta 16 Xcmey#@{@&q9uF^_tofG8zSU delta 16 Xcmey#@{@&q9uF_qf6Wsc*^8I}HJ=6F diff --git a/test/bytecode_3.5_run/04_def_annotate.pyc b/test/bytecode_3.5_run/04_def_annotate.pyc index 067d1c0b8161e3b5a1778b288be2b5d1d64d3e3d..c21f152b32b0e471268af39a74c1a2f07413c384 100644 GIT binary patch delta 1251 zcmZWnOHUI~6#nkaw6?T^R4Hv~sR9)p1flo@AJn&^(S-|>YGRO62+_E>tqYBj#JY5W zxf^w%KfsN~g-d^fiHQbxx*)7^MO=8!ErS^E^n5+%JI{M&-WEOnwN>!7fqVP2jv;(vg)Qd$APl2kB^VA3G z7lX0spxO>9fjY#bU7!KbZd-_5TcrW*0R^Bz(B4)9R69^xNP&iIhhfk@G~v`XGb8^o zqry-bGzQuqj8A#BM4me&5%E%O8F@ac^o#J(yAaVTpJw z5tgeg_3aD|;E{ud!Xy5qN`J|!}&e@*lhhdK1PgvS`5a`w@}1}-OUOFrYkH_3cqA5*PH zBchdC5nDv>HmOJ^tH)SB&GK)lF%$87t1E5nn0xh7PP#J32A}@QisV<_+tUx1_uI2N zxjbu+Q_(5*@et$urw=h)VPirJdCz()Ly*;3bIVVwvbpc?8P5ry7m)4il7MV{$)ow1 xhL%;^b?8yiK zJ(RqQC;bCVylBF~lV`n~H1VP_T#Z~kIP=Pq65r;1nfbn%dEeXJL;qbm=Q>X8OXTl^ zgDAjH=vkD*I_>&b;~;n3^q>k*wE)wAV}L%iE!YRxv0)Q00FHA)*fLWL}c>z)$Qr##yY z8X|ye+`w*bYOUQPt@9wV$g^%~^?jhyMalh*6IE1`oVNrB`chkkjSu(DsHMJ#w@WU4 zbZIbzPJw@hPN-3>H|EOY6xUe?AyevMq&_r4aW-IWAxG4Y2s#r1Lvg~#=0EpPFUm#6@q(o;1VZ-VSu3E z%A(qhC&jFK9-pkFnCEvZGYtHOI~LX+HDsQ1zNnmGVE5XMEU9nte1(l=OyA7VlQTUt hX?kJLOjw?oGKa;m$i)(Ue#j3`h$T@rJmDLI;vY|7v5Wu! diff --git a/test/bytecode_3.6_run/04_def_annotate.pyc b/test/bytecode_3.6_run/04_def_annotate.pyc index 11e60bea47803a86b4956b4d59f2e5f2b6225fe7..8aac3046e9970f47f424a89135182b0b24ae76f4 100644 GIT binary patch literal 3625 zcmcImNpBp-74GU~NKqt3QRG;%7EdIFaXU7}O^YqbrX<_4yiiG$1z-#`hVy!;vB(*w zy2p+NJXyL5@X-nQ2l5y4D{}5*d@u<3mRpd6zwdSTa5#=2``~K4>Z(_--d?Y2d17Mh z&ny4?^xsDu=No6BjbOYANakI~k&j|0cErR++&y1B@t+3ku6&$hCD`+%A|t?g@<~DI zE9Iyh0XB&JK6Y#`kfSpG)L*a2+7NzHj)8ha?h`M^_gtBl6TpmOHnV4BR;t){M1BKq zV{#Jfr{raG4r`*dV|T+V^cmsg-&O@4u$6L%dsFBhIVa^Z=)J}JMG z3-U|wos(aI%Q1N%uS$sdYw~N%r{d$-{kpvI%+=9+e{_i>SpeTfSpwf_@LiS_@Ld7l z6DoHGdoRORSL7-vX65(P1-NV2^`^W9{?*u(>oV~~dvRJ$(|_cCWfGgd^rgwy!}uM!*)j#y*GlEds@xLiN%0q_Nj??j^G~G+lD;uN@hpq+r6KPtAW*jecHA+g4Zt8)E`F^)_DZSQQwQPSz!Mto_bySco0X<;Rj zxEU47#q&FlvmlL=bdj4AvU7|bLmzs|{D5%v~X2slz13`#-O|%ZynmkK?t_wS8s#dB~I^ z+#xmHl!v+L4FuRb*q8ZCqyHPvD<{aJ$gOFNL!%kcz)%~P2pU!<2t_sB0YUByQs!zE zyGjuhw|^BK?4kvE{Fpav#1K^2^X$sZUtb{c+9~iTB~p55GV{1WDFh}b!>Cdi)YRE^ zQ-hQ2H3Kya%FP0wd98LD`s)EsG!FDjK)pcnn`b~%N~RXQ@qt>i5qg=~$n#F~h_R#7${MStnmxAK*Nd{RAFBrNSePxh2QYIL3%i>&&A z!8BS8etw{vnGe}+_bxZ3$hRz{fjr=0A+Lc6xK=TGFw#SGT)KTH7EoO)PY7*A~LwS<=}!f$FtR zGv~%Dt6tl9TthD92VAq^P*tKeeT&K?ds?mOO}wi*6+G0Ivcf2%p^Wli!s~t8d`mkU zfPV8ZS_LHBU8Ym)iNR~d6%Q{AUwAhL+0h5xot=(NlY8n))tJf1#{c2`&wZckXEHyD zx0=I_ABiGFC5qm{=EC>A69Yo#i}kfIuxCMI&#~j-uqWBkt^uA0Is6(Ht^x8Kb}i?j zKXB}5^x=HwnWf9`0+Nr>rOszY%qd6QM{Y8mx?dW_c&D7y1Lk5M;{$`|RdS_|34jTJ z`G6RqBPweu{BSK9xW4Giu#)*GHH+D?sC+@RI_(69cJfw|#5Tq3J!?Bwjn6#X2U*bE z>eNx-hRcfDcQ_O58<266)-j!EmD2I|{oZU1@a z+om>m)gA{LtCaGCpPFUXfS<{i_2=3eX2j;}`OmZ0fwfFr6mWZk6Ee+LPv&6{(k`Bz z`iQiAy{U67tDfaWX!+!@dCM{nfU%G(S_LU&fZ8Lx`(q&MwN0;>G`Q{I#}X2wi)Y%-Xs%#55d QbLPCMnltW$GLzjrZYQhO9ltC>q>G7 z9(vPo+c)3^`UZU#-S#T4kgI-2Ynz{>)2Vi(Jvx%k&v(v|HYX;kkJjG*ycja}H@nbE zptsQVUl;_FOme}`eBlZIG}!gT9Z?pQGcLwN^)%e|#hR#z3Ct(O6y|{pv42{8@`vZB znGrQhl$e90YhoUfN-vmL5Z6zcxc=7LEn~JQmM~kwtm5>JLDKSBAZ~~i?5~QuWD9sV zA>)>aplw`M#j3b1#^3s!$#JpzmUAY;Z5FThYiX9{CN=GBFKWcT;IjX@f($J~Zp)y@n_N)^XWMx^5qKJ2KIE zPc`NJMsIKP;r$0+B|^56fgy6Edu;tyo|8UJhZ$EDjFzkVjxD`>^)%Ho=8D#vWm-q0 zKWTFY1|ZDHpuosCCNA5c)$T|e9OgpWu|}`ek}!17R%F)91yLobRIaowXY#1i&ZI3j zJGquE;cPDk(qn_XD>I@B^L#Z6`W-Ta^>3zGl&Zbnq0CHV_EQtVwY1kUIx>0mHSpnY znq(+7`jdms=o$z@^%9zjT!F9G@cY0DVDykq4MCa*-LIK_8Hx626lEwYO~$m%Tgq>eARd@n`Q()2_STzkr0B;FvAT*42$?Th$J!f4;{wt zk+T%UZFEh-+zDR)Pxp|M+APp1GK2B{qmP)nL7Ngiv_HwSf->u& z&=Xrrl3#jhr&v+ZWqVxIsgl$Z2Fh}$zQW!7QowyIZqWwXISjb;5ibPYUAln?5UndcN~9_86TXr5hnmA0Oy+#Cj=)1=Lh1r)GgJW_RFt=yTR2ubU9Pv60Xub|I$t+ z!#lg3XBwfN{8nqJ3})ZcO_Xg7_!DqZ=wd{Pd7!cUQkkL97QJT9vB38CofYbL list: return (x, varargs, kwargs) -#def test9(x=55, *varargs: int, y=5, **kwargs): -# return x, varargs, int, y, kwargs - +def test9(arg_1=55, *varargs: int, y=5, **kwargs): + return x, varargs, int, y, kwargs def test10(args_1, b: 'annotating b', c: int) -> float: return 5.4 @@ -75,6 +74,8 @@ def ann2(args_1, b: int = 5, **kwargs: float) -> float: assert test1(1, 5) == (1, 5, 4, {}) assert test1(1, 5, 6, foo='bar') == (1, 5, 6, {'foo': 'bar'}) assert test2(2, 3, 4) == (2, 3, 4, 4, (), {}) +assert test3(10, foo='bar') == 5.4 +assert test4(9.5, 7, 6, 4, bar='baz') == 5.4 ### FIXME: fill in... assert test6(1.2, 3) == (1.2, 3, None) assert test6(2.3, 4, 5) == (2.3, 4, 5) diff --git a/uncompyle6/parsers/parse3.py b/uncompyle6/parsers/parse3.py index e4be6860..6a8fe406 100644 --- a/uncompyle6/parsers/parse3.py +++ b/uncompyle6/parsers/parse3.py @@ -1064,12 +1064,18 @@ class Python3Parser(PythonParser): # Normally we remove EXTENDED_ARG from the opcodes, but in the case of # annotated functions can use the EXTENDED_ARG tuple to signal we have an annotated function. # Yes this is a little hacky + if self.version < 3.5: + # 3.3 and 3.4 put kwargs before pos_arg + pos_kw_tuple = (('kwargs ' * args_kw), ('pos_arg ' * (args_pos))) + else: + # 3.5 puts pos_arg before kwargs + pos_kw_tuple = (('pos_arg ' * (args_pos), ('kwargs ' * args_kw))) rule = ('mkfunc_annotate ::= %s%s%sannotate_tuple LOAD_CONST LOAD_CONST EXTENDED_ARG %s' % - (('pos_arg ' * (args_pos), ('kwargs ' * args_kw), - ('call ' * (annotate_args-1)), opname))) + ( pos_kw_tuple[0], pos_kw_tuple[1], + ('call ' * (annotate_args-1)), opname)) self.add_unique_rule(rule, opname, token.attr, customize) rule = ('mkfunc_annotate ::= %s%s%sannotate_tuple LOAD_CONST LOAD_CONST EXTENDED_ARG %s' % - (('pos_arg ' * (args_pos)), ('kwargs ' * args_kw), + ( pos_kw_tuple[0], pos_kw_tuple[1], ('annotate_arg ' * (annotate_args-1)), opname)) else: # See above comment about use of EXTENDED_ARG