ó
    F\h�  ã                   óˆ  • S r SSKrSSKrSSKrSSKr SSKr\" 5       rS r	 " S S\R                  5      r " S S\R                  5      r\R                  " \SL S5       " S	 S
\5      5       r\R                  " \SL S5       " S S\5      5       r\R                  " \SL S5       " S S\5      5       rg! \ a    Sr N¨f = f)zGbytecode_helper - support tools for testing correct bytecode generationé    Nc              #   óà   #   • U=(       d    [        S5      nU  HP  nU[        US5      4v •  UR                  =(       d    S H$  u  p4n[        U5       H  n[        US5        M     M&     MR     g 7f)N© )ÚiterÚnextÚ
cache_infoÚrange)ÚinstrsÚco_positionsÚinstrÚ_ÚsizeÚis         Ú3/usr/lib/python3.13/test/support/bytecode_helper.pyÚinstructions_with_positionsr      se   é € ð
  ×+¤4¨£8€LÛˆØ”T˜,¨Ó+Ð+Ò+Ø ×+Ñ+×1¨rÒ1‰JˆA�QÜ˜4–[�Ü�\ 2Ö&ó !ó 2ò ùs   ‚A,A.c                   ó6   • \ rS rSrSrS r\4S jr\4S jrSr	g)ÚBytecodeTestCaseé   z1Custom assertion methods for inspecting bytecode.c                 ót   • [         R                  " 5       n[        R                  " XS9  UR                  5       $ )N)Úfile)ÚioÚStringIOÚdisÚgetvalue)ÚselfÚcoÚss      r   Úget_disassembly_as_stringÚ*BytecodeTestCase.get_disassembly_as_string   s%   € Ü�KŠK‹MˆÜ�Š�ÒØ�z‰z‹|Ðó    c                 óV  • U R                  U[        R                  5        [        R                  " U5       H2  nUR                  U:X  d  M  U[
        L d  UR                  U:X  d  M0  Us  $    U R                  U5      nU[
        L a
  U< SU< 3nOSnXbX54-  nU R                  U5        g)zAReturns instr if opname is found, otherwise throws AssertionErrorz not found in bytecode:
z!(%s,%r) not found in bytecode:
%sN)	ÚassertInr   ÚopmapÚget_instructionsÚopnameÚ_UNSPECIFIEDÚargvalr   Úfail©r   Úxr$   r&   r   ÚdisassemblyÚmsgs          r   ÚassertInBytecodeÚ!BytecodeTestCase.assertInBytecode"   sŽ   € à�‰�fœcŸi™iÔ(Ü×)Ò)¨!Ö,ˆEØ�|‰|˜vÕ%Øœ\Ò)¨U¯\©\¸VÕ-CØ ’Lñ -ð ×4Ñ4°QÓ7ˆØ”\Ò!Û5;º[ÐI‰Cà6ˆCØ Ð5Ñ5ˆCØ�	‰	�#�r   c                 ód  • U R                  U[        R                  5        [        R                  " U5       Hv  nUR                  U:X  d  M  U R                  U5      nU[        L a  U< SU< 3nU R                  U5        MK  UR                  U:X  d  M]  SnXbX54-  nU R                  U5        Mx     g)z(Throws AssertionError if opname is foundz occurs in bytecode:
z(%s,%r) occurs in bytecode:
%sN)	r!   r   r"   r#   r$   r   r%   r'   r&   r(   s          r   ÚassertNotInBytecodeÚ$BytecodeTestCase.assertNotInBytecode1   s‹   € à�‰�fœcŸi™iÔ(Ü×)Ò)¨!Ö,ˆEØ�|‰|˜vÕ%Ø"×<Ñ<¸QÓ?�Øœ\Ò)Û:@Â+ÐN�CØ—I‘I˜c–NØ—\‘\ VÕ+Ø;�CØ¨Ð =Ñ=�CØ—I‘I˜c–Nò -r   r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r%   r,   r/   Ú__static_attributes__r   r   r   r   r      s   † Ù;òð
 2>ô ð 5A÷ #r   r   c                   óÞ   • \ rS rSr\" \R                  5      r\" \R                  \R                  -   \R                  -   5      r\R                  \5      r " S S5      rS rS rS rS rSrg	)
