From 056f600da1a175b116681f14d81d4f5673e73c2c Mon Sep 17 00:00:00 2001 From: rocky Date: Fri, 7 Oct 2016 22:42:30 -0400 Subject: [PATCH] Start Python 2.1 bytecode decompile --- __pkginfo__.py | 2 +- test/bytecode_2.1/applyEquiv.pyc | Bin 0 -> 990 bytes test/bytecode_2.1/augmentedAssign.pyc | Bin 0 -> 1190 bytes test/bytecode_2.1/docstring.pyc | Bin 0 -> 1541 bytes test/bytecode_2.1/exceptions.pyc | Bin 0 -> 3250 bytes test/bytecode_2.1/exec.pyc | Bin 0 -> 199 bytes test/bytecode_2.1/expressions.pyc | Bin 0 -> 355 bytes test/bytecode_2.1/extendedImport.pyc | Bin 0 -> 674 bytes test/bytecode_2.1/extendedPrint.pyc | Bin 0 -> 249 bytes test/bytecode_2.1/globals.pyc | Bin 0 -> 325 bytes test/bytecode_2.1/import.pyc | Bin 0 -> 608 bytes test/bytecode_2.1/lambda.pyc | Bin 0 -> 1076 bytes test/bytecode_2.1/listComprehensions.pyc | Bin 0 -> 857 bytes test/bytecode_2.1/misc.pyc | Bin 0 -> 1063 bytes test/bytecode_2.1/nested_elif.pyc | Bin 0 -> 1048 bytes test/bytecode_2.1/print.pyc | Bin 0 -> 259 bytes test/bytecode_2.1/slices.pyc | Bin 0 -> 548 bytes test/bytecode_2.1/test_applyEquiv.pyc | Bin 0 -> 1030 bytes test/bytecode_2.1/test_applyEquiv.pyo | Bin 0 -> 961 bytes test/bytecode_2.1/test_augmentedAssign.pyc | Bin 0 -> 1482 bytes test/bytecode_2.1/test_augmentedAssign.pyo | Bin 0 -> 1347 bytes test/bytecode_2.1/test_class.pyc | Bin 0 -> 1957 bytes test/bytecode_2.1/test_class.pyo | Bin 0 -> 1852 bytes test/bytecode_2.1/test_del.pyc | Bin 0 -> 842 bytes test/bytecode_2.1/test_del.pyo | Bin 0 -> 770 bytes test/bytecode_2.1/test_docstring.pyc | Bin 0 -> 1651 bytes test/bytecode_2.1/test_docstring.pyo | Bin 0 -> 1549 bytes test/bytecode_2.1/test_empty.pyc | Bin 0 -> 91 bytes test/bytecode_2.1/test_empty.pyo | Bin 0 -> 88 bytes test/bytecode_2.1/test_exceptions.pyc | Bin 0 -> 3350 bytes test/bytecode_2.1/test_exceptions.pyo | Bin 0 -> 3074 bytes test/bytecode_2.1/test_exec.pyc | Bin 0 -> 209 bytes test/bytecode_2.1/test_exec.pyo | Bin 0 -> 194 bytes test/bytecode_2.1/test_expressions.pyc | Bin 0 -> 375 bytes test/bytecode_2.1/test_expressions.pyo | Bin 0 -> 363 bytes test/bytecode_2.1/test_extendedImport.pyc | Bin 0 -> 684 bytes test/bytecode_2.1/test_extendedImport.pyo | Bin 0 -> 657 bytes test/bytecode_2.1/test_extendedPrint.pyc | Bin 0 -> 259 bytes test/bytecode_2.1/test_extendedPrint.pyo | Bin 0 -> 241 bytes test/bytecode_2.1/test_functions.pyc | Bin 0 -> 3109 bytes test/bytecode_2.1/test_functions.pyo | Bin 0 -> 2953 bytes test/bytecode_2.1/test_global.pyc | Bin 0 -> 912 bytes test/bytecode_2.1/test_global.pyo | Bin 0 -> 852 bytes test/bytecode_2.1/test_globals.pyc | Bin 0 -> 345 bytes test/bytecode_2.1/test_globals.pyo | Bin 0 -> 315 bytes test/bytecode_2.1/test_import.pyc | Bin 0 -> 886 bytes test/bytecode_2.1/test_import.pyo | Bin 0 -> 853 bytes test/bytecode_2.1/test_import_as.pyc | Bin 0 -> 1039 bytes test/bytecode_2.1/test_import_as.pyo | Bin 0 -> 1006 bytes test/bytecode_2.1/test_integers.pyc | Bin 0 -> 789 bytes test/bytecode_2.1/test_integers.pyo | Bin 0 -> 726 bytes test/bytecode_2.1/test_lambda.pyc | Bin 0 -> 1156 bytes test/bytecode_2.1/test_lambda.pyo | Bin 0 -> 898 bytes test/bytecode_2.1/test_listComprehensions.pyc | Bin 0 -> 1408 bytes test/bytecode_2.1/test_listComprehensions.pyo | Bin 0 -> 1291 bytes test/bytecode_2.1/test_loops.pyc | Bin 0 -> 848 bytes test/bytecode_2.1/test_loops.pyo | Bin 0 -> 740 bytes test/bytecode_2.1/test_loops2.pyc | Bin 0 -> 472 bytes test/bytecode_2.1/test_loops2.pyo | Bin 0 -> 442 bytes test/bytecode_2.1/test_misc.pyc | Bin 0 -> 1062 bytes test/bytecode_2.1/test_misc.pyo | Bin 0 -> 993 bytes test/bytecode_2.1/test_nested_elif.pyc | Bin 0 -> 1058 bytes test/bytecode_2.1/test_nested_elif.pyo | Bin 0 -> 878 bytes test/bytecode_2.1/test_nested_scopes.pyc | Bin 0 -> 4744 bytes test/bytecode_2.1/test_nested_scopes.pyo | Bin 0 -> 4450 bytes test/bytecode_2.1/test_prettyprint.pyc | Bin 0 -> 3583 bytes test/bytecode_2.1/test_prettyprint.pyo | Bin 0 -> 3475 bytes test/bytecode_2.1/test_print.pyc | Bin 0 -> 269 bytes test/bytecode_2.1/test_print.pyo | Bin 0 -> 242 bytes test/bytecode_2.1/test_print_to.pyc | Bin 0 -> 635 bytes test/bytecode_2.1/test_print_to.pyo | Bin 0 -> 605 bytes test/bytecode_2.1/test_single_stmt.pyc | Bin 0 -> 110 bytes test/bytecode_2.1/test_single_stmt.pyo | Bin 0 -> 104 bytes test/bytecode_2.1/test_slices.pyc | Bin 0 -> 1060 bytes test/bytecode_2.1/test_slices.pyo | Bin 0 -> 979 bytes test/bytecode_2.1/test_tuple_params.pyc | Bin 0 -> 1295 bytes test/bytecode_2.1/test_tuple_params.pyo | Bin 0 -> 1244 bytes test/bytecode_2.1/test_tuples.pyc | Bin 0 -> 749 bytes test/bytecode_2.1/test_tuples.pyo | Bin 0 -> 615 bytes test/bytecode_2.1/tuple_params.pyc | Bin 0 -> 947 bytes test/test_pythonlib.py | 2 +- uncompyle6/parser.py | 8 ++- uncompyle6/parsers/parse2.py | 18 +++--- uncompyle6/parsers/parse21.py | 57 ++++++++++++++++++ uncompyle6/scanner.py | 2 +- uncompyle6/scanners/scanner21.py | 27 +++++++++ uncompyle6/scanners/scanner22.py | 7 +-- uncompyle6/scanners/scanner27.py | 7 +-- uncompyle6/semantics/pysource.py | 29 +++++---- 89 files changed, 128 insertions(+), 31 deletions(-) create mode 100644 test/bytecode_2.1/applyEquiv.pyc create mode 100644 test/bytecode_2.1/augmentedAssign.pyc create mode 100644 test/bytecode_2.1/docstring.pyc create mode 100644 test/bytecode_2.1/exceptions.pyc create mode 100644 test/bytecode_2.1/exec.pyc create mode 100644 test/bytecode_2.1/expressions.pyc create mode 100644 test/bytecode_2.1/extendedImport.pyc create mode 100644 test/bytecode_2.1/extendedPrint.pyc create mode 100644 test/bytecode_2.1/globals.pyc create mode 100644 test/bytecode_2.1/import.pyc create mode 100644 test/bytecode_2.1/lambda.pyc create mode 100644 test/bytecode_2.1/listComprehensions.pyc create mode 100644 test/bytecode_2.1/misc.pyc create mode 100644 test/bytecode_2.1/nested_elif.pyc create mode 100644 test/bytecode_2.1/print.pyc create mode 100644 test/bytecode_2.1/slices.pyc create mode 100644 test/bytecode_2.1/test_applyEquiv.pyc create mode 100644 test/bytecode_2.1/test_applyEquiv.pyo create mode 100644 test/bytecode_2.1/test_augmentedAssign.pyc create mode 100644 test/bytecode_2.1/test_augmentedAssign.pyo create mode 100644 test/bytecode_2.1/test_class.pyc create mode 100644 test/bytecode_2.1/test_class.pyo create mode 100644 test/bytecode_2.1/test_del.pyc create mode 100644 test/bytecode_2.1/test_del.pyo create mode 100644 test/bytecode_2.1/test_docstring.pyc create mode 100644 test/bytecode_2.1/test_docstring.pyo create mode 100644 test/bytecode_2.1/test_empty.pyc create mode 100644 test/bytecode_2.1/test_empty.pyo create mode 100644 test/bytecode_2.1/test_exceptions.pyc create mode 100644 test/bytecode_2.1/test_exceptions.pyo create mode 100644 test/bytecode_2.1/test_exec.pyc create mode 100644 test/bytecode_2.1/test_exec.pyo create mode 100644 test/bytecode_2.1/test_expressions.pyc create mode 100644 test/bytecode_2.1/test_expressions.pyo create mode 100644 test/bytecode_2.1/test_extendedImport.pyc create mode 100644 test/bytecode_2.1/test_extendedImport.pyo create mode 100644 test/bytecode_2.1/test_extendedPrint.pyc create mode 100644 test/bytecode_2.1/test_extendedPrint.pyo create mode 100644 test/bytecode_2.1/test_functions.pyc create mode 100644 test/bytecode_2.1/test_functions.pyo create mode 100644 test/bytecode_2.1/test_global.pyc create mode 100644 test/bytecode_2.1/test_global.pyo create mode 100644 test/bytecode_2.1/test_globals.pyc create mode 100644 test/bytecode_2.1/test_globals.pyo create mode 100644 test/bytecode_2.1/test_import.pyc create mode 100644 test/bytecode_2.1/test_import.pyo create mode 100644 test/bytecode_2.1/test_import_as.pyc create mode 100644 test/bytecode_2.1/test_import_as.pyo create mode 100644 test/bytecode_2.1/test_integers.pyc create mode 100644 test/bytecode_2.1/test_integers.pyo create mode 100644 test/bytecode_2.1/test_lambda.pyc create mode 100644 test/bytecode_2.1/test_lambda.pyo create mode 100644 test/bytecode_2.1/test_listComprehensions.pyc create mode 100644 test/bytecode_2.1/test_listComprehensions.pyo create mode 100644 test/bytecode_2.1/test_loops.pyc create mode 100644 test/bytecode_2.1/test_loops.pyo create mode 100644 test/bytecode_2.1/test_loops2.pyc create mode 100644 test/bytecode_2.1/test_loops2.pyo create mode 100644 test/bytecode_2.1/test_misc.pyc create mode 100644 test/bytecode_2.1/test_misc.pyo create mode 100644 test/bytecode_2.1/test_nested_elif.pyc create mode 100644 test/bytecode_2.1/test_nested_elif.pyo create mode 100644 test/bytecode_2.1/test_nested_scopes.pyc create mode 100644 test/bytecode_2.1/test_nested_scopes.pyo create mode 100644 test/bytecode_2.1/test_prettyprint.pyc create mode 100644 test/bytecode_2.1/test_prettyprint.pyo create mode 100644 test/bytecode_2.1/test_print.pyc create mode 100644 test/bytecode_2.1/test_print.pyo create mode 100644 test/bytecode_2.1/test_print_to.pyc create mode 100644 test/bytecode_2.1/test_print_to.pyo create mode 100644 test/bytecode_2.1/test_single_stmt.pyc create mode 100644 test/bytecode_2.1/test_single_stmt.pyo create mode 100644 test/bytecode_2.1/test_slices.pyc create mode 100644 test/bytecode_2.1/test_slices.pyo create mode 100644 test/bytecode_2.1/test_tuple_params.pyc create mode 100644 test/bytecode_2.1/test_tuple_params.pyo create mode 100644 test/bytecode_2.1/test_tuples.pyc create mode 100644 test/bytecode_2.1/test_tuples.pyo create mode 100644 test/bytecode_2.1/tuple_params.pyc create mode 100644 uncompyle6/parsers/parse21.py create mode 100644 uncompyle6/scanners/scanner21.py diff --git a/__pkginfo__.py b/__pkginfo__.py index 5869b595..9e218966 100644 --- a/__pkginfo__.py +++ b/__pkginfo__.py @@ -38,7 +38,7 @@ entry_points={ ]} ftp_url = None install_requires = ['spark-parser >= 1.4.0', - 'xdis >= 2.3.0'] + 'xdis >= 2.3.1'] license = 'MIT' mailing_list = 'python-debugger@googlegroups.com' modname = 'uncompyle6' diff --git a/test/bytecode_2.1/applyEquiv.pyc b/test/bytecode_2.1/applyEquiv.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b7f026a9654b0f986d229c1f00707c2afa7d836b GIT binary patch literal 990 zcmaJvfWJPE8&P=vyD-2VaKL*3BjGOaB}^9X8T>Ym zGMF5u0n>zO!L-A@1HAsk%Xg4i0oGx zrE5`q`98ilajwa$ogbaLfY*?U0D^GJFrLl6UcEoRwBO#&u9DmF<=LbQrzvwuCA8s6 z>U^0WXbF$VwFKADY^08a_ZqFw(sfdZ5*9VW9Bq_ve+aXEekl_Am$(+#EWX{p!kmp{ zC)goBRE1^z1a8>p*AJ@r<>aWa`mSK!)J(tFT)(Oc2gIQSlZao#yrsFQ|5lfE)k&00 znqniEVpMWu;AV16=^`KmwgSMJ%YrImnMfF+4r|}Op>*2HA66I3?od>1H7=T28{@-( zUA>Dgr~mPETAO6R&!(Tlq$|ar%$EZHyB^B4$i(?AgDtS#=aZp7n<)w!dmT6E#=eHW$G9$(St+4WQIcU*L( JEb}5S%71C^t`7hJ literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/augmentedAssign.pyc b/test/bytecode_2.1/augmentedAssign.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3f92c2a9ebc8e5c9d34fb429c8b540343c49b97f GIT binary patch literal 1190 zcma)5+fEZv6kTU#dYRISR9dNMsUk8ILE|NgAu+}Wd?5IM2}xhb&>6;oQfsFed^(93 z6F?3;YS!J~OuBlbxQOz1Q0JIn(}CDSdtU`dJtJ6?u~H7NGfe5dfbQ^b`Vx z4v{hf3mqaAgg~h9gebMGSNc+hJRKv`8L}}(E*k`x_{<0r*a#fVPI6t5daOh=veB`i zXA#m==vrtH-LN-PyTQseNsyTg5`I(H|3M~!`l?V)Gsq$00G3CKS>{ZDB^6p3Ww%qR zk>w(_@P}GSscRV(*$oAJ%lb|-T_xisQ1d+)ATI}M#f-2)t+w4bb=L9><6*C(z3&D z99ENLYY0mC%-+k;56qwzMtL;CB2S4g?xBFv{v$~jmT`_TYhEJPWN+%n618R48BAf< zE6c@gP`r5?C#}KoT{QGhT3x@tJZc?;t>I~(E94$|wGkIY*dkmJj)=C1RS`TeAAMF?RWZ?0S-O$E5e9Mq&zi)G!fAm8O3horL{S7`#Z5IO?wt zJ{sS{H6(e`wz5@4?RXXHhVYF%FtV5A2!HT4L!s_Uwz=2e|% eUNzO6RVFvBYV@nZ_>SeQ;$zLIa<0Z4P4yegdbp4P literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/docstring.pyc b/test/bytecode_2.1/docstring.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7589f67262cd9f4e2f386768ef19700d4ac1838d GIT binary patch literal 1541 zcmcIkL2nX482x4!w9>_t)?(10O9QxiFqtJ@dhue^6DHCF^s+&Au_T6VI$WCA%)$Ny z|A4>GKjHgkncbFv*n=z#`^|jwzIpG>%&Xtk%CDcFjwghVi=TRrMia$Er+C>VU8Pvi zH9|ppk79?W7F39WHMaRFDW7V@G&maAh^ePbu^WevzhYo9s6-Q@zvsD zHvd{NH3h1w3fHWXe#oT;fn(>HX=h{QFH-+Y;-6n6Dw!|(0mf;iQ6BmLo?*W}zf?Qu zc$ZG1lSD15q!`o{ia8F4!)0xU)Ejhwm#$fw2pdduNx8Ws%S2lR(a(dRjG6t3AO{af z95GOh^gihW#`;baL9)Xo)|FtOK~O@P^3g=mY(85=(Xqdt=1d@|(5Q+CV7gBF@eP@p z=mwuK+ywKFYB3pub4ZGp=n7Z#16Ip~D)}~5yr8klGc%tIA093Gk(SxB-V{r`Mv8X` zSMr<{q7BkdNI(65M5SyLL{VJefr$rLkZzKG#+9$|{+v%jwk7*&tJnccWcJuJO>YMn z*d)qQIT<$Xk{*ac4|6zLq>r+daD}^hDtj%v{j=T2C&QXxZId#83-h<$);gQt&!Qyv_>R>{l&6Kld-4-vQcO+SLO( zApHvv0o(z&LG1;=MTi{ui7p+$C5T*UyMQYYdD8X(Hz3MMI|o>UC@<|iU>%|(^)?eN0=^2vGT<2oIdI@==UG4>9LK>5^N@);xQ1sL=m40$ z?&r8CRitCTH=K_LJMmt>B{EHuZAovwSRAr66(6@phHWu4eX@ca6i-ff)a|Hqdqd@s zWl*gyf(+z2Q%;$8cSNvCPmt<(P6*zx3EmWfsv*b`K?wNPIK*?*#|UCRzN=z?uc=h! zn0SIEP$e33#N$~+>rAu)_>K^*+C=At=v_lpB%(FJAOCCr#`mSsR>-owJ^bI zv9{`|uT{8`Wh*3XdG@yp%(ek|LD=3)*IDb)a->m zO-g7dmW38A>VTh$7MD{kXrZrU7y7DEVTM(>ZXEivafg0hYhh-eD9~J6t;pK93e0@O zrJuS3gmoL69l-YQTQmX6??I#Y7uzC~JN$M-fYjc#V(*O~tpsdYbHvCf5Y1!)RX4Sc4)L9^P z?q=0#8+9abx`1De3-rpP1Z~0C zeh>RD3&&+qnWXtaRCJ+phAw`DeX3tUHwI*)kP1dldTqiP}F2} zE8p-_NsY7Pr)F(P)bZ(w$Cp0KRW#{lmcog4x8P71YuE2t?7eKv8=VxB<+|qQZNWbJ*Eb&$-m1doP0WmZz Ac>n+a literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/exec.pyc b/test/bytecode_2.1/exec.pyc new file mode 100644 index 0000000000000000000000000000000000000000..435fa59237ddbe9c0b7de48f1d50dd0619d1581b GIT binary patch literal 199 zcmdOT&C4Y*)!!K%uxiR6a`JW-YV3`jQre zXa}pwr|i~B`=@kjrOQghNm0<_mZ4#QkwJ`bBdKO2;0R0^>?9;KE400-ECM^bh(h>+ y1sd`zx#UGcWU`bN`IY)C9nW-%%3_~w($WJ-ilf51$$z~;MBi|Gw>B|NwQ literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/extendedImport.pyc b/test/bytecode_2.1/extendedImport.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc1b81beda545efb384cc4d7eb115d103e89fb06 GIT binary patch literal 674 zcmah`O-sW-5PeBMG;PzEhzG%ox8R{dPa=rmMLkpx6@*17ZFjAqX}4yg*n{NYFY)&Y z{sw2a@dG^=lE>ROGdpi4dvAW@{pj*=41TKo(JMp2uLlWC0Rc-K2-lJdLqtEa4`~CU$+5uJwUGD_Z4@D%_Mrm20Lg|y$#;jywsGS^ zgb)#m2r7hssv?}8-9O`+ZS`Yg^&)nR;WdVyA{tIqT=^wXodv1JS}F>dj_1mbB00eA6T$~Cd>Vb%pA%%eTv4J18Mb8_+(!t;xAQh>GqtzrTZ%s@f| z#3}}{iYtqY!451*$uBL@04alsYXI2{V4_$6$V#m!NzF@1O$jK<%q!6=s4NDlwdZ6g O<^aGmBq*y6vBhjP`6%AB$2AhXOY~)KMBPBWs_&Yv@pJ2{3 zkr1c7*}2v1%)On%K%a(#Ie3KEyb~--ApwrSl>7yWU@x#uBp#+DEu_GKE4GbP@HtF; zjH3tc(n;XKhv_*d1smWORM;oiY1H}S{P{X$#yIjQ9Iah?RDHog`JeKQ$bkt6%S}Fu zH>SVc8K+z*m>Rn;bqU3ENhhnd(c26?AtRbmWb7QfqEc6%r2mj5V z@XoaOqF_i4_ntFz&&ln4)Sc$r^?3k(iu}<#L(Z>_5QqVfYsb_Ap7j@+LwHab?>lRd`h-HawfP7QzBzfpOl(^C_f*7a-cx81kq#(j(lm zMGamZ`95R~^}ej5KX`n_g#AZuiNjvGLg%h93?-32mu}$?L1iXF8K_WFlgr>uQ(|qlKKLQO1H^ zq~?rodKaAadO!1#&H93mXG$gXPdIaNo~W76NA>@*!-7bsjSa3`J#JI(O1aJdV+CLF scI@I;&W*`-5iYyHfXN>%mMYD<%e8U7ut6=>o8rW(SuJra9P5y~Posl>X8-^I literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/lambda.pyc b/test/bytecode_2.1/lambda.pyc new file mode 100644 index 0000000000000000000000000000000000000000..95a2b7e2c7b5e7d2574d7f7cc79c464cc638e5da GIT binary patch literal 1076 zcmcIj!A`B7a&ux3ePk&ZZx({S<hOTwkS#tB|3&_ z71A6D2gilx>0)ft{_@c^Xm;VJmmwVQxThxED)6lalp=-H>egVRu+i8UtPIv-0Rz&k zaKgw4DyRhXs8Goz&LobVq4eY~Ph?rsq(At+OUVAjxak>-FYJt~GualCEjX|fzWRq9 z`9Z~7W$~R8$6P%6>IB(P^kQLql>A<2R8rA$0$jvYI!uM$NQFT~EgS2q?j9t%Q+D!a z%{$ut8%Mik@v4mYA7sS7(=d@&!eNmvU5)N}`Y_8x)iRxDt5xQY1s|LuL2&Q4!scGl QN7APIsp_eoZY#dt0a0U|&j0`b literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/listComprehensions.pyc b/test/bytecode_2.1/listComprehensions.pyc new file mode 100644 index 0000000000000000000000000000000000000000..44e997e280aab40d489378624a32001280fd7689 GIT binary patch literal 857 zcma))%}T>S6ot=BQfq2Ti+?BxLO}>3g5t`Jpy1EOOwKI)VG;J~!6slS1qxe|9 zfg2yed#5QXSTJNxXL@J8d+wdAe^e{`?rq-t6J2wNR={gY0MjyI@gixTsZ1yL9Idgc%?>_kk3Mw zxJxnhiY8R*6k_TUpvs78InBkZ0E+tLvz@ra#G_+1gJu-c4H%z=28?7Wle7gqlxf&Q zTIDt5^>Har5<{ZX#nh2C@FXxC-4iYAX!#gQ41DK0T|>HvXNe~HX+}&xb%~-9P3;s( ztKZj&vTWh%V(Zd+9MGwY+52mr()WRf$OZn0j!#Ck3r_3;&2Ehy9Q5w`nZD79HNC`c z_8%>m*12sB20E#Y@_S+qH5krem~PmaVP}TFP7{!vM!f#hF7M7-NvxeqVuz%+&`Vk>`h*M*AR(TRP!v_dt*DID02Kkr3fWDulsc(5K}D*x z59L$%JAQ(hwUZQzi0sMCnb|orXOkzt8a1?!Uk*T@3cb2507H)h2@C-#@B_F3KK2Op za1QhYjE}2lP*mjLMnJlZWDn3Irv@dEl%N3Ra+V%(`2uIA&YAGYH27PV(CU?8R`7}J zYLQwiQm@Qy;UDI`%1HMEMdnzWR|>XM+R-N2=aXy8z>0~fl<2T0Bmt_7}vnC=49ocl(B zLss*NbatUj9H`MSN9WNz9Z(k5=qh;^i5@(ieAgcNah#;dG>(am8@ggZSC!LmQ%nPz z3Z`KC#9nmw)(FgQIrKDJjIbc(F&F56N66G9i{tWqgnWtH(-ouUb<0-P`(q_5Icd!b zxT5YPHF6Sqk(9~k2ARXo$w~bBeRTNl_-&-u|3=~uol|}PUugX1Ot0NZ5Xh{4!fKF4 z#Nw0r+Sdo)`lFe$(Lp-SqbT5H{?oAbi{``hIc2X-U7ae)*K8A|fAORet6)Fzo8QDv**iw*c<*YQL{RD>sL!gF@uJCDVl*m5?+ H3JLie+lZ~| literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/nested_elif.pyc b/test/bytecode_2.1/nested_elif.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07fd94d16864bdc97618ab1aa01b5bbf5cb8d7ca GIT binary patch literal 1048 zcmZ9L+fKqj5Qe7(lygvHJR48M1_M!0Bg9D1sGt#}c!=H@;?`KBU??|UaqY8m>jOBm z47Eo^u3Cq9oVdz=Z6bN2Yg zUN6|AE<7&T!^WH|&bby|4fdkFaig`c_x*1{MdFja@+%8ISGiAgLe7xWAFw(RC-#CvlOsx!}zf3bcWU)SY*CQ!f F{RL-ZpT__I literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/print.pyc b/test/bytecode_2.1/print.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2ac4c195c5dcbe7821bb4fcfac38c17ef404a196 GIT binary patch literal 259 zcmdOT&C8`V)!!?q@^8CT1>cEJ%{_>O-lFF{0&b<2ZC_hyw!78zf$pjx?FxbJNR;Hzr9?ZrG%r? zlUW~5i|3M>>B5!N`9?p|X7072&A1kYHW8t3HCopI?xkdfE*j7|x+vjp=q9CpBSQO! zI2YI~^5Gw$Cb?vXtogAjZ14*BN$wxtsp2kM^yGnzq~zJ) z8B>mBOLl}S%;)H0S$&DsBb5Pfq89G`*2L=#J^3x)mx6B~_IG;}rwSs)t~&^=TVth7{rke$EB#NXhX zy#o(p!CiJTGw;pL?98;k8r9G5(P1C_YCP_k!T>M8ITi7Wzyw|iFbH5mm;y`@rUVmt zy$n-INlMD0@vb1};bYX+Fxn|Oqj)|kYhFpcoai4Q5bj=sX5{hlB%NWb_`mmMfg7%X=3L&%{_oO+6s0Crsq-{= zT9hr>l5OEi@;SOFR$pQ@*gv%A<)!sSDXDLLE7B^{jn#>-KQW&>WvWM4YsFobmTN;y S&IXI7RUC1xHF+iE-~0hv7P1%s literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_augmentedAssign.pyc b/test/bytecode_2.1/test_augmentedAssign.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dadb8c79216c627342034822d2eb4d370bb3e090 GIT binary patch literal 1482 zcmb7EO>f&q5PeHZwnR($aAG%#U1t*{v24duTeNi&7$|y5PeuV32%w9w)~;wKG^uc@ z+CDAN6#WnVC%v{mrk4Uay9fraHqW~R3UxbIVxI>*k;{sJkNz5O*d;dWeiLS#`ZA&j9 z7B~pH6j7D?J|W}|vZBJ>8MRT>BI>~vwKJnOD@re86yjmU*7s)Y=bmjqHxcu$LXN4| z13n5Jd{~2%?9>uk0Vx7T9#(7;U|5HH!~*hbNxjk#_!u!=6D{TmE`Enu;#Iw;O-76q zzd7tE=+`^#l@+Gcozk)-5yMX zF=9OSw|MQI@#z?A%&@-*>+#4nnx;nGxL6;01;5hlZMd)fK|_?w=$IxwD|B(+Fv#P7 z%jHZP?=ffnCDNM0LwCSgulzc73&-6y|AIe~iPSVcGg)c$_tqwH)|*_){e5ZkX)!Xg zG`5rzRhFj6bWsgc@@^0UchS{1U>q%^%KTEL`N z^2f{aG|%M8WohmsMoV@J!&(F_$ac)jbN~+9G)3T>ce_pHa=hOLl zmgY)JmFb8F9#0FJq>xEQ(U~ffJd13H4(`XE6nR{zGdWV(b}3JcET&l^h@~G8nPoO1 zn0YzFmzPx)OF z_J}IBf@aVZO|e>i*Mn8DDb~b>Sf^)0Y>9h8i@2L&jdZK<+PS?e=o{P?t@;|(*b@H& D^@Jg1 literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_augmentedAssign.pyo b/test/bytecode_2.1/test_augmentedAssign.pyo new file mode 100644 index 0000000000000000000000000000000000000000..645805b12374460a5c32e2804385e25b28c718c5 GIT binary patch literal 1347 zcmb7E&2AGh5FYR5ciXfg1*uUH7;zx9YH}<^K^3R=RFHyHDVNBJoz1qJ-LQ5@D{ho0 z;5~Q+f~DViM3SfnWb}=Z^r#2) zsppYmq&zx-59|D5;l9~)PuE>W>rq)CS)|8#J*1%vDulXE3bsc>j~bv({m#N~oL``B zX(QbRSD~f5QBrs&OB6CX@tP#!TO~+w=Ln6{c#SVq_(H z7Mqq-?Odzv`jhEAiBloDNMv9e9?ddzlJO{kHxVXElR!6caM$)UOT$b|_)sLT3?C?- z&60>AimL!9TktJZEfg#qS~#+RMedvQ$R}NgXWR#QBAnI57us!Fol7U#w7S}fH(}8O z=%;Y)sM{9$`Hb^7;;Ke%(j{An%M-B6<_=74JM8ymI_&pdl5jY180#XUUqn1p+8zRy zV=|G1%4I~_wijPJ=X&AXIOoP~C8krANJosC?w`lDA8%G!YEd*=S6K8Q{`Zt;RnnJG xEO~fXiR~_*J#UvaSe@;&J*<6pz@B(j#I{)-dAsCtb9}_`css0GtV82~{R06v1MvU= literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_class.pyc b/test/bytecode_2.1/test_class.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8fa9a87d0a568626131b022f2ff0036c080c433c GIT binary patch literal 1957 zcmb_d&1%~~5FSZ(oG7+ahcqd~Aqz>tO|ebrtrUu#LwgFP?xns6MZ1axie$7h#-}~B zx4u%}sL;MbXI7R)EYi><79Q>F?)-e;jK^oc8uriM*Y7;QPZhuN2MPti0miu40<{g? z03UZu_zv(5;Op1`bqL(jyOq_h3F-uR6@&r81m6U{u{yIrbwF5TKCXaz1)>5$l~hBW zX=Ni*UTdYM6<&i;XOoipgThXQOdT(DrR+@?tlMQWo+X}Ow9lq)nu;W1ew;9UhjHNt zQIH04ByIc4B#`-iTut31WwFoFiNJead^25yOGk1Rq@rir#Wvn|*{4N1i6eHkNJZC+ zd2SYjBC$t8ut}Ou-}d|S`Mh@>iz^Z0tw_$ow8uq%<*Tpr1u4+U6Yf_#Gutc7Zn%Yg@bR1Pc;mF57rF3Q-1&!Y|%^-`KB2j|+G zLEetYTLV;+ypbKMt!0VP2ijR==NUkc1#*WBnxJ;b;KN63k5Px5UdnBhgY%x_5ZjK^ zK@~cbysVHAp`UHhzT8DY_3Ga$rlcb04w|5|wT!jkEl|6q;2UU&!TmUXP+S6uwyiv* zhIA_%xx7+f(5t(EWIQ)A?3Pit)(!?gxJ1l1-)%LYEaw}IQBj!F~|{lllDznzn@M*lG= zR*FsZ4|`W`^5FJG+v7aq9qqevkHO%d?Mu854~y>AtX~wYx9}W?ygDsd$5El@z#7_9 zP%lepH_`lpnr)TQf6fW&hs^wRg;~2O4l*L~-u*}~PI4!g+22eJtsIBPp5tWWH|x5L w1ueaN9_Tm1&@H+|q~{%_91cjel99NB|Zn9Y|5S@Dtz%!1sj% ziKmxZ^^yxo8@L19g%tHp{lWw8k=LRHyaidCbceJ~t#!4QbYVX1QRcrWe8r^-<2;fw zD7WnLl1Z_yV$Nutm61}sDp)Eirfpcl)2zr;CJO2M-&UEl_NbLnrI<*WT5+_C#Z9@* zcY)+OQ#|nfW*O}x_GPP9qF~Fd;+L^VtXr1z%Aa%2R!WucN2ASV6I=_vp1wP$GRI@J~#5|5sfCnzfx2W8q9hW@fmH5}p zFI@OKA5ynw(nUGG(h(eraA6{lx$PbLp}9xqu>*8@Ap6Gd(`W4Ud`MAd@&x7hDhNZO zGz^FM2t%q+wn*?iHA}QEpQ50qjBa&IQYUSIGtlLMb2x1WT`+Ab#Dg*tF!VjQ$uyW- zb;zAbQ@z&qK`@k_8r0zQy~E}ERQ~ZuyRbM8XQl3sAIsS@n@dl}Zk8THogU{CkknFe z2i?A>Cwy|8`6Q+%$7A}XMSnljlVBND51vl+ePwg)na(;q5qEGpiQ>tNW;iv$(}rN$ z#CU|50|58E-r9!|_RwWYvs72{pPQcAZQS3~ICY5Tg&_~^?ngI$ZG+6rhoOsJVVH-w}qMz#Srecu_g=9lvo?*1pq#96$C!p5eXY4xS8p&)a>+$Lk+l CNoDo` literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_del.pyc b/test/bytecode_2.1/test_del.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c236c7ec211a7206ebfdf9d93adf594ea8ab5576 GIT binary patch literal 842 zcmYjPO^?$s5S^soX1gDBS+*=61`aJN+Dd5mf>?2c6GAGd2&E=EI z(1EM+0#GpXv|=6rcHp{v#uJHrUXcwz+Ey3tYSi!r;2}$L??2)tbCzBL9<%hSl1`Yv z3jt}HgnOK+1A|kTH^~1Q@DcfmpAOIXHZJHkgxAhTsFQKNk)x4xc2&e$GAncCy)H62 zw}l*#WgwkbUZ*-BoP zuzIEwa%FCn_%Z6qeXmJ%8no*yu?nTiQ1J2QtAaLONRv^ODsOBiT%RtfI%QtiMWIp| zt8C!qOv_@G84|%XIMFqN2|3j`)hRhHuavpG$1^iz5lA&+&t5C@hFN}`U&iK~F+EN& zElR_x5u+$V8%L4jL9;3=$4mGxrFzKpmgNypC3n2jC;$E6%JflydrRU$*a_P~H)sb< T3K6tJilDW{72hMwF%13!U+lkl literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_del.pyo b/test/bytecode_2.1/test_del.pyo new file mode 100644 index 0000000000000000000000000000000000000000..8e3838aa5fc1c687d8b949af0363540403305fd3 GIT binary patch literal 770 zcmYjPO^?$s5S^q=%NiECe2EnoUr@`6rV`q{AXXgVgpkT8&HHh0u69On82?DbPAupAdNjZzez#& zY5If4>?mLB0rMW`uJv%o-|Gi^@dPfl*z<>=PvDA5?fe<&N1#vPwnqye-+P|0ZNcJb zFP^b-OKqQmCjN|(Rxx=Fi;SEv$VuXS@{&*SIsp(7Lo77bdApUg?k z%7ycCOqQ_>QAKRf#vsJ^l?ewsu~zvg-9p9{N{y9k+HJkB6V@hTF6P#>Ek+sDPo$#W zHL~5tm9w%oWf+I9X;IZG1lo)c_f@F8lHYdTavO14IeqA2YV=}`C|5DIA7-=7W|J=+ zmROU^hIJitjk9B|S$7)kHnw(3OJ%j-<1N;nHtwadG;35e&WdnOKdC!q>)q0;Mpnv> zqbyPSwKbFklQGb51d}rK82SW(rLboCL}maZs<6dCMw4s;{|u#hl(1m?6QW zE5xiQw5y6DaHFzA6?h5XQiBtgcPh7l4#H@kpZ#~io#~T+@Q#v$bdY9=NV23yF-)?Q PBI)mVr;mtpyh;865_qxZ literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_docstring.pyc b/test/bytecode_2.1/test_docstring.pyc new file mode 100644 index 0000000000000000000000000000000000000000..460e30623ab6e7ddbe7624fe0a10863bf2da2d8b GIT binary patch literal 1651 zcmcgs!EVz)5PfSWP*MjqEe#4N;8aO496)x&1tD=kz$pjPL(+>CVyCrK#Z}jrN>qEG z-^C9h@eRzZvvwP`N(&NkvhnQB&dhsnXJ7rQ*M9y!d_MzyZ2HMhG$OCWfd0WTbdw*s$l?=*+J@TUSl@w=$lG1UIu{&hqxI$&qfS4%A*=6X*I{?fpT=G)#V8xtEMYMqb}9-h$$7aEAuv zBSi;o3%XTF@C~QpR94vTLiL#K3ozj&+beE8sQwLZte&}T`cN* XtQgPRmBFlh*vw^hEXQs>a;kp-ZCo@W literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_docstring.pyo b/test/bytecode_2.1/test_docstring.pyo new file mode 100644 index 0000000000000000000000000000000000000000..a7c9a475cc7940a3592fc4dd1f382d8e572904cc GIT binary patch literal 1549 zcmcgsO;6iE5S_J?6sL;Rih{%e$(34U_0Vb^P8AXtBslp191-J>MG>J|Q07g~*A{AQk<_LQx*j1lv%y zzlers0p%^L3#lMFJj&a2l61s-6QX;1QF4smD9)>K%=J|{J@48K3OTqX85BGM?_nJ- zMjY2w{G*63uL>@vb(TO+4}{H77hHc6VUWPZ|9W}NYcM~k#^w~797RzqR9&qz%(-tSG=2l}mT?}>HYH=eS+9`bwmKlmV z-S#zg)B{AM8p-lnj&=W|A9^>AavnSto<^;kRobljFF0f}IvA*TWRDw&U5i>#YYuM@ zdUv`O5MISVDDwBitHF@^hW-9d14Tm|-p+}W4J?-vXXB;m=SSkD>AiT^tR7G6Pd;Ae uxOxL;BiETR3-_46zU=={Yj<>oS%1@cjkjE_3_)f8ts}7$MB(~}sQnKT6(2YN literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_empty.pyc b/test/bytecode_2.1/test_empty.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a9dff72fb2ba0bce0251908ba682cadaedb67658 GIT binary patch literal 91 zcmdOT&C7N8UAj#&0}wC*aWOlPsAphEVPFW>015bM00{;(qF4whR+3s=q7NeCQ*#SS RD)kB~i$NOffrfyz006;m532wG literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_empty.pyo b/test/bytecode_2.1/test_empty.pyo new file mode 100644 index 0000000000000000000000000000000000000000..3bebed096fc095882fe15f506a3da881e2cbdcb2 GIT binary patch literal 88 zcmdOT&C7N8UAj#&0}wC*aWM;!NMT?I)&TMRG=KyH8c{3+6e~$BF3|@O@u|55C6#&w NmBkL_U=DwVoLq34RU++9Q|G*l^+wh9DLkP?c(TyjToiqDbP zFB~b=zJPDVD?SerpMjaV-ShgKq6#HAxx4YKy}Q5v%&h13UoH2~zh68!1bjJo$v^O> z@Lxa-@DkuT+9iku{EoH&)qvPx+X1xX7gPjsgY5>WBS@MMH{r;E;R*=#5)yzuK+=NW1c($b z-0-f~!u{_cjsqq9lOGTcZm$d{El?E#c_m;kT?SPJA%t2W9(3UZ`>IAjuYk~Zy)w-t zUA&J+C!J(+m>iG$tWgbp>-y!fN1!K?bU&Cn4%iWS=moyXRkX&59N(o|Pfs~a<(=ab zS;Dc2@8h0n$&#pw7GDJxl%mNjEt_SLSuWWu?Rl2Vw0zFeNq&`ycN|ICy>P6c@p`O> zxGPL0wZd4JZLBMdwQ8_j4AEPRg^75T63)b`f^+Q1l{5IF%`n63lfd!h^H&Qp+J%@$0!4v)gj?QGtrWPdSviM|P6+T|Avgk}>{yJH#B$+7_ zI)kU*K8LCa{d*u6an|g3Si;jiuN+Pk)@cjWBi89tTc^*8Iz6^^`n;&qlNp_!&g*m& zw_zV2mQKZzIwO<*Kgoivf0qn@{;7FTU$A6f+LG-QCHu-q*2UENx+vKEDZaS3&}Y*Hr(L)WvW;8#OoSi=X1j(~Su#P19RMsvX zdbwLWGMzm9#G7_e8~&a-k=j^icxAw43pfIG0H@s98sJ05C}qHL0XVUNUl`zD7#L-v zhS35hb1)d#akdb%UT-p)4jWYZ-efZQ56D3@kIcUSz1|?|r@fv>hYznD_oeAJ^)t}V zFnb2RerkW9{h{`U+8=8FhW2j+dc`yvB)y)b))*$&aRzxnv|$&aJ1{m*tzSl;Rx@e&VHvYsT{5!@S7@RRUNZY^|L;LU#uK0)so)Ln5&ynkd zi}PqW?!?(qd@@Q1WF2)|`tnG_P!kC`A5Ij9q=-D!0!`u;N~2hep2?}Fw;ZJ6>B(5w z_$>2%v``)i%w{f)OIvoF$u4OXyF+}Osp!Ss8l4Mp5p@p&~0!=431qG5VLY>S-{S7OKvJ7 zv=@)x4~K(cB0-dq5H`gw`7nR;3aA$Ncg!fQu%-f4m7rdfLER%zBMUxT3qrfEp?SMJ zLu^k9j2k8q&*POzr_zSfU^nHlTt66+Tdop*@YsaEmcyr*PQjlO)4Go748q>j@NVH1$R~1ynpgzTZ3I2G1r5^BAB3&jSpP4zUXvo9qi$2)8b}X4g;U0)e_U$Sc%Z zpv(TijXM5Z MJ-aBia5UQNFZ)CYJOBUy literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_exec.pyc b/test/bytecode_2.1/test_exec.pyc new file mode 100644 index 0000000000000000000000000000000000000000..af12bdf3fdc3d22a551f910d40f55a7906883e15 GIT binary patch literal 209 zcmdOT&C9jtUAj#&0}wC+aj^}Ms0SiWh7<;dC?JEIA(eq4g^__Jw4MjVOl4$fW&rVc z5xi6;kXR^CRj>vV$P_jpk*Hv+U})s00XCKcC{U7GT#}rhl3L6T@IeGn0!T9KNpS5R3D(qYdDv5t+2gOQsN0HCNO!~g&Q literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_expressions.pyc b/test/bytecode_2.1/test_expressions.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe8bf9eee5eac62a56fb1712ce92e249464253e9 GIT binary patch literal 375 zcma)0y9&ZU5S&ZmBSAs1Q2!uU=nsh2HfdsI6VL=X5EHUjCw~A5{PYoULVaQE%cv zNa|ufc$K|cX?&Dst+ZH)IVld?JTlS@(6WdYt|e9X1YCh3gWZIL=4EPsGG%CY7f}d* zut3saGBQ(vBs&&mMx^rtO^OqBxR~r|6Pt3CFAv5CNuH~sdfa#YhsrJgq{)U0ju873 D)QCmT literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_expressions.pyo b/test/bytecode_2.1/test_expressions.pyo new file mode 100644 index 0000000000000000000000000000000000000000..97bcf342cc4585f0c88bc5c63e96ccaa1de5ff07 GIT binary patch literal 363 zcma)0%L>9U5S+C2i3M-!9~2Mz1EN>G^ioe=1luA3X-hT-1#kLeevjZcxSJ}1AQ;GO zW+uC{<9pb>J@&H{d=y^_88YAsZ1|y&L>?=tVmE*fS~9c1*_oq@dJ_*qG9UB7%MNO# z@ll$!(qbjyj3jFFuvjxdOSl%UB~SMSe1Rc@+ku3ZCUcdniQK*-3gH3=Bn>tvI~CaG t$I9eHx-4i?ov6p=_CUMDnsvDlL#O}% literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_extendedImport.pyc b/test/bytecode_2.1/test_extendedImport.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7fbc84fb8472471e9eda6ee796e5749fe561490 GIT binary patch literal 684 zcmah`!AiqG5PeBoYud)xiU-k)x8OmcCl7+)MSG|oDhP{EYIlvHX}4yg*n{NYm-s9G zj^H;qyG^y!gCTj$zIn6rW^(Z9*FL_YlOgyi^GELtIlmqxFaiW@;6S)GC_$8v*A}FM zyaDN8R7O&PSc8-MkS<15dtOK4L3l`N5OvN4wyuHLhuA>g#LE#>fHxrCG${G*Cej_; zx)4o>7V;KU6aKks;r!z96*p|F7aFUVp<@hJ8M=yS5UH@VLeLr$QVq3K6mU3v(3({L zPCrfLAf3fbA>3jhmq8QR3ua{NdNaz@m`tlI9xKbG_rv3Md%35jyA&DPW9gWsnbrx- zMSSAqKR&3zg|LQdq#=A8*u*$r(!b! znLUjxK8JOV=iy@Jp8;3yTH2iniy8k|HMwF{_E!`W&wCd83|RvUw9Anh>c~!}UNSY2 fN_NImoo0vAnYDK6fi_sT?=;*^XU`4XZ3NCY#Xy;- literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_extendedImport.pyo b/test/bytecode_2.1/test_extendedImport.pyo new file mode 100644 index 0000000000000000000000000000000000000000..cd945cbec7fc1546c3df5c4eba85689c4e18ea3f GIT binary patch literal 657 zcmah`%SyvQ6g^2_rfphVL6H7HbWx!z7lPoXc2Qka5C);NoiPnfJ2f{-yB7Q~e@E~e zyfcXp>cT({C+D7-d(X|uyI+0#2+wEWr^qk8GDu(nh>SQ8u2l*U1xr|QARR1T!-c zJ~s-?JlBC^rm8Ru711PAL19OrG7D18v{ck&I-6@vYCP3XD>+HF5laXT7|3PNMD~I$ z*>j^UrD{p0RT?do)slzVS+DoIry9;HdN3I{jj=kkwIWhE=$veWhqV?CX4{}PuXlYq>g78aj_8uN^PW&RGhbJwrk z8JcJOGpecOtFpf$Pn`A4_ZhGU7O2C_ggUj!)FxFcspMd})=Ao3Z|!Io9;m^-j^nw$ LbL7_DHtNnNnst>nqz~t#w&jaT( z0r@N`%wUoQEXRvejI#`1hXp>(tH<0v5&B@7E2+uFdNdejdw2BEtFarq< z5UUu(Dy}Rp20O4MCBL*p1EdTlt^s5-fQe!$Agd&`xI`aB#HUu2q~@ihrUVpa=9TCb WR2GAD*>f@!a{y_6CILnnAOryExh+fp literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_extendedPrint.pyo b/test/bytecode_2.1/test_extendedPrint.pyo new file mode 100644 index 0000000000000000000000000000000000000000..bf8f04170f6e81ad3838a778234fed72eba330f2 GIT binary patch literal 241 zcmdOT&C7N8UAj#&0}!wQad9w^NMT^eW?+b7U`SNh)=C3NzF@1O$jK<%q!6=s4NEQvgc$d<^a;1 KOuUSeKnMW5X({#q literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_functions.pyc b/test/bytecode_2.1/test_functions.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c55239f38077b37608c11077169ab9ccaca2fd7d GIT binary patch literal 3109 zcmdUx-A)rh6vzL&+izMIizS#642q@_Ed5v-G$vl^6*t@wlcwDPY$QOK5^BZ5yfx;jryMl^_yqC!m%fl58iT$`C1tG(-lMHuh3bE8$3%N77KM;Yf~0 zGEi#}bG$+pssfQ`I|sD^QDA!xss{0d?L3qR;j&$T+Ge?V9M}*~acN=i2}BXQl?6g$ zP>WDyPJ`0&ISsm7vFP8O3N^Ua$VD3K@5}zCZrTUu$9}(eaxAN-Kcr1lgIX4BIF@fg zKjGr!S7B;#ts@iEbj}Xz6RA5@>iMyX4LhRZLd{R9XvfAXq0yK@uHla5z))!uu_DyM zlw1@_-cLmzwn4K~ye2beWJ*wrH_N2xgWoSGdNT=iOA#R*KH}pOumtsdN+=pWDIccj zFNKOd9iE{?J$;QsO2ebeKw?y&cVqE_ubA}&>wZeoty>T>y$%BjC>g56{r`p z$v-F(UUwzpKr#~hRj8L!4kYix|FAvr{ME51I!$ezs;@|o>dg@NYGY(!M1}1&h88}5 zQExD`sgD#0J{fvHJ5smZiry(s|7wj#!f_f7D#>k`{fu7H1*Lt_>wjza&rgr`+xld$ z1}m#G*UN6A-5d#RmHU__PnZQ!h0$1ri#X+BaBr`b`TTT#(_8Ukp# zY9q>V)71@K1tXXm=`Z823SqlV?y5x(44r zbX%LgYkEKEJu~i^anF}=g-ym*huE2B?2H#XvlTnjia;7V!)hRJfYGO50&k$3-B^uy l^+xPxZljzzn63ML1=BaeC;IZbOug&m$4}AGPd*Voe*s{#U#KcpyqJGogpJx-Ii9j;q@W-AXO%AAa!Xg;-|iW#)*#&+-c-992=j>@ds-9gPY5E zJRDuhqpP3N#HmTM3~YcA8$g$4TS8#G@cO*90C{l#R&Bn&38sF3A~WAVGuj1!+Ko97 zun=#xfAT`)X8Y42nRLSaI{?)+04_fA;}(5Y2qHSjL6Eah)2bNfoh9XVSn*+oH6)h| zY0uaK8&Nf$BPNo3F&K@wkHTx!UxZo2ipUMZ7a4^VSmV*Pz+0&gqE|U+NAGE86V2O2 zAc$YjIZ)b}lzPt*F9G;w!qkAN35fw;z9uF%0xVl2yW3VHM2DQfEz_I~S%N@R3X0 z0?@v>P@aGox2sC7DmK zmRl>khRt-xF8ZnqW-PaIDH}`a*M%}W0Pb4eS*B;qE+iAO(#v*JZ<)+WSvjHfaEo_Y~0?b_Z()(Y(yV@OWvoAq%D zg}gy#SGLvUWD5_g+4+9-&Ghex|M|E2S^)hR{as2$0sN%OKr&Df$Ou#nzo{96j^UXm zk--8ZSbS4GxSw2j;0qOw+F`aTZ7$1sy%)2YaCX}iTKEf5OGMpNVrd&OZl}h=p+vpW z6>|P#ZQKz+r&=~B>{8%b3#ALYsrTi9$!!hlIpsT+Q; zwOAw8U($59+s#*2=ene+%56)WE1jOW(qK^8T~%7Cgsc?zj+fhpoHW8z^tO>`Y{iYw z%nYbdf{dOR+$VaY>?p4%fJb;QD@)_2~o6)PuZ{ z_A=Bm)L)%g+bGUd$VcFKP)K@xHXxNwAP>~$AaF9DpGhr;NApQCV0V+AH}2P!Wy%&= a_CI?#%Pt^!rp9do?vg0`(U2vh0eb~tLb0j< literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_globals.pyc b/test/bytecode_2.1/test_globals.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b9949ba53311e154d639212c838cd491a1e8f9a1 GIT binary patch literal 345 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 literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_lambda.pyo b/test/bytecode_2.1/test_lambda.pyo new file mode 100644 index 0000000000000000000000000000000000000000..6d01a1f9ecbd4ff8134007e4f9a2557333c15f02 GIT binary patch literal 898 zcmb_aK~BRk5M0|S&_Fnp13V!@qVRwUe$WdyR0*X?8bB?Ivbi8NCwLY=LgEd~u1QD{ z5>z5i*1KcNGduC=TNJ*&7n79m1o-#?At%a+UXU2d3_atubYm5_irXIIHjpfk5}UI@ zo9KoP$t^APv}}j2<6Y3Dh736jj!>=Jcj2&ZfJ`;Aq)9(TO|b+%La1}D&n4V0lhr&+ z#^n?50iXEta!4$D@4+REfoD7e1jd=8#!zFaaa226YtxdTQA5X)In7!{>Xj&}R9B&K z&JIX=SH-$)QH(EiWn-6W{=4wd3s;xKCzivZxs@U+Jjs_i)s`Il9ml6H;^;SDU`k6V zZT`^Le|8;pimcua4!t7$rk;>q@8UN1E#K0DLr*x3wK)l^q~rnSDtRn&mYZ58%e=00 a?{go(+Amj8lwRQu9$-E(BQvr?BjW?4NRsdX literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_listComprehensions.pyc b/test/bytecode_2.1/test_listComprehensions.pyc new file mode 100644 index 0000000000000000000000000000000000000000..927205afa87d12c0e52dbad01dface32e978a355 GIT binary patch literal 1408 zcmbVM-%is|82_EqZlk~)P*y-O%O;wJ7!~4;iHV6Oz!f*#kfI@DJ*y=+ww{@20`@{* zLEpeDAHzrRF-&|0zwfl2RoIQo`s>+ge}BHOU$^1%+R4-3rOkfKmj4} zQ6LaV=MVvQED=~x0-@PT77*A_v}5yqVssZr7Iyd2dF-Y25+jrdErd1;_6dny#}#%j zXWt-pqr}er8c4i9ek9qKnd|4Aw?MqbGOs9r{T7idm)I7TP2wLpcZs;}G_H%}zTuK! zg*{nt*$7th@>L}l+z_LN$hy#+rq@K`vtHWd&XL%u#Q73L)=BD=$u{7Q9_L!#G%XLw zw$bv8mIW`@TP^h1!h)N3%cy?KRad5|t{{17R9ACVPPjvg+BepIg}timH5{rzs5#W}(bg;Duhqz0({E3B$uZyg9PGNQ z1=FYNFrZts8Y?}1$Z&iX>+y^8H^W4|Rs$WM5A=iKd(Fl6&${EW8nm+{mT=KP%*kR- z7V}?8>=5kxbA+0&B;7%zOpL?B!)psLO*NTMO;uFER_D^{BDtPh-SXDEVL=yL4U|uTIU9aA&s@(p$UH$eed^7-k%JkUJ8ZbZrd{poi zLconQdyD;?Aa@oD z_3ODrX5U>&adO+@XCX9r_2wK~CYIL6l6hm(x&>iRp6I1|b_=NY-7FG0_tuTJ?AbK6#|^32);{ zR&OCYH!hXFEBX4G77U8;i&%_y=)fVJE1e>uuA{MlJ(Ah!g{DFd~Pc zL|{4UpAH5J4odXchx9^*0i0{hsS+t~;ap*!uXx|ZTq9Ym__U4>8eLM=^_c!h%6SFm zFEamRV&cHEkdx!~OQ~tiRL<<1Qw~|$TaU$TI?XdZI){L5QIr^)959@WBAYxLzn;v@ zD-+vj9NW8-ca{wfNBtx*@r_goR2?-$tSn+>5&x^B3c-=LMQHhC){jFYGJ3t~?xkJ?|B~P>`pvX#X+14k)tnLir+L=+xB~l>zH7RUJ*8Aru#RgKH_#N^ bQ7wv#xFy(TR996|-Pc8RiSlZ=t}D(TPCd~+ literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_loops.pyc b/test/bytecode_2.1/test_loops.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a773d3329b5f6540201d09846b0396d28d213bcc GIT binary patch literal 848 zcmZ8fU279T6uq-a+hm$(h}4Q;9Y3%!nqBcxECo?g6r@n0ke9ICnIv1bJDZsaNuCz! ztN+Ree~6EQzrj1Ro5Xfu4)^2Cxo7Wg_fM1l{5yUh0X|hc`Ue5X0XV<_gF589uo!?K zzzKXu^lU{P!vKQ@2oHD#EVX5`V`m@dsU=dlg{s>$G$j|8FvCFq% z-%{8u;U_TtRR}+IosIctrTOQ!-bWTW&tH@i57GV0)zmI5zChk}*Ndrdaq26Vms4N6 zWV5m!Opl0LjbErA5mbLusPi2->(uO5`Heu0&}NuOnQ1>;vR;pAIa85fw$8H97@<-& zl8QMFrQas8UU4wWLS>j7F*6a2i%4E&%cQ)lXR#4JrJFMHLw33}6PdD$r4hYI^3}CC z5sID(!6wFJ?}A`HpZjAeE<}Q?RL>IQa}lhy0_Ta#d78+OvoPh*r w!R{%zu|!8Zu7m!F?S|KeI%yG#r$%7dR0^O-eZqHJWc-QK;IUH6AVBCTmmc)0U1aJcZ3nxeYlJO zBakh)iNJJ#&3=Gpzyh~baWSydniORqNk{4mLVWAND|_rU5=YSZ6uOn1LFT{otq*}Aci9XRW6hfS>sxJT#H!kE$x z%as@mgfnxSqX@hxGw;!AF*a6I8qUwB$~79w%FKFU#==igNX*S`xhm>nH&-5qoWIhf z&&27OX18r1-Hp2&Vov#S{v5%R zKfp=-C@##~H#2XBnK^%N)3=Y+O$7KFXvRk<0XV=MNfXK=c)bEafRl>r3z*lSJcgnR zWe0}k3FLh!yD*%|Hk3Uegp{Ws2|T~_Va97ParUadp9s_nV}nGg)Lgo0!3G0nRHh@r zssu|zYlW6diUYRYywKopI$j(Ct goC-`2p}LRv|9Ym<-!{Q?@NYF*&?Nh$j&_Ll1*PeKOaK4? literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_loops2.pyo b/test/bytecode_2.1/test_loops2.pyo new file mode 100644 index 0000000000000000000000000000000000000000..aa59d290da9882a1cff6cde4425cd9d265598375 GIT binary patch literal 442 zcmY*V!Ab)$5S_HPr2(nn$=iUJRp_pG6v2ZC6{Ib+Qt4$$H)(fao2*Heb-&Ng5j^<; z&Q@zNFfVVCH^a=k{5aVkS&-6?WXdJfP3Y9oEuZP>#(SCI7DYkn<#8Pun^uWt8r~C?nD^ePsa1d@$*Cc zG?`27Y09?3XGZgk z_J;9~2R)*3EKL%}?ufXs8@D60_BLSja>yuwpaFME(D)Pmch5EYyFR!Ry1Sh|bXl96 IZ?g`?HzFc=M*si- literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_misc.pyc b/test/bytecode_2.1/test_misc.pyc new file mode 100644 index 0000000000000000000000000000000000000000..75e87ab3f0e06ed700d285477d3753ce1afec716 GIT binary patch literal 1062 zcma)5ZEMp|6n<{fc1umx+0EL{&gGlY4-WjSNEw)kBf>fz79n)Kw_Tu3v)oiF367nH_1llp^8x5np|9LwKu%8;9QeYJ+u#gCfE)M< z+yEbXl&)h0^eDZ9`5}Y>ZsLZ4mlTq=(KC_nLNG)n2tep86|k!pIL{lH&%n#z74Qx4 zO$nJ_f+EwJn)aN=Cr!47SSUr z7@Fv9Am4`|4tLO++Ffgc5PiE&+&XOts8lo(5B63+=?R-n@05eD8L?{+K+^K_8zU^NoxIJ~K#$G5H){fGgnr z2$%pPhKt8g9MZ!T6}3?HG4h}obPEbl4yP15-^cJmL$)D($PLI%j9czR>P~owWq??< zmuId$g6I_W*!vSEJJ^kB%)079e0cr=L*hbTy+cHop@;4pWsGR&$$N;I;N7{_VkQ6kAX z)o^$)T?#K5E&<`BOe5PUi8xtfYm3Fqv}~ZJ;|5(tt8_$JIAiXRS1VILwMNXe$@j}o zW|L4MbfIe@x-hmiSWcQZ6x<(~m9@`?_egd{1vljpW literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_nested_elif.pyc b/test/bytecode_2.1/test_nested_elif.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6ac021f4b6693323e0d5a902512e406de10078cc GIT binary patch literal 1058 zcmZ8gTQ9^=5T4d9Tb3*$?&7x55cf;02w8$ftgtTOMZ`I%prU>8)MtOnACmYDW=?0T zrfH|s^Ue2tb9&C1{BCXj`gvHt1H5c}0%!n;@OD50Tw4&efVMyZJlWvq!HV*rEZD2O z4r1PFFgwB8Ks69%AyyE)cIFik>kzz7<~fLUfy$sp)Ghcu%r9e2ui*DFpS1f8mQ8vZ z0M$r6k@gU44-4%P)-GYqsL&o`ZJO`6&@Qqz&38g*x~YCAh2~VM-)W&alj?Vl`&|&) zi>$qmzRN;;g|(*0np?6Dy{Hd7vD*4YwX+o^f%2#?*AM}<8OgvTL! zd}6Oh>`@gS$Lyi8=7eibg;$NeXm6YuESIeRIVgwLpZ3Ouz%Ci1y>S)ysG6bXw%|$d zEIJMp<~?&VC|wA$82#{3zk7I4Vtg^kVEW>}YmXAcS*p5*L<3d-Rhz+EH_^Ox5daf{ z9?U`=gtHWGur}1{Mn8M^GjAV;x9LC-Vo}~MSa}PdB|49kc(s?BWgg;Hz2BJ$E8RsWJTTo zbAwjDYu$VcMaB81^us$8{0{!`2yHJ?4dAxiqp32;qs8Xb$ds`=u^HLgt@Orp+W496 zlKWC`v|&eb&gZ2hF)**!TEJx)G?yg>K#V;g&uQyU*er i4Y5F4;h(jhpg(t>#|$Nr#`|Kbtkv@IW-pc_65Rsc#(6OS literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_nested_scopes.pyc b/test/bytecode_2.1/test_nested_scopes.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c67556161e6764ab598fabe41770cbdecb523af6 GIT binary patch literal 4744 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 literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_prettyprint.pyc b/test/bytecode_2.1/test_prettyprint.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cb6a305cbafdb7af3ad7b5a802a9350bbb0d4b1a GIT binary patch literal 3583 zcmeHKOOx9~5N8uD1He$&Tfh$C!h}&1(!0QJ z0K2L1BVe}(XSabJD?$rWcf)FmR&7W>xo(AcW<>-G(tE((hNoCMtlJad8Uz|}11>et z(iFZ-zbmjthJBCNrNVZAy#wrBxCD&~{j?zF#y=qOS%Kxo&k=i3V9m_okBI$LU@e8= z?mg(fM_YRvx7LUtV_WR4_^5i1o6Fx^)C>C>h!g#;*)mIs?Xc^8U zk2zk*Y)WamNHCJb2|}Db_9P}@p9&o-Ua{5HvEzH;j;x14hYPN(7{WDe>F>tzO$`d4P)*T0m3yG=+`a`!)2)K6lfw$*j( zXW@&x7}Yi_5Pu8*D7a1hGeG=`hA15A{Y)h_R6o?sN?VoQ5!xtF5?Tp}pwQ~9O*8u4 z$_F?Zu1!e40u)xZ12{)LMS)wRuzU?Dt87n!`=oIse1$TuF_MQHR;X)h)X;CQTaoZ7 zDLz1Djz`?`_!_0QDT=a71@w6C$( z9_1ZMO>L;A4)gY8Sw|b29W5*V6#4jMEI0TFR=u3}?~OP8oA=iCN?xyZ73=lu-);+c zUf|0dPNOh;&EgB0<}C1~Xy9NT2stQ6uApPHT*PxesD^Hrm{&-ZVM%u@wT0}X#2cnbbb!2|f!cSW*5rm9~GN4yTmk5G(Y&>R>KOQSWtj@K?fsXvq)_q)6 zWc%Gz39G2YF8VuD$LBLTKJ%n&Q4pK8$*2XERVfdv-0G}~RcNZe%3lY0{B`?*UYqxA g5O?t2(L1`O_u5bPi^6q2JJ3uGKl%}Us}bG*0_SA20RR91 literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_prettyprint.pyo b/test/bytecode_2.1/test_prettyprint.pyo new file mode 100644 index 0000000000000000000000000000000000000000..b6156f2c5482fa889067b31a4285d0f36eef01e3 GIT binary patch literal 3475 zcmeHJOOD${5G|7Wkz-lO*s+~B2)Go+o>8QwAtZ5DSq%noR@x{OyEP&#lLWhkfe>ir zEOQQD!ajwsVZdkbtL9JsB&HHCyf6ilRn@PmtGb_xee$aBy?A{&4GC8VxBA;65=1jR zEqZLx%pzga%%&AlOE_eU7EN2C4WR=;+7P;h0A)IJa%Asar15uQ^-BLEc5A_Mji$Ef ze<)h(V_w%wuK}iRllY2|g!r1oF7J0kHNiM#ZaEUe(i&_Hx*Uua#UVFw-!zvo@K zja~7yRC=CfQtNG+MX^3hxBls=tCCF?N}oslG|*aRvA;|*Hbn8IuUFFFbMjo*U2ftq zO5$K0>8+nEeIdi-NxEH2&-;B9DZhvaDGf5s2o6%A@~PA&((=snYBTVGf3el8B=#3u zEllX5J$y{gu|~gVE^f>gwz=kqfy7Dps4dJ`-|O#TuCkL~<3clR)@EEIcl0 zxyg`8=0`EKCxJ#0-np`|LP4NT%`0erDJ&`l(aRPVn8k&83gzU1)acNFNP=?-i`OF8 zLK8MLVWpJDxLm6HK#rRy8{`g)=2z|zHouI+B$p5^e`+NU} zf8jD?#TN=UW7%g(;dV~pXP=nDpqQZ~^Vg~QD{}H;^gZ$dxdakCHO$SCu++3I*m~m& zTMH%~-lCfk)u28xVAxo|z(wg^YE?AB-Ub6z|x4E|PFQH-OX} zSj&?d$K$R0v0jnGchi(^vQmA-yD;bC3qBXiZ0K?l<^E3gprtM6MUhsu)j6_G&G4%l p9T)jGu#L5g<2ZGJ^;f5Wxy0{4~H01xY6r zgUCb;5D8@hSqvH=qF4w>l%y7y=!1y(f}+g461{>-urhm2hGIUTv@|0xqXZDL0HFjU E00_$}bN~PV literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_print.pyo b/test/bytecode_2.1/test_print.pyo new file mode 100644 index 0000000000000000000000000000000000000000..7dffcdf8c50118d5292c6538ab3905588ba71b5d GIT binary patch literal 242 zcmdOT&C9j#UAj#&0}wC)ad9e;NMT@bPhkXNCLm@8VipE>51<5)7LQ`YE{#=>hX;1y z6jp{{4K|=nnT#L;WN{`lh+qK`tU$s~1MC`*bW$;hOw<68P$rPYpaCL^g@8m!YH^7^ ih=?yJ%FHX#E2so3v*%|2QAtce*?7zb^R4_wF%a^qkW%pM;h%!PuIDF>5&!4tsal+F|X4Nrz=F^MuRX zXHN_|dL4%yN5o}&d6Ld)uMWCpdvl`W_C(#?vGTN!XpEJAW@r2%@S@BVMyP|Lf%zPa zuF6CLN`p|uh_Y0$)g{b29V`|Q1i=gp#whnvq2c^3%}np3sEA7hy#-7q2$|@8(d37M zrpizTod2asAH!>dsaCLQP|g!AdRvyulCPwM6tQ>+!@916ot7J!lS-K?$3V#NSS#%M z6uMTqjs?U@aNGE{DyfqaGDWw2jG0#aC39$W`hkRjg=aA&`1We-cA`k=B#KOzXp9-z q4=8knzBTuGpJLX*OewN^3oW95do|YZG-l?S-VJx{|h5QgnEZK)+B7WP}JMo3L|gvv|@gjA+3Q5w6AMQTU(MOFSA8$Sn$jh%C# zd@Kko`SJPu-uZmKcs>s>nFtsft6h?|r__lRai34qD zw=YmzBW^XPr_*;41_5!vkdTC}58cUgY0EtKy`%Gf6b?|@7LyQs^e1Gq9{!xH(6=lg Y|JGL@0?@8 jB(=CiA4J3#XXd5nq{bJQt literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_slices.pyc b/test/bytecode_2.1/test_slices.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21e623a07996c672e0f062ba275abb294c077d50 GIT binary patch literal 1060 zcma)5!EO^V5FKyYrgfWAXjEDd#VvxQshUU?Tu>s^A3#XyiA%IuJBh`{UfGVKoGc;r z!}tb11Bq|I+sh;5hH zafJoA;+_1nx8l73zVi_7`acx?!)=D)QYWk%*<5DAc8e9ex?)x@OePo>Sdls>jA9dQ*qTJ??M&K=6rv(E zj_C<=Gr_pX^t@Q*PIT!|$)XUBx%8U|Qbx~Nv2ru5ST4u5W#dt!EKe=AK65|#XE4lRJl$$ zOBJVhsma2G#toAyWb@QXt*AW-?!;RbMo&#TXIZLRj*SH~3nhbVAUkLvjXc3_lwArV z6D+_6z-NgSyBU@nmTT9Q$5;wq5m@}JhR&pFD(rTMZ-Xf;&2!ntDsH)*86o5arj4-N zC>=YDa2wBv8lw@{*=S_90)V5M3lxC+#o~;y())kJ7W@B1!Cr^=Ub2(yk_MsW+9d1e Zh#V#t`2#nZ=FtEE literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_slices.pyo b/test/bytecode_2.1/test_slices.pyo new file mode 100644 index 0000000000000000000000000000000000000000..cbdc15900711db5b407b8cd310eb089179beeaaf GIT binary patch literal 979 zcmah|&2AGh5VkkJxCC0lfnJa~KtoUxse%h?h4KOjDLHXjIqOMcv9VXSqbOITJ{Zq~ z#4|ACP1^L-UF~>&zWHW6lMMg%#Gikwn}Xrf!7u#gjA_PxqT~z>;7n)ilB1~AoBFt= zqroKC%@k;`VeR=$M~mq;(;ar#z*KT{lB4^`fxZ(&opM0vXNmO0m&%^lsXj6^*j>i7 zNEOZwgc_CSY}ul=dx_{NU}Ap?L?z#H{el<=_+8V*UQ!G1xIRyHlJ)7{|K*@v5NJuW z(65fTqc4@lyrX@KLzxZww2Rlc3lSm2Jd~z@Fs}A;G?Kw>eF2gJvQjaEw{q#ctU*G| z*Crf6s8z~G>6S9CL24-6rrMW>?65Tv#$skoRY8IGTstdEvj|rqmCB1! z1!_Tv2NtAP@<)wb>?4c{r;k-k30}+qtwRq?Zzty3n&p~!?uiL4U>DWNxFk} zJ6k%XrLtPkrIuTdjeBVEhVDp%DJ=S)hNxEP7>E5W1+(aVS!ir5R9^Qs!$9U_O%B zLou~3b(q`(s*yPIT)QIALmM5mstphUdk}$kOp(ds6$k47n_%G@&vw?%x?J$iL0<6s a?ep{O10V4BS&MggGdtrwF0u>W=l=l(hSm-M literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_tuple_params.pyc b/test/bytecode_2.1/test_tuple_params.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f691e53acb76ff425f0df32ab504e1df457eae2d GIT binary patch literal 1295 zcmcIjOKaOe5FR~j*RtxyX^PuR*`o;9&Y|>B3MH>=D7dFkDrD_C7RZv&u5lG&bjd&K z&nfgbbY^Tf?&FZYB=j+wo#!{Rho2vMpT1nZjsYJRKm7rr29N-kD72yOfVAKie=VrH zAZ?HiNEc)SrYJN)w&2!*OB?DQ$OmlcKz#tR&9V!1AEd`}17rurflql{3&1l5Y{VGh>QZqtSA? z9A4#WqEfWV^ddDwsYc&ojksEwFS9g{q=+)Kk4D5yX_&iaLw=N?!gT( z-4?8DSmEOC-=kE%C`|FuUy^&;+bPTji}v6#GK%+y3d5@K);-xRiRfP^4XA?kq&H>o zNbft>vxBv>Zy_g})O(b=PpK*I)Blq9yuZ%dwl0DubwJA-hBA-CaJ_JhCyb|zXN>1T egUpG5je_M}!{gs#;7uE}htYi7cb+>wzFz??qyt_6 literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_tuple_params.pyo b/test/bytecode_2.1/test_tuple_params.pyo new file mode 100644 index 0000000000000000000000000000000000000000..641a9c89615f5325425177d9942d3d756f64eeb1 GIT binary patch literal 1244 zcmcIjO^eh(5UqU7jOlfiMM1<%AH%{V9>jwPvR?-;i?E&+A!O1$n}$p}q&tj}&29gg zKS%I4SY4TMc0o|lO~|8Cd0qADb?5NgKKuIp>TLmdh4`5F2m;^|(SsWdJPY8u2UU9%#D83cHnCuqyH51#@ULKr46prwFzp;2%i2hKDX zekSY*zr?d`I;X_K_?Spu(Mv&imycf|c3_?(ID^w)Z33-4+5;;0*i(l{R<65p^_3H& z4iN4|{pWec|CL-dPM}u?K?>1D?^}S{&k>qpdIh(a@8FTatY6+^+9q^=p)b zdhn;(iE(C+?P6#79Raj~f4YmOPshcPhdykYva#tsbv%1EcAR?W@ziN|hcwHCF0yPq nScJ!fCxoYjXYs_*-RPSH#kYw^e>MBN2#lL`>PNwgAj10xBtZFp literal 0 HcmV?d00001 diff --git a/test/bytecode_2.1/test_tuples.pyc b/test/bytecode_2.1/test_tuples.pyc new file mode 100644 index 0000000000000000000000000000000000000000..445a4bfb2625c0342aa834c8edb45f71a4e8cf35 GIT binary patch literal 749 zcmZuvO^Xvj5PdcIGGnrStXUKA(4dE~kjYhKMLdX}L|8!yLYSm`l9Aczp}U8eQ-goa z-{MK|H&{LE8aCL_kE&O%UKd55{~E?Wes3<;;M3u2pAz5!2`o71!{3D@WP}C54{m5o&}Z(%~8$|3wI zh{!)eN%-tXklkb5g+Du{CU4*Q$NwY8aBb)Wbo|zF{xw3?1Gx^q6Ua}F&0fkLE~j_G zvVJnePFc5fbyX;vRC_U-39D%t{c&Hs7Lo1vuMm4!~FNJ|-qDYM$}Bu3;VXIH7qbs6XUE09M4S^?St!hgxn8QxF3 zjJC(HTuQxOE^W}K4XzseX8YGwwW>EG?wBQvQ$0D z5F=V3+K@Ex9!P1L5A_fv0sCn_oa2+~0wOAeXVEz>&yMliyMHs+q6_oUiMz)K3A57J z&{jn*&9tcbWWtTE%2;w&;6-GuEEP|5$+r+=k7;Ih5Jg2)TCNjrQ^|#l^}49@pKeoS zR!$lFO%osShuWrE@nvo0B-UcrmgTZ!b18XhZE+O@o6Tmr(sC(tqLis}I~6k6&kCBQ zgx;uJM}kL6Ft=q=m9$C8GevG4*-R^zA>B0docK;!PTa4|#w7P6=S`O+426!v&^SJ7 zblK?Z$n_m2w#bOG(1;mO8`eH~tA{ zCM~TNq*Sxn$7FUg@9oTVKI^rQ+0{h^dR*G+H9=0V2Ma8K3E4iZf^}dutcwT25^Na@ zjfp}Yz*Z#ELEeO|imj2iVLh>3*c!&>fHFreD$umjW9IQNcW|STxyVY$%E)U>J2r|= zM@AE-Y`zM<3BH@k$~_gwUFwjddnO-|;P-esg<(hof|ptHcz>HrpQlf0Hz{(49wbRq z#T^QXnKS0BF-wRK34SQ|x0KiSR(}2mVnEJZ_&#oxiszf&JCKyFTSGtF9{n=*k(dz uJNieqVY^`S)X0=p!b6eY6YL8P1c&R8rDH2F+~J0oG@Di83iOHgX?+3R8HNo2 literal 0 HcmV?d00001 diff --git a/test/test_pythonlib.py b/test/test_pythonlib.py index 0ca68842..503e5cdf 100755 --- a/test/test_pythonlib.py +++ b/test/test_pythonlib.py @@ -78,7 +78,7 @@ for vers in (2.7, 3.4, 3.5, 3.6): test_options[key] = (os.path.join(src_dir, pythonlib), PYOC, key, vers) pass -for vers in (2.2, 2.3, 2.4, 2.5, 2.6, 2.7, +for vers in (2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 'pypy3.2', 'pypy2.7'): bytecode = "bytecode_%s" % vers diff --git a/uncompyle6/parser.py b/uncompyle6/parser.py index e455afc2..91a5c76e 100644 --- a/uncompyle6/parser.py +++ b/uncompyle6/parser.py @@ -553,7 +553,13 @@ def get_python_parser( # FIXME: there has to be a better way... if version < 3.0: - if version == 2.2: + if version == 2.1: + import uncompyle6.parsers.parse21 as parse21 + if compile_mode == 'exec': + p = parse21.Python21Parser(debug_parser) + else: + p = parse21.Python21ParserSingle(debug_parser) + elif version == 2.2: import uncompyle6.parsers.parse22 as parse22 if compile_mode == 'exec': p = parse22.Python22Parser(debug_parser) diff --git a/uncompyle6/parsers/parse2.py b/uncompyle6/parsers/parse2.py index 7267d98a..8b49b607 100644 --- a/uncompyle6/parsers/parse2.py +++ b/uncompyle6/parsers/parse2.py @@ -196,16 +196,18 @@ class Python2Parser(PythonParser): genexpr ::= LOAD_GENEXPR MAKE_FUNCTION_0 expr GET_ITER CALL_FUNCTION_1 ''' - # def p_import2(self, args): - # ''' - # # These might be relevant for only Python 2.0 or so. - # importstar ::= LOAD_CONST LOAD_CONST IMPORT_NAME_CONT IMPORT_STAR - # importfrom ::= LOAD_CONST LOAD_CONST IMPORT_NAME_CONT importlist2 POP_TOP - # import_as_cont ::= IMPORT_NAME_CONT designator - # import_as_cont ::= IMPORT_NAME_CONT load_attrs designator - # ''' + def p_import15(self, args): + ''' + stmt ::= importstmt + stmt ::= importfrom + importstmt ::= IMPORT_NAME STORE_FAST + importstmt ::= IMPORT_NAME STORE_NAME + importfrom ::= IMPORT_NAME importlist + importlist ::= importlist IMPORT_FROM + importlist ::= IMPORT_FROM + ''' def p_expr2(self, args): """ expr ::= LOAD_LOCALS diff --git a/uncompyle6/parsers/parse21.py b/uncompyle6/parsers/parse21.py new file mode 100644 index 00000000..7fe06d71 --- /dev/null +++ b/uncompyle6/parsers/parse21.py @@ -0,0 +1,57 @@ +# Copyright (c) 2016 Rocky Bernstein +# Copyright (c) 2000-2002 by hartmut Goebel + +from spark_parser import DEFAULT_DEBUG as PARSER_DEFAULT_DEBUG +from uncompyle6.parser import PythonParserSingle +from uncompyle6.parsers.parse22 import Python22Parser + +class Python21Parser(Python22Parser): + + def __init__(self, debug_parser=PARSER_DEFAULT_DEBUG): + super(Python22Parser, self).__init__(debug_parser) + self.customized = {} + + def p_forstmt21(self, args): + """ + _for ::= LOAD_CONST FOR_LOOP + forstmt ::= SETUP_LOOP expr _for designator + return_stmts + POP_BLOCK COME_FROM + forstmt ::= SETUP_LOOP expr _for designator + l_stmts_opt _jump_back + POP_BLOCK COME_FROM + """ + + def p_import21(self, args): + ''' + # These are be relevant for only Python 2.0 and 2.1 + stmt ::= importstmt2 + stmt ::= importfrom2 + stmt ::= importstar + stmt ::= import_as_cont + stmt ::= import_as + importfrom2 ::= LOAD_CONST IMPORT_NAME importlist2 POP_TOP + importlist2 ::= importlist2 import_as + importstmt2 ::= LOAD_CONST IMPORT_NAME designator + importstmt2 ::= LOAD_CONST IMPORT_NAME IMPORT_FROM designator POP_TOP + importstar ::= LOAD_CONST LOAD_CONST IMPORT_NAME_CONT IMPORT_STAR + importfrom ::= LOAD_CONST LOAD_CONST IMPORT_NAME_CONT importlist2 POP_TOP + import_as ::= LOAD_CONST IMPORT_NAME LOAD_ATTR designator + import_as ::= LOAD_CONST IMPORT_NAME LOAD_ATTR LOAD_ATTR designator + import_as ::= LOAD_CONST IMPORT_NAME LOAD_ATTR LOAD_ATTR LOAD_ATTR designator + import_as ::= IMPORT_FROM designator + import_as_cont ::= LOAD_CONST IMPORT_NAME_CONT designator + import_as_cont ::= IMPORT_NAME_CONT load_attrs designator + ''' + +class Python21ParserSingle(Python22Parser, PythonParserSingle): + pass + +if __name__ == '__main__': + # Check grammar + p = Python21Parser() + p.checkGrammar() + p.dumpGrammar() + +# local variables: +# tab-width: 4 diff --git a/uncompyle6/scanner.py b/uncompyle6/scanner.py index 26d82580..2dd3a4f3 100755 --- a/uncompyle6/scanner.py +++ b/uncompyle6/scanner.py @@ -18,7 +18,7 @@ from uncompyle6 import PYTHON3, IS_PYPY from uncompyle6.scanners.tok import Token # The byte code versions we support -PYTHON_VERSIONS = (2.2, 2.3, 2.4, 2.5, 2.6, 2.7, +PYTHON_VERSIONS = (2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6) # FIXME: DRY diff --git a/uncompyle6/scanners/scanner21.py b/uncompyle6/scanners/scanner21.py new file mode 100644 index 00000000..ce60c801 --- /dev/null +++ b/uncompyle6/scanners/scanner21.py @@ -0,0 +1,27 @@ +# Copyright (c) 2016 by Rocky Bernstein +""" +Python 2.1 bytecode scanner/deparser + +This massages tokenized 2.1 bytecode to make it more amenable for +grammar parsing. +""" + +import uncompyle6.scanners.scanner22 as scan +# from uncompyle6.scanners.scanner26 import ingest as ingest26 + +# bytecode verification, verify(), uses JUMP_OPs from here +from xdis.opcodes import opcode_21 +JUMP_OPs = opcode_21.JUMP_OPs + +# We base this off of 2.2 instead of the other way around +# because we cleaned things up this way. +# The history is that 2.7 support is the cleanest, +# then from that we got 2.6 and so on. +class Scanner21(scan.Scanner22): + def __init__(self, show_asm=False): + scan.Scanner22.__init__(self, show_asm) + self.opc = opcode_21 + self.opname = opcode_21.opname + self.version = 2.1 + self.genexpr_name = ''; + return diff --git a/uncompyle6/scanners/scanner22.py b/uncompyle6/scanners/scanner22.py index 0c1840c9..8f740dba 100644 --- a/uncompyle6/scanners/scanner22.py +++ b/uncompyle6/scanners/scanner22.py @@ -1,10 +1,9 @@ # Copyright (c) 2016 by Rocky Bernstein """ -Python 2.2 bytecode scanner/deparser +Python 2.2 bytecode ingester. -This overlaps Python's 2.2's dis module, but it can be run from -Python 3 and other versions of Python. Also, we save token -information for later use in deparsing. +This massages tokenized 2.2 bytecode to make it more amenable for +grammar parsing. """ import uncompyle6.scanners.scanner23 as scan diff --git a/uncompyle6/scanners/scanner27.py b/uncompyle6/scanners/scanner27.py index 57eaeebd..885be81e 100755 --- a/uncompyle6/scanners/scanner27.py +++ b/uncompyle6/scanners/scanner27.py @@ -1,10 +1,9 @@ # Copyright (c) 2015, 2016 by Rocky Bernstein """ -Python 2.7 bytecode scanner/deparser +Python 2.7 bytecode ingester. -This overlaps Python's 2.7's dis module, but it can be run from -Python 3 and other versions of Python. Also, we save token information -for later use in deparsing. +This massages tokenized 2.7 bytecode to make it more amenable for +grammar parsing. """ diff --git a/uncompyle6/semantics/pysource.py b/uncompyle6/semantics/pysource.py index 946efcf9..695e50ba 100644 --- a/uncompyle6/semantics/pysource.py +++ b/uncompyle6/semantics/pysource.py @@ -564,14 +564,18 @@ class SourceWalker(GenericASTTraversal, object): TABLE_DIRECT.update({ 'tryfinallystmt': ( '%|try:\n%+%c%-%|finally:\n%+%c%-\n\n', 1, 4 ) }) - ########################### - # Import style for 2.0-2.3 - ########################### - TABLE_DIRECT.update({ - 'importstmt20': ( '%|import %c\n', 1), - 'importstar20': ( '%|from %[1]{pattr} import *\n', ), - 'importfrom20': ( '%|from %[1]{pattr} import %c\n', 2 ), - 'importlist20': ( '%C', (0, maxint, ', ') ), + if version == 2.1: + ########################### + # Import style for 2.0-2.3 + ########################### + TABLE_DIRECT.update({ + 'importstmt2': ( '%|import %c\n', 1), + 'import_as_cont': ( '%|import %c as %c\n', 1, 2), + 'importstar2': ( '%|from %[1]{pattr} import *\n', ), + 'importfrom2': ( '%|from %[1]{pattr} import %c\n', 2 ), + 'importlist2': ( '%C', (0, maxint, ', ') ), + 'IMPORT_NAME': ( '%{pattr}', ), + 'IMPORT_NAME_CONT': ( '%{pattr}', ), }) elif version >= 2.5: @@ -1055,13 +1059,17 @@ class SourceWalker(GenericASTTraversal, object): self.prune() def n_import_as(self, node): - iname = node[0].pattr + if self.version == 2.1 and node == 'import_as_cont': + self.write("\n", self.indent, "import ") + iname = node[1].pattr if node[0] == 'LOAD_CONST' else node[0].pattr assert node[-1][-1].type.startswith('STORE_') sname = node[-1][-1].pattr # assume one of STORE_.... here - if iname == sname or iname.startswith(sname + '.'): + if iname and iname == sname or iname.startswith(sname + '.'): self.write(iname) else: self.write(iname, ' as ', sname) + if self.version == 2.1 and node == 'import_as_cont': + self.write("\n") self.prune() # stop recursing n_import_as_cont = n_import_as @@ -1794,7 +1802,6 @@ class SourceWalker(GenericASTTraversal, object): """ # self.println("----> ", startnode.type) - fmt = entry[0] arg = 1 i = 0