
    z%i                         	 d dl Z d dlZd dlZd dlmZmZmZ  e       Z G d de j                        Z
 G d de j                        Z G d de      Z G d	 d
e      Z G d de      Zy)    N)compiler_codegenoptimize_cfgassemble_code_objectc                   (    e Zd Z	 d ZefdZefdZy)BytecodeTestCasec                 x    t        j                         }t        j                  ||       |j                         S )N)file)ioStringIOdisgetvalue)selfcoss      P/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/support/bytecode_helper.pyget_disassembly_as_stringz*BytecodeTestCase.get_disassembly_as_string   s'    KKMzz|    c                 H   	 | j                  |t        j                         t        j                  |      D ]-  }|j                  |k(  s|t
        u s|j                  |k(  s+|c S  | j                  |      }|t
        u r|d|}n
d}||||fz  }| j                  |       y )Nz not found in bytecode:
z!(%s,%r) not found in bytecode:
%s)	assertInr   opmapget_instructionsopname_UNSPECIFIEDargvalr   failr   xr   r   instrdisassemblymsgs          r   assertInBytecodez!BytecodeTestCase.assertInBytecode   s    Ofcii())!, 	!E||v%\)U\\V-C L	! 44Q7\!5;[IC6C55C		#r   c                 T   	 | j                  |t        j                         t        j                  |      D ]o  }|j                  |k(  s| j                  |      }|t        u r|d|}| j                  |       E|j                  |k(  sUd}||||fz  }| j                  |       q y )Nz occurs in bytecode:
z(%s,%r) occurs in bytecode:
%s)	r   r   r   r   r   r   r   r   r   r   s          r   assertNotInBytecodez$BytecodeTestCase.assertNotInBytecode!   s    6fcii())!, 		#E||v%"<<Q?\):@+NCIIcN\\V+;C ==CIIcN		#r   N)__name__
__module____qualname__r   r   r!   r#    r   r   r   r   
   s    ;
 2>  5A #r   r   c                       e Zd Z eej
                        Z eej                  ej                  z   ej                  z         Z
ej                  e
      Z G d d      Zd Zd Zd Zd Zy)CompilationStepTestCasec                       e Zd Zy)CompilationStepTestCase.LabelN)r$   r%   r&   r'   r   r   Labelr+   5   s    r   r,   c                    | j                  |t               | j                  |t               | j                  |      }| j                  |      }| j                  t	        |      t	        |             t        ||      D ]  \  }}t        |t              r| j                  ||       )| j                  |t               | j                  |t               t	        |      t	        |      kD  r|d t	        |       }| j                  ||        y N)	assertIsInstancelistnormalize_instsassertEquallenzip
isinstanceinttuple)r   actual_	expected_actualexpectedactexps          r   assertInstructionsMatchz/CompilationStepTestCase.assertInstructionsMatch8   s    
 	gt,i.%%g.''	2Vc(m4 FH- 		'HC#s#  c*!!#u-!!#u-3x#c(")3s8nS#&		'r   c                     d}g }|D ]6  }t        || j                        r||_        !|dz  }|j                  |       8 |S )Nr      )r5   r,   valueappend)r   instsidxresitems        r   resolveAndRemoveLabelsz.CompilationStepTestCase.resolveAndRemoveLabelsP   sL     	!D$

+ 
q

4 	! 
r   c                 B   	 | j                  |      }g }|D ]  }|^}}}t        j                  j                  ||      }t	        || j
                        r|j                  }n|| j                  v r|nd }t        j                  |   }|j                  ||g|        |S r.   )
rG   r   r   getr5   r,   rA   HAS_ARGr   rB   )r   rC   rE   rF   opcodeoparglocargs           r   r1   z'CompilationStepTestCase.normalize_insts]   s    	 ++E2 		,D"&FECYY]]662F%,kk%5e4ZZ'FJJ*c*+		, 
r   c                     g }|D ]V  }t        |      }t        j                  |d      }|d   }|dd  dgdt        |      z
  z  z   }|j	                  ||g|       X |S )Nr   r@         )r0   r   r   r3   rB   )r   rC   rE   rF   instrK   rL   rM   s           r   complete_insts_infoz+CompilationStepTestCase.complete_insts_infoo   sv     	.D:DYYtAw'FGEqr(bTQT]33CJJ,,-	. 
r   N)r$   r%   r&   setr   hasargrJ   hasjrelhasjabshasexc
HAS_TARGETunionHAS_ARG_OR_TARGETr,   r>   rG   r1   rT   r'   r   r   r)   r)   /   s\    #**oGS[[3;;.;<Jj1 '0$
r   r)   c                       e Zd Zd Zy)CodegenTestCasec                 &    t        |dd      \  }}|S )Nz
my_file.pyr   )r   )r   astrC   _s       r   generate_codezCodegenTestCase.generate_code~   s    #Cq9qr   N)r$   r%   r&   rb   r'   r   r   r^   r^   |   s    r   r^   c                       e Zd ZddZy)CfgOptimizationTestCasec                 h    | j                  |      }| j                  |      }t        |||      }||fS r.   )r1   rT   r   )r   rC   constsnlocalss       r   get_optimizedz%CfgOptimizationTestCase.get_optimized   s:    $$U+((/UFG4f}r   N)r   )r$   r%   r&   rh   r'   r   r   rd   rd      s    r   rd   c                       e Zd Zd Zy)AssemblerTestCasec                      t        |||      }|S r.   )r   )r   filenamerC   metadatar   s        r   get_code_objectz!AssemblerTestCase.get_code_object   s    !(E8<	r   N)r$   r%   r&   rn   r'   r   r   rj   rj      s    r   rj   )unittestr   r
   _testinternalcapir   r   r   objectr   TestCaser   r)   r^   rd   rj   r'   r   r   <module>rs      sm    M  
 	 R Rx##x(( ##JJh// JZ- 5 / r   