
    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 Nf = 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8LT,+++ ++1r1JAQ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%    KKMzz|    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    fcii())!,E||v%\)U\\V-C L - 44Q7\!5;[IC6C55C		#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    fcii())!,E||v%"<<Q?\):@+NCIIcN\\V+;C ==CIIcN -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.LabelE   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-HC#s##  *!!#u-!!#u-Ys^B^trztqt^BCCS#YDS	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dZZ$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[        XR                  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    #(I54JtZZ,H$5I'FAI (  88:D$

++djj)!Wb#&&b)B H	c::..))CRDACL11		"hQ--  
# 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     @Cq
1c 2 2Cs   )
rG   r=   rb   rc   r"   rD   hasargr$   
assertTrueall)r   rX   instrh   ri   rj   s         r   check_instructions*CompilationStepTestCase.check_instructions}   s    D$

++ MBc"c""\\"%R6==0 _ 2b 136SF;= OOC@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]    #**oG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5c<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    !..sG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3HX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