ÚCompilationStepTestCaseé?   c                   ó   • \ rS rSrSrg)ÚCompilationStepTestCase.LabeléE   r   N)r1   r2   r3   r4   r6   r   r   r   ÚLabelr;   E   s   † Úr   r=   c                 óD  • U R                  U[        5        UR                  5       nU R                  U5      R                  5       nU R	                  [        U5      [        U5      5        [        X25       H£  u  pE[        U[        5      (       a  U R	                  XT5        M-  U R                  U[        5        U R                  U[        5        [        [        U5       Vs/ s H  ofS   S:w  d  M  US   PM     sn5      nU R	                  US U US U 5        M¥     g s  snf )Né   éÿÿÿÿr   )ÚassertIsInstanceÚlistr#   Úseq_from_instsÚassertEqualÚlenÚzipÚ
isinstanceÚintÚtupleÚmaxÚ	enumerate)r   Ú
actual_seqÚexpectedÚactualÚactÚexpÚpÚidxs           r   ÚassertInstructionsMatchÚ/CompilationStepTestCase.assertInstructionsMatchH   sñ   € ð
 	×Ñ˜h¬Ô-Ø×,Ñ,Ó.ˆØ×&Ñ& xÓ0×AÑAÓCˆØ×Ñœ˜V›¤c¨(£mÔ4ô ˜FÖ-‰HˆCÜ˜#œs×#Ñ#Ø× Ñ  Ô*ÙØ×!Ñ! #¤uÔ-Ø×!Ñ! #¤uÔ-Ü¤Y¨s¤^ÓB¢^ ¸±t¸r±z“t�q˜”t¡^ÑBÓCˆCØ×Ñ˜S  #˜Y¨¨D¨S¨	Ö2ò .ùò Cs   Ã D
Ã0	D
c                 óÔ   • Sn/ nU H]  n[        X@R                  [        45      (       d   e[        X@R                  5      (       a  X$l        MG  US-  nUR	                  U5        M_     U$ )Nr   r?   )rG   r=   rI   ÚvalueÚappend)r   ÚinstsrR   ÚresÚitems        r   ÚresolveAndRemoveLabelsÚ.CompilationStepTestCase.resolveAndRemoveLabels\   s`   € ØˆØˆÛˆDÜ˜d§Z¡Z´Ð$7×8Ñ8Ð8Ð8Ü˜$§
¡
×+Ñ+Ø –
à�q‘�Ø—
‘
˜4Ö ñ ð ˆ
r   c                 ó^  • U Vs1 s H!  n[        X R                  5      (       d  M  UiM#     nn[        U5       H  u  pEXEl        M     [        R
                  " 5       nU HÄ  n[        X R                  5      (       a  UR                  UR                  5        M:  US   n[        U[        5      (       a  [        R                  U   nUSS  tp‰[        X€R                  5      (       a  UR                  nU	S/S[        U	5      -
  -  -   n	UR                  " Xx=(       d    S/U	Q76   MÆ     U$ s  snf )Nr   r?   r@   é   )rG   r=   rK   rV   Ú_testinternalcapiÚnew_instruction_sequenceÚ	use_labelÚstrÚopcoder"   rE   Úaddop)
r   rX   rZ   Úlabelsr   ÚlblÚseqÚopÚargÚlocs
             r   rC   Ú&CompilationStepTestCase.seq_from_instsi   sô   € Ù#(ÓI¢5˜4¬J°t¿Z¹Z×,H—$¡5ˆÐIÜ Ö'‰FˆAØŽIñ (ô  ×8Ò8Ó:ˆÛˆDÜ˜$§
¡
×+Ñ+Ø—‘˜dŸj™jÖ)à˜!‘W�Ü˜b¤#×&Ñ&ÜŸ™ bÑ)�BØ   ˜H�	�Ü˜c§:¡:×.Ñ.ØŸ)™)�CØ˜R˜D A¬¨C«¡LÑ1Ñ1�Ø—	’	˜"Ÿh QÐ-¨Õ-ñ ð ˆ
ùò# Js
   …D*§D*c           	      óf  • U H«  n[        X R                  5      (       a  M  Utp4n[        U[        5      (       a  [        R                  U   nU R                  U[        R                  ;   US LS[        R                  U   < SU< 35        U R                  [        S U 5       5      5        M­     g )Nzopcode.opname[op]=z arg=c              3   óB   #   • U  H  n[        U[        5      v •  M     g 7f©N)rG   rH   )Ú.0Úls     r   Ú	<genexpr>Ú=CompilationStepTestCase.check_instructions.<locals>.<genexpr>‡   s   é € Ð@ºC°q¤
¨1¬c× 2Ð 2ºCùs   ‚)
rG   r=   rb   rc   r"   rD   Úhasargr$   Ú
assertTrueÚall)r   rX   Úinstrh   ri   rj   s         r   Úcheck_instructionsÚ*CompilationStepTestCase.check_instructions}   s•   € ÛˆDÜ˜$§
¡
×+Ñ+ÙØ ˆMˆB�cÜ˜"œc×"Ñ"Ü—\‘\ "Ñ%�Ø×Ñ˜R¤6§=¡=Ñ0Ø ¨˜_Ø 2¤§¡¨bÑ 1Ñ3°6°S±FÐ;ô=ð �O‰OœCÑ@¹CÓ@Ó@ÖAò r   r   N)r1   r2   r3   r4   Úsetr   rs   ÚHAS_ARGÚhasjrelÚhasjabsÚhasexcÚ
HAS_TARGETÚunionÚHAS_ARG_OR_TARGETr=   rS   r[   rC   rw   r6   r   r   r   r8   r8   ?   s]   † á�#—*‘*‹o€GÙ�S—[‘[ 3§;¡;Ñ.°·±Ñ;Ó<€JØŸ™ jÓ1Ð÷ñ ò3ò(òõ(
Br   r8   zrequires _testinternalcapic                   ó   • \ rS rSrS rSrg)ÚCodegenTestCaseéŠ   c                 ó:   • [         R                  " USS5      u  p#U$ )Nz
my_file.pyr   )r_   Úcompiler_codegen)r   ÚastrX   r   s       r   Úgenerate_codeÚCodegenTestCase.generate_code�   s   € Ü$×5Ò5°c¸<ÈÓK‰ˆØˆr   r   N)r1   r2   r3   r4   r‡   r6   r   r   r   r‚   r‚   Š   s   † õr   r‚   c                   ó   • \ rS rSrSS jrSrg)ÚCfgOptimizationTestCaseé’   c                 ó6   • [         R                  " XU5      nXB4$ rn   )r_   Úoptimize_cfg)r   rg   ÚconstsÚnlocalsrX   s        r   Úget_optimizedÚ%CfgOptimizationTestCase.get_optimized•   s   € Ü!×.Ò.¨s¸GÓDˆØˆ}Ðr   r   N)r   )r1   r2   r3   r4   r�   r6   r   r   r   rŠ   rŠ   ’   s   † ÷r   rŠ   c                   ó   • \ rS rSrS rSrg)ÚAssemblerTestCaseé™   c                 ó4   • [         R                  " XU5      nU$ rn   )r_   Úassemble_code_object)r   ÚfilenamerX   Úmetadatar   s        r   Úget_code_objectÚ!AssemblerTestCase.get_code_objectœ   s   € Ü×3Ò3°HÀXÓNˆØˆ	r   r   N)r1   r2   r3   r4   r™   r6   r   r   r   r“   r“   ™   s   † õr   r“   )r5   Úunittestr   r   rc   r_   ÚImportErrorÚobjectr%   r   ÚTestCaser   r8   ÚskipIfr‚   rŠ   r“   r   r   r   Ú<module>r       sù   ðÙ Mã Û 
Û 	Û ðÛñ ‹x€ò
'ô##�x×(Ñ(ô ##ôJHB˜h×/Ñ/ô HBðV 
‡‚Ð" dÐ*Ð,HÓIôÐ-ó ó Jðð 
‡‚Ð" dÐ*Ð,HÓIôÐ5ó ó Jðð 
‡‚Ð" dÐ*Ð,HÓIôÐ/ó ó Jñøðc ó ØÒðús   ”B6 Â6CÃ C