File: //lib/python3.10/test/support/__pycache__/bytecode_helper.cpython-310.pyc
o
    E�ho  �                   @   s8   d Z ddlZddlZddlZe� ZG dd� dej�ZdS )zGbytecode_helper - support tools for testing correct bytecode generation�    Nc                   @   s0   e Zd ZdZdd� Zefdd�Zefdd�ZdS )	�BytecodeTestCasez1Custom assertion methods for inspecting bytecode.c                 C   s   t �� }tj||d� |�� S )N)�file)�io�StringIO�dis�getvalue)�self�co�s� r   �3/usr/lib/python3.10/test/support/bytecode_helper.py�get_disassembly_as_string   s   z*BytecodeTestCase.get_disassembly_as_stringc                 C   st   t �|�D ]}|j|kr|tu s|j|kr|  S q| �|�}|tu r*d||f }n	d}||||f }| �|� dS )zAReturns instr if opname is found, otherwise throws AssertionErrorz%s not found in bytecode:
%sz!(%s,%r) not found in bytecode:
%sN)r   �get_instructions�opname�_UNSPECIFIED�argvalr
   �fail�r   �xr   r   �instr�disassembly�msgr   r   r   �assertInBytecode   s   
�
z!BytecodeTestCase.assertInBytecodec                 C   sn   t �|�D ]/}|j|kr4| �|�}|tu r!d||f }| �|� q|j|kr4d}||||f }| �|� qdS )z(Throws AssertionError if opname is foundz%s occurs in bytecode:
%sz(%s,%r) occurs in bytecode:
%sN)r   r   r   r
   r   r   r   r   r   r   r   �assertNotInBytecode   s   
��z$BytecodeTestCase.assertNotInBytecodeN)�__name__�
__module__�__qualname__�__doc__r
   r   r   r   r   r   r   r   r   	   s
    r   )r   �unittestr   r   �objectr   �TestCaser   r   r   r   r   �<module>   s