Sindbad~EG File Manager
a
��g�P � @ sZ d dl Z d dlZd dlmZ dd� ZG dd� de�ZG dd� dej�Zed krVe� � dS )
� N)�BytecodeTestCasec C s^ d}t �| �D ]}|j|kr|d7 }qt| d�r6| j} | jD ]}t|d�r<|t||�7 }q<|S )Nr � �__code__�co_code)�dis�get_instructions�opname�hasattrr � co_consts�count_instr_recursively)�fr �count�instr�c� r �//usr/local/lib/python3.9/test/test_peepholer.pyr s
r c @ s� e Zd Zdd� Zdd� Zdd� Zdd� Zd d
� Zdd� Zd
d� Z dd� Z
dd� Zdd� Zdd� Z
dd� Zdd� Zdd� Zdd� Zdd � Zd!d"� Zd#d$� Zd%d&� Zd'd(� Zd)d*� Zd+d,� Zd-d.� Zd/d0� Zd1d2� Zd3d4� Zd5d6� Zd7d8� Zd9S ):�
TestTranformsc
C s� t t�|��}dd� |D �}|D ]�}d|jvr0q ||j }|jdv rl| �|j� d|j� d|j� d|j� �� |jdv r�|jdkr�| �|j� d|j� d|j� d|j� �� d|jv r d |jv r | �|j� d|j� d|j� d|j� �� q d S )
Nc S s i | ]}|j |�qS r )�offset��.0r r r r �
<dictcomp> � z4TestTranforms.check_jump_targets.<locals>.<dictcomp>ZJUMP_)�
JUMP_ABSOLUTE�JUMP_FORWARDz at z
jumps to �RETURN_VALUEZ_OR_POPZJUMP_IF_)�listr r r ZargvalZfailr )�self�codeZinstructions�targetsr Ztgtr r r �check_jump_targets s4
��
�����z TestTranforms.check_jump_targetsc C s^ t �|�}tt �|��}tdd� |D ��}tdd� |D ��}| �|d� | �|t|j �� d S )Nc s s | ]}|d V qdS �r Nr �r �tr r r � <genexpr>1 r z-TestTranforms.check_lnotab.<locals>.<genexpr>c s s | ]}|d V qdS r r r! r r r r# 2 r r )
r Z_get_code_objectr Zfindlinestarts�min�maxZassertGreaterEqualZ
assertLess�lenr )r r ZlnotabZmin_bytecodeZmax_bytecoder r r �check_lnotab+ s
zTestTranforms.check_lnotabc C s: dd� }| � |d� | � |d� | �|d� | �|� d S )Nc S s | dks
~ d S )N� r ��xr r r �unot; s z%TestTranforms.test_unot.<locals>.unotZ UNARY_NOT�POP_JUMP_IF_FALSE�POP_JUMP_IF_TRUE��assertNotInBytecode�assertInBytecoder'