�
*�Kgo � �\ � d Z ddlZddlZddlZ e� � Z G d� dej � � ZdS )zGbytecode_helper - support tools for testing correct bytecode generation� Nc �, � e Zd ZdZd� Zefd�Zefd�ZdS )�BytecodeTestCasez1Custom assertion methods for inspecting bytecode.c �| � t j � � }t j ||�� � |� � � S )N)�file)�io�StringIO�dis�getvalue)�self�co�ss �3/usr/lib/python3.11/test/support/bytecode_helper.py�get_disassembly_as_stringz*BytecodeTestCase.get_disassembly_as_string s0 � ��K�M�M�����������z�z�|�|�� c � � t j |� � D ]%}|j |k r|t u s|j |k r|c S �&| � |� � }|t u r|�d|��}n
d}||||fz }| � |� � dS )zAReturns instr if opname is found, otherwise throws AssertionErrorz not found in bytecode:
z!(%s,%r) not found in bytecode:
%sN)r �get_instructions�opname�_UNSPECIFIED�argvalr �fail�r �xr r �instr�disassembly�msgs r �assertInBytecodez!BytecodeTestCase.assertInBytecode s� � ��)�!�,�,� !� !�E��|�v�%�%��\�)�)�U�\�V�-C�-C� �L�L�L���4�4�Q�7�7���\�!�!�5;�V�V�[�[�I�C�C�6�C�����5�5�C�� � �#�����r c � � t j |� � D ]r}|j |k re| � |� � }|t u r|�d|��}| � |� � �H|j |k rd}||||fz }| � |� � �sdS )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 s r �assertNotInBytecodez$BytecodeTestCase.assertNotInBytecode s� � ��)�!�,�,� #� #�E��|�v�%�%�"�<�<�Q�?�?���\�)�)�:@�&�&�+�+�N�C��I�I�c�N�N�N�N��\�V�+�+�;�C����� =�=�C��I�I�c�N�N�N�� #� #r N)�__name__�
__module__�__qualname__�__doc__r r r r � r r r r s\ � � � � � �;�;�� � �
2>� � � � � 5A� #� #� #� #� #� #r r )r" |