a 5êdgßPã@sZddlZddlZddlmZdd„ZGdd„deƒZGdd„dejƒZed krVe  ¡dS) éN)ÚBytecodeTestCasecCs^d}t |¡D]}|j|kr|d7}qt|dƒr6|j}|jD]}t|dƒr<|t||ƒ7}q<|S)NréÚ__code__Úco_code)ÚdisÚget_instructionsÚopnameÚhasattrrÚ co_constsÚcount_instr_recursively)ÚfrÚcountÚinstrÚc©rú//usr/local/lib/python3.9/test/test_peepholer.pyr s     r c@sìeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9S):Ú TestTranformsc Csêtt |¡ƒ}dd„|Dƒ}|D]Ä}d|jvr0q ||j}|jdvrl| |j›d|j›d|j›d|j›¡|jdvr¨|jdkr¨| |j›d|j›d|j›d|j›¡d|jvr d |jvr | |j›d|j›d|j›d|j›¡q dS) NcSsi|] }|j|“qSr)Úoffset©Ú.0rrrrÚ óz4TestTranforms.check_jump_targets..ZJUMP_)Ú JUMP_ABSOLUTEÚ JUMP_FORWARDz at z jumps to Ú RETURN_VALUEZ_OR_POPZJUMP_IF_)ÚlistrrrZargvalZfailr)ÚselfÚcodeZ instructionsÚtargetsrZtgtrrrÚcheck_jump_targetss4   ÿÿ ÿÿÿÿÿz TestTranforms.check_jump_targetscCs^t |¡}tt |¡ƒ}tdd„|Dƒƒ}tdd„|Dƒƒ}| |d¡| |t|j ƒ¡dS)z0Check that the lnotab byte offsets are sensible.css|]}|dVqdS©rNr©rÚtrrrÚ 1rz-TestTranforms.check_lnotab..css|]}|dVqdSr rr!rrrr#2rrN) rZ_get_code_objectrZfindlinestartsÚminÚmaxZassertGreaterEqualZ assertLessÚlenr)rrZlnotabZ min_bytecodeZ max_bytecoderrrÚ check_lnotab+s   zTestTranforms.check_lnotabcCs:dd„}| |d¡| |d¡| |d¡| |¡dS)NcSs|dks ~dS)Nér©ÚxrrrÚunot;sz%TestTranforms.test_unot..unotZ UNARY_NOTÚPOP_JUMP_IF_FALSEÚPOP_JUMP_IF_TRUE©ÚassertNotInBytecodeÚassertInBytecoder')rr+rrrÚ test_unot9s    zTestTranforms.test_unotcCs8dD].\}}}t|ddƒ}| |||¡| |¡qdS)N))z not a is bÚIS_OPr)znot a is not br2r)z not a in bÚ CONTAINS_OPr)znot a not in br3rÚÚsingle)Úcompiler0r')rÚlineZcmp_opÚinvertrrrrÚtest_elim_inversion_of_is_or_inCs z-TestTranforms.test_elim_inversion_of_is_or_incCsŒdd„}dd„}dd„}|df|df|dffD],\}}| |d ¡| |d |¡| |¡q.d d„}| |d ¡| |d d¡| |¡dS) NcSs d}d}|S©Nrr)rrrr Psz0TestTranforms.test_global_as_constant..fcSsd}|S)NTrr)rrrÚgTsz0TestTranforms.test_global_as_constant..gcSsd}|S)NFrr)rrrÚhWsz0TestTranforms.test_global_as_constant..hTFZ LOAD_GLOBALÚ LOAD_CONSTcSsdS)z1Adding a docstring made this test fail in Py2.5.0Nrrrrrr `sr.)rr r;r<ÚfuncÚelemrrrÚtest_global_as_constantNs   z%TestTranforms.test_global_as_constantcCsBdd„}dD]}| ||¡q dD]}| ||¡q"| |¡dS)NcSsqtSr:)rrrrrr jsz'TestTranforms.test_while_one..f)r=r,©rr.)rr r?rrrÚtest_while_onehs zTestTranforms.test_while_onecCsLdD]B\}}t|ddƒ}| ||¡| |d¡| |d¡| |¡qdS)N))za, = a,r=)z a, b = a, bZROT_TWO)za, b, c = a, b, cZ ROT_THREEr4r5Ú BUILD_TUPLEZ UNPACK_TUPLE©r6r0r/r'©rr7r?rrrrÚtest_pack_unpackts      zTestTranforms.test_pack_unpackcCs¦dD]8\}}t|ddƒ}| |d|¡| |d¡| |¡qttttdƒƒƒddƒ}| |d¡dd„t |¡Dƒ}|  t |ƒd ¡| |¡d d „}| |¡dS) N))z a = 1,2,3©rr(é)z ("a","b","c")©ÚaÚbr)z a,b,c = 1,2,3rG)z(None, 1, None)©NrN)z((1, 2), 3, 4)©©rr(rHér4r5r=rCé'cSsg|]}|jdkr|‘qS)r=©rrrrrÚ ‘s ÿzETestTranforms.test_folding_of_tuples_of_constants..r(cSsgd¢fdS)N)drrr(rHrOééééé rrr(rHrOrSrTrUrVrWrrr(rHrOrSrTrUrVrWrrr(rHrOrSrTrUrVrWrrr(rHrOrSrTrUrVrWrrr(rHrOrSrTrUrVrWrrr(rHrOrSrTrUrVrWrrr(rHrOrSrTrUrVrWrrr(rHrOrSrTrUrVrWrrr(rHrOrSrTrUrVrWrrrrrÚcrater™szATestTranforms.test_folding_of_tuples_of_constants..crater) r6r0r/r'ÚreprÚtupleÚrangerrÚ assertEqualr&)rr7r?rZ load_constsrXrrrÚ#test_folding_of_tuples_of_constants€s       z1TestTranforms.test_folding_of_tuples_of_constantscCsBdD]8\}}t|ddƒ}| |d|¡| |d¡| |¡qdS)N))z a in [1,2,3]rG)za not in ["a","b","c"]rI)za in [None, 1, None]rL)za not in [(1, 2), 3, 4]rMr4r5r=Ú BUILD_LISTrDrErrrÚ"test_folding_of_lists_of_constants¨s    z0TestTranforms.test_folding_of_lists_of_constantscCsèdthd£ƒfdthd£ƒfdtddhƒfdthd£ƒfd thd£ƒffD]8\}}t|d d ƒ}| |d ¡| |d |¡| |¡qJdd„}dd„}| |dƒ¡| |dƒ ¡| |¡| |dƒ ¡| |dƒ¡| |¡dS)Nz a in {1,2,3}¾rr(rHza not in {"a","b","c"}>rKrrJza in {None, 1, None}rza not in {(1, 2), 3, 4}>rNrHrOza in {1, 2, 3, 3, 2, 1}r4r5Z BUILD_SETr=cSs|dvS©Nr`r©rJrrrr Äsz:TestTranforms.test_folding_of_sets_of_constants..fcSs|dvSrarrbrrrr;Çsz:TestTranforms.test_folding_of_sets_of_constants..grHrO)Ú frozensetr6r/r0r'Ú assertTrue)rr7r?rr r;rrrÚ!test_folding_of_sets_of_constantsµs$ú     z/TestTranforms.test_folding_of_sets_of_constantscCs,dD]N\}}t|ddƒ}| |d|¡t |¡D]}| |j d¡¡q0| |¡qtdddƒ}| |dd¡| |dd¡| |¡td ddƒ}| |dd ¡| d d |j ¡| |¡td ddƒ}| |dd ¡| dd >|j ¡| |¡tdddƒ}| |dd ¡| dd |j ¡| |¡dS)N))z a = 2+3+4rW)z"@"*4z@@@@)za="abc" + "def"Zabcdef)za = 3**4éQ)za = 3*4é )z a = 13//4rH)za = 14%4r()za = 2+3rS)za = 13-4rW)za = (12,13)[1]é )z a = 13 << 2é4)z a = 13 >> 2rH)z a = 13 & 7rS)z a = 13 ^ 7é )z a = 13 | 7ér4r5r=ÚBINARY_za=2+"b"r(rKz a="x"*10000rPr*z a=1<<1000ièrz a=2**1000) r6r0rrÚ assertFalserÚ startswithr'Z assertNotInr )rr7r?rrrrrÚ#test_folding_of_binops_on_constantsÓs,          z1TestTranforms.test_folding_of_binops_on_constantscCs¶tdddƒ}| |dd¡| |d¡| |¡tdddƒ}| |dd¡| |d¡| |¡td ddƒ}| |dd ¡| |d¡| |¡td ddƒ}| |d¡| |¡dS) Nz"foo"[0]r4r5r=r Z BINARY_SUBSCRu "aï¿¿"[1]uï¿¿u "ð’…"[0]uð’…z "fuu"[10]rD)rrrrrÚtest_binary_subscr_on_unicodeÿs           z+TestTranforms.test_binary_subscr_on_unicodecCsÌdD]N\}}t|ddƒ}| |d|¡t |¡D]}| |j d¡¡q0| |¡qdd„}t |¡D]}| |j d¡¡qf| |¡dD]:\}}}t|ddƒ}| |d|¡| ||¡| |¡qŒdS) N))z-0.5gà¿)z-0.0ç€)z -(1.0-1.0)rq)z-0r)z~-2r)z+1rr4r5r=ÚUNARY_cSsdS)NrqrrrrrÚnegzero&szDTestTranforms.test_folding_of_unaryops_on_constants..negzero))z-"abc"ÚabcZUNARY_NEGATIVE)z~"abc"rtZ UNARY_INVERT)r6r0rrrmrrnr')rr7r?rrrsrrrrÚ%test_folding_of_unaryops_on_constantss      z3TestTranforms.test_folding_of_unaryops_on_constantscCsHdd„}| |dd¡dd„t |¡Dƒ}| t|ƒd¡| |¡dS)NcSs|Sr:rr)rrrr 9sz/TestTranforms.test_elim_extra_return..fr=cSsg|]}|jdkr|‘qS©rrQrrrrrR<s ÿz8TestTranforms.test_elim_extra_return..r)r/rrr\r&r'©rr ÚreturnsrrrÚtest_elim_extra_return7s z$TestTranforms.test_elim_extra_returncCs\dd„}| |¡| |d¡| |d¡dd„t |¡Dƒ}| t|ƒd¡| |¡dS)NcSs |r|S|Sr:r)ÚcondZ true_valueZ false_valuerrrr Csÿz1TestTranforms.test_elim_jump_to_return..frrcSsg|]}|jdkr|‘qSrvrQrrrrrRJs ÿz:TestTranforms.test_elim_jump_to_return..r()rr/rrr\r&r'rwrrrÚtest_elim_jump_to_returnAs   z&TestTranforms.test_elim_jump_to_returncCs dd„}| |¡| |¡dS)NcSstrts trtƒntƒdSr:)rJrÚdÚfooZbazrrrrr Qs ÿz6TestTranforms.test_elim_jump_to_uncond_jump..f©rr'©rr rrrÚtest_elim_jump_to_uncond_jumpOs z+TestTranforms.test_elim_jump_to_uncond_jumpcCs dd„}| |¡| |¡dS)NcSs|rts trtƒ}qdSr:)rr|r}rbrrrr ^s ÿz7TestTranforms.test_elim_jump_to_uncond_jump2..fr~rrrrÚtest_elim_jump_to_uncond_jump2\s z,TestTranforms.test_elim_jump_to_uncond_jump2cCsàdd„}| |¡| |¡| t|dƒd¡dd„}| |¡| |¡| t|dƒd¡dd„}| |¡| |¡| |d¡| |d¡| |d¡d d„}| |¡| |¡| |d¡| |d¡| |d ¡dS) NcSs |o |o |Sr:rrIrrrr jsÿz7TestTranforms.test_elim_jump_to_uncond_jump3..fZJUMP_IF_FALSE_OR_POPr(cSs |p |p |Sr:rrIrrrr qsÿZJUMP_IF_TRUE_OR_POPcSs |r|p |Sr:rrIrrrr xsÿr,cSs |s|o |Sr:rrIrrrr sÿr-)rr'r\r r/r0rrrrÚtest_elim_jump_to_uncond_jump3gs(             z,TestTranforms.test_elim_jump_to_uncond_jump3cCsRdd„}| |d¡| |d¡dd„t |¡Dƒ}| t|ƒd¡| |¡dS)NcSs |rdS|rdSdS|rdSdS)Nrr(rHrOrSrTr©Zcond1Zcond2rrrr Œs z5TestTranforms.test_elim_jump_after_return1..frrcSsg|]}|jdkr|‘qSrvrQrrrrrR—s ÿz>TestTranforms.test_elim_jump_after_return1..rT)r/rrÚassertLessEqualr&r'rwrrrÚtest_elim_jump_after_return1Šs   z*TestTranforms.test_elim_jump_after_return1cCsjdd„}| |d¡dd„t |¡Dƒ}| t|ƒd¡dd„t |¡Dƒ}| t|ƒd¡| |¡dS) NcSs|rdSqdS)NrOrrƒrrrr žsz5TestTranforms.test_elim_jump_after_return2..frcSsg|]}|jdkr|‘qSrArQrrrrrR£s ÿz>TestTranforms.test_elim_jump_after_return2..rcSsg|]}|jdkr|‘qSrvrQrrrrrR¦s ÿr()r/rrr\r&r„r'rwrrrÚtest_elim_jump_after_return2œs z*TestTranforms.test_elim_jump_after_return2cCs"dd„}| |d¡| |¡dS)NcSsddœdd„}|S)Nr()ÚreturncSsdSr:rrrrrr;­szBTestTranforms.test_make_function_doesnt_bail..f..gr)r;rrrr ¬sz7TestTranforms.test_make_function_doesnt_bail..fZ BINARY_ADD)r/r'rrrrÚtest_make_function_doesnt_bail«s z,TestTranforms.test_make_function_doesnt_bailcCsrgd¢}|D]`}t|ddƒ}t |¡D]:}| |j d¡¡| |j d¡¡| |j d¡¡q&| |¡q dS)N) z3 * -5z-3 * 5z 2 * (3 * 4)z (2 * 3) * 4z (-1, 2, 3)z (1, -2, 3)z (1, 2, -3)z(1, 2, -3) * 6z:lambda x: x in {(3 * -5) + (-1 - 6), (1, -2, 3) * 2, None}r4r5rrrlZBUILD_)r6rrrmrrnr')rZexprsÚerrrrrÚtest_constant_folding³s  z#TestTranforms.test_constant_foldingcCs(dd„}| t|dƒd¡| |¡dS)NcSs tttfvSr:)r*rJrKrrrrÚ containtestÉsz7TestTranforms.test_in_literal_list..containtestr^r©r\r r')rr‹rrrÚtest_in_literal_listÈsz"TestTranforms.test_in_literal_listcCs(dd„}| t|dƒd¡| |¡dS)NcSsttfD]}qdSr:)rJrKr)rrrÚforloopÏs z8TestTranforms.test_iterate_literal_list..forloopr^rrŒ)rrŽrrrÚtest_iterate_literal_listÎsz'TestTranforms.test_iterate_literal_listcCs$dd„}| |ƒd¡| |¡dS)NcSsdsdr dSdS)NTFrrrrrrrr Ösz=TestTranforms.test_condition_with_binop_with_bools..fr)r\r'rrrrÚ$test_condition_with_binop_with_boolsÕsz2TestTranforms.test_condition_with_binop_with_boolscCs$dd„}| |dƒ¡| |¡dS)NcSs|rndrdSdS)NTFrr)rrrr ßs z3TestTranforms.test_if_with_if_expression..fT)rdr'rrrrÚtest_if_with_if_expressionÝsz(TestTranforms.test_if_with_if_expressioncCsdd„}| |¡dS)NcSsdSdS)NrHrSrTrr)rrrr êsz+TestTranforms.test_trailing_nops..f)r'rrrrÚtest_trailing_nopsæsz TestTranforms.test_trailing_nopscCsldd„}| t|dƒd¡dd„}| t|dƒd¡dd„}| t|dƒd¡d d „}| t|dƒd¡dS) NcSsdd„tDƒS)NcSsg|]}t|ƒ}|‘qSr©r ©rr*ÚyrrrrRôrz[TestTranforms.test_assignment_idiom_in_comprehensions..listcomp..rbrrrrÚlistcompószGTestTranforms.test_assignment_idiom_in_comprehensions..listcompZFOR_ITERrcSsdd„tDƒS)NcSsh|]}t|ƒ}|’qSrr“r”rrrÚ ÷rzYTestTranforms.test_assignment_idiom_in_comprehensions..setcomp..rbrrrrÚsetcompöszFTestTranforms.test_assignment_idiom_in_comprehensions..setcompcSsdd„tDƒS)NcSsi|]}t|ƒ}||“qSrr“r”rrrrúrz[TestTranforms.test_assignment_idiom_in_comprehensions..dictcomp..rbrrrrÚdictcompùszGTestTranforms.test_assignment_idiom_in_comprehensions..dictcompcSsdd„tDƒS)Ncss|]}t|ƒ}|VqdSr:r“r”rrrr#ýrzYTestTranforms.test_assignment_idiom_in_comprehensions..genexpr..rbrrrrÚgenexprüszFTestTranforms.test_assignment_idiom_in_comprehensions..genexpr)r\r )rr–r˜r™ršrrrÚ'test_assignment_idiom_in_comprehensionsòsz5TestTranforms.test_assignment_idiom_in_comprehensionsN)Ú__name__Ú __module__Ú __qualname__rr'r1r9r@rBrFr]r_rerorpruryr{r€rr‚r…r†rˆrŠrrrr‘r’r›rrrrrs8    ( ,!   #  rc@seZdZdd„Zdd„ZdS)Ú TestBugletscCs<dd„}| t¡|ƒWdƒn1s.0YdS)NcSsddh\}}||fS)Nrr)r*r•rrrr s z%TestBuglets.test_bug_11510..f)Z assertRaisesÚ ValueErrorrrrrÚtest_bug_11510s zTestBuglets.test_bug_11510c Cs2tdƒD]$}zt‚Wqtpty*Yq0qdS)Nrj)r[Ú Exception)rÚirrrÚtest_bpo_42057 s  zTestBuglets.test_bpo_42057N)rœrržr¡r¤rrrrrŸs rŸÚ__main__) rZunittestZtest.support.bytecode_helperrr rZTestCaserŸrœÚmainrrrrÚs  p