From a532aa5b0ee8b97fb755cb961cf8104fe489ab81 Mon Sep 17 00:00:00 2001 From: rocky Date: Thu, 16 Jan 2020 11:43:29 -0500 Subject: [PATCH] 3.7+ use attribute_w_parens like we do in pre 3.7 --- test/bytecode_3.2_run/04_call_function.pyc | Bin 3476 -> 4113 bytes test/bytecode_3.5_run/04_call_function.pyc | Bin 2871 -> 2909 bytes test/bytecode_3.6_run/04_call_function.pyc | Bin 2754 -> 2784 bytes test/bytecode_3.7_run/04_call_function.pyc | Bin 0 -> 2793 bytes test/simple_source/bug35/04_call_function.py | 4 ++++ uncompyle6/semantics/customize37.py | 16 +++++++++++++++- 6 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 test/bytecode_3.7_run/04_call_function.pyc diff --git a/test/bytecode_3.2_run/04_call_function.pyc b/test/bytecode_3.2_run/04_call_function.pyc index aceb8c1dccd9851b3eae268e769c3193b5f528e0..662d6d434440a7a21083efb54052a4c2b417296b 100644 GIT binary patch delta 625 zcmbtR&ubGw6n<~A&9AkkG%;z?YNwa7r=paCLJ({155yL+y|{&zbZ6RZJG&dZv!LKX z8t-Kp5wD6@p%4)KFT7hSJ@^NB=>|@e*?FzP8TZ4dfZ zR-Yg0i0@-c-{N@ssf@Ms+v*MhHU^>sK^5F8;0i0jI{;P&J`SA>xHVW|H+xV8cokR$ zSQR=1cnvxhxOHFz4kn3$@Oh!u5~`GL2( zU#&SrM_mkE;T?6JJ;ix-lKX)7)J*;tHdMB7jtkx2g;~U9Rkpw2lKO7ne(a!bA}Q(= zHUrLN(iYq^m|12w@kmEJqSG6IB@Wx`uKBP0 zaLtqwor;(YP}h;!G;eLRg)jeWJsXheqmpUEc`Y7r8geNjkG7k#MPDZT=r!FtYVHR- zl$*=WWcR221Yh)QdXdm`kbV@#1H(zo&quolnjLJYckfp=W8L-Tj^N?GY^g1)F_za* ZBZycc_=B7=HlyO<>3k_WN=lijp?@$!ji>+s delta 197 zcmbQJFhyD+hliKTmFs9!G6ND|1+pE0xcEN9M1=-Mp@|Dc7=52OBM3-%3+CX-*XPh&Kn+`w_4 z(Ry+M=RHP;&GuY+jEt_6^SGBNyMXLq0uo$|rTjq3DJMTUJ2Nlc)8DnID8DGgO+#$+ hcU~{X$y-@$ggAf-Y;yBcN^?@}*gzWPCcofU1OT#WF#Z4l diff --git a/test/bytecode_3.5_run/04_call_function.pyc b/test/bytecode_3.5_run/04_call_function.pyc index 5e2ef8e8a9c691b0e254c20c0b6ab925e1d0ce01..942b70a0952421174ef58614e06ff222273012e8 100644 GIT binary patch delta 107 zcmdlkc2`VUoR^pD-$aGD4IB&%j~S2v8<6b)#Kj34l|2~6SQ)Y;7@8RvQdk+XnHY*= z7)v-9niw}{GQQ+sl$;#QHIwHSS5jt4d`@a!dP&CQiJT&nxcM2?CJS(@GbynG0H;b9 Al>h($ delta 65 zcmcaBwp~nFoR^pD&7G4`o*WDej~S2v8<6b)#Kj&Pl|2|YH#0uxV3e4g%{6nf0Jk!u J%48F6bpYdZ4l4iv diff --git a/test/bytecode_3.6_run/04_call_function.pyc b/test/bytecode_3.6_run/04_call_function.pyc index ae64294dae93c3dd098375874888c5857e1f6710..a11bdced94a7abb73c9a0f3d8b97294bdc662d6d 100644 GIT binary patch delta 96 zcmX>k`ao3Kn3tF9-$aGD4IB&%j~S2v8<6b)#Kk`*D!<@o&5~$lNMX%pD*jT!(Zsl! pi}5lCqvYg!oHKcDaV2Gz#OI{urI%z(F6UBaRGU1TOPxuA6##bT8AAX7 delta 64 zcmaDLdPr2+n3tF9&7G4`o*WDej~S2v8<6b)#KkWrD!Y8}b zy;|P(z4!Xl$;l=|`{(DS?|-i| z_6IG-EyCmmdi56u`I_X?JK%yzUj_$Ea2d)d_xhgj`o8e{fe1JQjpd;TWlh#`CQ^|K zk7`fYKCf<@`VU+-WE1p;YV0%4GS=mCLbmW~Q%=hEV=kxU^noWPB$G38_OT~ll5<$M zs+fUck=u=S;pVFCH*?QO)f8Vix@}ZaUA=_lXc!&I9G>mZBTd`48?qrkB(?d9W7_eo zpXQY&wH;wJ&`~=ZS4MA{tgm8dp=igFpJ%RZ#I_vnhK0aXUbZoCIlx@&Vs@xzbdltAdLB0`G6UmHu4nL{ z(qi1mB2MhLG1+Zrz=4D%Is1kca{)8F*VLCe)|`FE3h!GeKb_l1N9GGRB zFr|c1G5T%{+!!vhZUkDi$bR(>aX$8)#I+UCFuho2NnWl4pqU}e8i*jGwaoOBEnAbS zn+$RTcNm=&KztxP(-Q#!Re15X@QXpe<7pp)2tO^lXOwjM)#ErTG84yS%*tgbfH&eT zQfvXVRfJQJmuWAhHwZoi8|t5#_^+k|0`PDWuz>qRQ^{k=7zS8UJLmV1M-6hOV<7v#|E**Fd z3)*+u*r2y9|MxoF;Bre$h#50jCI)0_YGbS4!hB?PvU`Ax2&+rJh{S)$Q5Hs6Kc@H| z0Y0<=Wh`6oX1Q{?E|6Jj#6-8${lvii-BL`z9Xd%3&~`Qs97NiKVk=2|aiY_W?18#Y z0-PkCH!(jo0ntcJXJv|ELcZafgbhx}K9P>EbbQfDs!C~dFUcxZ*=R@VJX;e}x5|QC zhwSP?@&vihg~9yU7oOg`3C3gb2-7M0X>)kNs(KZJqRPsICxb^+9X;tEG=%>Mbw>o0 z>+IC0gnNY57k8aB$K-=_{099~CzY#N42JEqBd9v`o_J4H^=w!T0B09WonVCc5bL6} zbwn*@rM9!_22xB4@Ky1)&Wuq7;;sQyxOZ+7&yf%I7M_vv-El;BxPAxc zpa{@Kjz_j@#&N%t1C+MdA`jjlB>8B^J!>aV7^Vt!?u04jLOgYacsl_)n0CuC_SexD=-;=V;0cnnF*%MFXMS z)=n_$ykRHOGKU-JE2YvO(0){|ZGxc5T$*&SP1KMW8DZUQoUySpIT_m4uaA)O36Uyd h*R0i}IbP@WVA`)oQP`@tL(GC^;Am0HoAwvNe*rIPOlSZA literal 0 HcmV?d00001 diff --git a/test/simple_source/bug35/04_call_function.py b/test/simple_source/bug35/04_call_function.py index 9a41deef..7fad3438 100644 --- a/test/simple_source/bug35/04_call_function.py +++ b/test/simple_source/bug35/04_call_function.py @@ -79,3 +79,7 @@ class ResultMixin(object): class SplitResult(namedtuple('SplitResult', 'scheme netloc path query fragment'), ResultMixin): pass + +# From 3.3.7 test_long.py +# Bug was that we need parens around first "0" +assert (0).bit_length() == 0 diff --git a/uncompyle6/semantics/customize37.py b/uncompyle6/semantics/customize37.py index 3ec60c0c..bf5ba35e 100644 --- a/uncompyle6/semantics/customize37.py +++ b/uncompyle6/semantics/customize37.py @@ -81,7 +81,7 @@ def customize_for_version37(self, version): (17, "for_block"), (25, "else_suite"), ), - "attribute37": ("%c.%[1]{pattr}", 0), + "attribute37": ("%c.%[1]{pattr}", (0, "expr")), "attributes37": ("%[0]{pattr} import %c", (0, "IMPORT_NAME_ATTR"), (1, "IMPORT_FROM")), @@ -175,6 +175,20 @@ def customize_for_version37(self, version): pass return + def n_attribute37(node): + expr = node[0] + assert expr == "expr" + if expr[0] == "LOAD_CONST": + # FIXME: I didn't record which constants parenthesis is + # necessary. However, I suspect that we could further + # refine this by looking at operator precedence and + # eval'ing the constant value (pattr) and comparing with + # the type of the constant. + node.kind = "attribute_w_parens" + self.default(node) + + self.n_attribute37 = n_attribute37 + def n_call(node): p = self.prec self.prec = 100