From 10695d882e20fb2b87e785dfa3534fdfd56f9006 Mon Sep 17 00:00:00 2001 From: rocky Date: Fri, 24 Jan 2020 06:14:28 -0500 Subject: [PATCH] Fix bug in 3.7 chained comparison semantic action --- test/bytecode_2.6_run/01_triple_compare.pyc | Bin 482 -> 961 bytes test/bytecode_3.2_run/01_triple_compare.pyc | Bin 499 -> 970 bytes test/bytecode_3.3_run/01_triple_compare.pyc | Bin 528 -> 1012 bytes test/bytecode_3.6_run/01_triple_compare.pyc | Bin 386 -> 693 bytes test/bytecode_3.7_run/01_triple_compare.pyc | Bin 0 -> 696 bytes test/bytecode_3.8_run/01_triple_compare.pyc | Bin 0 -> 708 bytes test/simple_source/bug33/01_triple_compare.py | 20 ++++++++++++++++++ uncompyle6/semantics/customize37.py | 7 ++++++ 8 files changed, 27 insertions(+) create mode 100644 test/bytecode_3.7_run/01_triple_compare.pyc create mode 100644 test/bytecode_3.8_run/01_triple_compare.pyc diff --git a/test/bytecode_2.6_run/01_triple_compare.pyc b/test/bytecode_2.6_run/01_triple_compare.pyc index 62768f9bbb6a7c8baeed224704c14c5183163cd9..210dce5b48eeb870b89cca78b5e8d76c336144dd 100644 GIT binary patch literal 961 zcmb7CO;5r=5S?wS1>#4%X!K~JAs!UNNn?zJ$dLowJkVfU%_4N0?qV=e55^y;f5l(m zn}q`9U}DpKeVwN-f>!cUb>~ZnE!O#;xMD$5?2O=mIgf)mv&URdl~e6ZNC*b41T!2Cc5ScL=O9XRy1 z#Fa-P;ai!CF0BM;HQ=oVP^jV_YlQ#`xLydjH1G=nTW;hTSQjWgQuK1}km}?d8@FC>De*I~|)W;f@hX*=Qku{N_J zORbVUg!D0hybZBQ-k;;0+SXr(U6>Le2p%MwCNNw0X=oj1MyljC%T(6kPFXm$?0>-(1%U&H!AVTx>-p;OOW@qyLUQhiU-pCv6NKRrD< zK1nLAczISXmQ$U+U;ebOX>+1X@_m{snbbeyL`^^dVL8yT!!w6dhjWJ`hgaJ>=Djb- zTul!|s3v-|0KXetzeBN=A@r~z0e#kx5%lMV6wqH9vIRZgNa|V}+HPcsEQVffq-!rw z{^NA0(~+lvr!7xu6gGQ9Purfxo_1=Qb=PB~|GTiDjz@F{W5w6v`_t$jJAQc2^E&s6 z4p*tE>TW7i7H??D91sqK#N az7oftR}RNJUzF13=|?wze0SaWCVm9J^0Ko4 delta 87 zcmX@b{+U@mhliJ|tzmmiG6ND|2eKW2xHw~?d=_)C2FJvy*O~n^m?x_5jR5Ph<}>)ox}(nDw=$3ihVG$}a+N=XO_J?&)=g{0JMSKc7JYcG=34`?qT zzazgX|E0$s(iz2F>98#%!g_vBGuF&V+UAZM2I=a#Fg%XT?6)!izaEK{SFt3_Fu z#_CzQ``KRX@9*xtDO#;~dDbjfQ(eAZeYelZxlpF~GF>QHbej!%hll`TvxDXEdkzmA zP94r29yvT+pFjI@>8{dSB2+0oRfL}b*W0MqGKSs>B%luhnLxh}q=5bq$R6~(lXIZz zL)$>6&{y7>?j2};aXLg3Pa{uzo>Gte^^HC4dzyMW=x8;(>nHu&g$4BipX^xiu>^O? z^4mji@hN@WmZt4)R+*-LPD|z$0g_B)i2plV*bQ5ZbNY?&j}91+sVL@(+NrQlNE{hc k>Q*)NiPnwYw4blevHLYD$9ubMq+OKnTz_(IS$dxS0ZMeC8qvFwIb;0H#@rG{7`tkpY-yEwV^qOk>Dq zD{=tS>_r|RaTcJ_*$nxspez@XqRe8={5)}>Xt5ZOU|`{3 hM28s+MSMURKTVd&R*VWPAok=)Mr96=Q5@`k>;Q&QL`?ty delta 76 zcmdnW+Qh7E%*)Hw*04Q>or!_rF#{4{2C^N1xHxK}ax_~ogC=J(<77uhk%W TPflY}nB2{z#0J#Iz`+gx4BQQO diff --git a/test/bytecode_3.7_run/01_triple_compare.pyc b/test/bytecode_3.7_run/01_triple_compare.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68d14dd74d5d065e63b5dd87c7add99e93d5f693 GIT binary patch literal 696 zcmZ8fv2GJV5S`gO`_4vo5(-E`K^aqEM@f-LQIvo{5k(X!ofB~~o->@zzO!b}Q6fQu z@-vZAq~JrSx24K2P%*o<*T9^1-rG03JG(RYrqybKSoZVP$BPi)mz^vv5OO3#Uy36j zyoElHN-=~0a^x2jh(9YrgrY~G*LSIwqdqGX0@c0xfuf~asqaWJHRQa2n&;4YGDJyX z&7#fwR)*dbNB9-y`O2rHay$nmi)2r5`Y2&|wD-S*4)&uWttJDVv)%99?=788rsFix z<&1}E_tWh2&Q7EvoK&L~+N(~wiN5(mgN@dkSa_YDpV zjtm|fd_S~7YyVvOhX{m(x%#$1UU&0=Hyr}MbQtoML*$;r8t)0Jyv|1sBR;XZdpz*{ zf`y(b&uX5bXMtyR&mzxa%kl<4xaLW7=LNM7S(UGY2Cr9Bmj46HT9xW*QMpW)#d8t$ zGjR~c`2Y6>xGj;>PB<@NoFt=63ZIzvvDPV9Sy{YeF4-;nE0t@Z%NHL^N}7$+L)Q;0 I#nDOh2Z~dR6aWAK literal 0 HcmV?d00001 diff --git a/test/bytecode_3.8_run/01_triple_compare.pyc b/test/bytecode_3.8_run/01_triple_compare.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d9e14e9de84cd240f3d6c2ce8a8181602ee603de GIT binary patch literal 708 zcmZ8fu}<7T5S>~3&OQ(jCE|hfpGv0wEz95@8)ThFHF{PqRKmq|hLK z28kj?J|y+FRQv)}X7}zE!dUy}%^UBIcgCkPGgBaz{ari%76Lrk;H?D`v}Nh<0tAHj za0aAO3?YCVd6@#i<03>TS`>PHn`$}g<3b@&-K$?Iny8h!LyD;(=LIx%0?p|zN{NYC zZfhUN(n|t_zhG3eTp*R>2`E62eZkSQq~Y1#;{lp@78PmL@93QEeg`kBI_nR5X`;&^ zchilF;nmjGMr$*vIJ0uM><>Det`B~i`6ScHb*Gn6GCrmur)VVr$TdNOErUA-I|eTe z?i>8lwaJP7_u+p;B_zz%?b!1N7YDrLJn)M1A+I`*+;YCgpTw)Y&TZ!-KD4@P0Py3O zg`O$TYM!BIfoFBkBF|#W@&^BQLzE$pnrbid+QKFpym<{-{uMBDRjR9T_cC1;A4SxQ z0uaXd{`mnsE19EaIBH{@B$t^qKQXiWTBlrPW$~H0WcS*eQf`c{UcB2cY1m8m+)S(# HM~BfrF*%DT literal 0 HcmV?d00001 diff --git a/test/simple_source/bug33/01_triple_compare.py b/test/simple_source/bug33/01_triple_compare.py index 6878e042..dc28d36c 100644 --- a/test/simple_source/bug33/01_triple_compare.py +++ b/test/simple_source/bug33/01_triple_compare.py @@ -14,3 +14,23 @@ def _is_valid_netmask(netmask): # See in 2.6.9 quopri.py ishex(): assert not '0' <= __file__ <= '9' or 'a' <= __file__ <= 'f' or 'A' <= __file__ <= 'F' + +# From 3.7 bug-grammar.py + +# Bug in 3.7 was handling the last line where compare_chained -> compare_chained37 and +# therefore compare_chained has one child, not two as it normally does. + +def test_comparison(): + ### comparison: expr (comp_op expr)* + ### comp_op: '<'|'>'|'=='|'>='|'<='|'!='|'in'|'not' 'in'|'is'|'is' 'not' + if 1: pass + x = (1 == 1) + if 1 == 1: pass + if 1 != 1: pass + if 1 < 1: pass + if 1 > 1: pass + if 1 <= 1: pass + if 1 >= 1: pass + if 1 in (): pass + if 1 not in (): pass + if 1 < 1 > 1 == 1 >= 1 <= 1 != 1 in 1 not in 1 is 1 is not 1: pass diff --git a/uncompyle6/semantics/customize37.py b/uncompyle6/semantics/customize37.py index 4a420ad9..09f96d8f 100644 --- a/uncompyle6/semantics/customize37.py +++ b/uncompyle6/semantics/customize37.py @@ -276,6 +276,13 @@ def customize_for_version37(self, version): self.n_call = n_call + def n_compare_chained(node): + if node[0] == "compare_chained37": + self.default(node[0]) + else: + self.default(node) + self.n_compare_chained = n_compare_chained + def n_importlist37(node): if len(node) == 1: self.default(node)