o
    i[+                     @   s,  d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlZd dlmZmZ d dlmZmZmZmZmZmZmZmZ d dlmZ G dd dZ ed	d
dZ!edZ"G dd
 d
e e#ee" Z$edZ%G dd de	e% Z&G dd de&eeeeeef  e$eeeeeef  Z'dS )    N)abstractmethod)AnyDictGenericIteratorListOptionalSequenceSupportsIndexTypeVarUnionoverload)CompilerFlagsinfer_flags)_UNSETUNSET	BaseInstrInstrLabel	SetLinenoTryBeginTryEnd)PY311c                   @   s   e Zd ZdddZdddZdedefd	d
Zede	fddZ
e
jde	ddfddZ
dddee ddfddZedddedefddZdS )BaseBytecodereturnNc                 C   sL   d| _ d| _d| _d| _d| _| j| _d| _t| _g | _	g | _
td| _d S )Nr      z<module>z<string>)argcountposonlyargcountkwonlyargcountfirst_linenonamequalnamefilenamer   	docstringcellvarsfreevarsr   _flagsself r)   E/home/ubuntu/.local/lib/python3.10/site-packages/bytecode/bytecode.py__init__#   s   zBaseBytecode.__init__bytecodec                 C   sd   |j | _ |j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _t	|j
| _
t	|j| _d S N)r   r   r   flagsr   r    r!   r"   r#   listr$   r%   r(   r,   r)   r)   r*   _copy_attr_from5   s   zBaseBytecode._copy_attr_fromotherc                 C   s   t | t |ur
dS | j|jkrdS | j|jkrdS | j|jkr"dS | j|jkr*dS | j|jkr2dS | j|jkr:dS | j|jkrBdS | j|jkrJdS | j	|j	krRdS | j
|j
krZdS | j|jkrbdS |  | krldS dS )NFT)typer   r   r   r.   r   r"   r    r!   r#   r$   r%   compute_stacksizer(   r2   r)   r)   r*   __eq__B   s6   zBaseBytecode.__eq__c                 C   s   | j S r-   )r&   r'   r)   r)   r*   r.   a   s   zBaseBytecode.flagsvaluec                 C   s   t |ts	t|}|| _d S r-   )
isinstancer   r&   )r(   r7   r)   r)   r*   r.   e   s   

)is_asyncr9   c                C   s   t | || _d S r-   )r   r.   )r(   r9   r)   r)   r*   update_flagsk   s   zBaseBytecode.update_flagsTcheck_pre_and_postr<   c                C   s   t r-   NotImplementedError)r(   r<   r)   r)   r*   r4   o   s   zBaseBytecode.compute_stacksizer   N)r,   r   r   N)__name__
__module____qualname__r+   r1   r   boolr6   propertyr   r.   setterr   r:   r   intr4   r)   r)   r)   r*   r   "   s    

r   T_BaseBytecodeList)boundUc                       s   e Zd ZdZededefddZedede	defddZ fddZdedef fd	d
Z
dddZdee f fddZdd Z  ZS )rH   z8List subclass providing type stable slicing and copying.indexr   c                 C      d S r-   r)   r(   rK   r)   r)   r*   __getitem__{      z_BaseBytecodeList.__getitem__r(   c                 C   rL   r-   r)   rM   r)   r)   r*   rN   ~   rO   c                    s0   t  |}t|trt| |}||  |S r-   )superrN   r8   slicer3   r1   )r(   rK   r7   	__class__r)   r*   rN      s
   

c                    s    t | t  }||  |S r-   )r3   rP   copyr1   )r(   newrR   r)   r*   rT      s   
z_BaseBytecodeList.copyNc                 C   s   g }d}| j }t| D ]1\}}t|tr|j}|| qt|ts#q|dur+||_q|jtu r4||_q|jdur<|j}qt|D ]}| |= qAdS )zFCheck that all the element of the list are valid and remove SetLineno.N)	r   	enumerater8   r   linenoappendr   r   reversed)r(   
lineno_pos
set_linenocurrent_linenoposinstrir)   r)   r*   legalize   s(   




z_BaseBytecodeList.legalizec                 #   s*    t   }|D ]
}| | |V  qd S r-   )rP   __iter___check_instrr(   instructionsr^   rR   r)   r*   ra      s   

z_BaseBytecodeList.__iter__c                 C   s   t  r-   r=   r(   r^   r)   r)   r*   rb      s   z_BaseBytecodeList._check_instrr?   )r@   rA   rB   __doc__r   r
   rJ   rN   rG   rQ   rT   r`   r   ra   rb   __classcell__r)   r)   rR   r*   rH   x   s    
Vc                   @   s,   e Zd ZdefddZdedefddZdS )
_InstrListr   c           
      C   s`  g }i }g }i }g }d}t | D ]r\}}t|tr%|d|  |||< qt|trJ||t| t|jts:J ||jt|f || qt|trZ|d||j	 f qt|t
ryt|jtry|j}	tj|jd|jd}||	|f || |d7 }q|D ]	\}	}||	 |_q|D ]\}	}|| }t|tsJ d|| ||	 |jf||< q|S )Nr   zlabel_instr%sr   )locationr   r   )rV   r8   r   rX   r   
setdefaultlentargetr   entryr   arg	_bytecodeConcreteInstrr    rj   
push_lasti)
r(   rd   labelsjumps
try_begins	try_jumpsoffsetrK   r^   target_labelr)   r)   r*   _flat   sH   







z_InstrList._flatr2   c                 C   s"   t |ts	t|}|  | kS r-   )r8   ri   ry   r5   r)   r)   r*   r6      s   
z_InstrList.__eq__N)r@   rA   rB   r   ry   r   rC   r6   r)   r)   r)   r*   ri      s    -ri   c                       s  e Zd Z	d#deeeeeee	f  ddfddZ
deeeeeee	f  f fddZd	eddfd
dZdeddf fddZe		d$dejdededd fddZdddedefddZ		d%ddddee dee dededejf
ddZ		d&dee dedd fd!d"Z  ZS )'Bytecoder)   rd   r   Nc                 C   s2   t |  g | _|D ]}| | q
| | d S r-   )r   r+   argnamesrb   extendrc   r)   r)   r*   r+      s
   
zBytecode.__init__c                 #   sX    t   }d}|D ]}| | t|tr|rtdd}nt|tr&d}|V  q
d S )NFz.TryBegin pseudo instructions cannot be nested.T)rP   ra   rb   r8   r   RuntimeErrorr   )r(   rd   seen_try_beginr^   rR   r)   r*   ra      s   



zBytecode.__iter__r^   c                 C   s*   t |tttttfstdt|j d S )NzPBytecode must only contain Label, SetLineno, and Instr objects, but %s was found)	r8   r   r   r   r   r   
ValueErrorr3   r@   re   r)   r)   r*   rb     s   zBytecode._check_instrr,   c                    s&   t  | t|tr|j| _d S d S r-   )rP   r1   r8   rz   r{   r0   rR   r)   r*   r1     s   
zBytecode._copy_attr_fromTFcodeprune_caches#conserve_exception_block_stackdepthc                 C   s   t j| }|j||dS )N)r   r   )rp   ConcreteBytecode	from_codeto_bytecode)r   r   r   concreter)   r)   r*   r     s
   zBytecode.from_coder;   r<   c                C   s   t j| }|j|dS )Nr;   )rp   ControlFlowGraphfrom_bytecoder4   )r(   r<   cfgr)   r)   r*   r4     s   zBytecode.compute_stacksizer<   compute_exception_stack_depthscompute_jumps_passes	stacksizer   c                C   sR   |d u st r|rtj| }|j||d}| } d}| j||d}|j||dS )Nr   Fr   r   )r   r   )r   rp   r   r   r4   r   to_concrete_bytecodeto_code)r(   r   r   r<   r   r   bcr)   r)   r*   r   #  s    
zBytecode.to_codez_bytecode.ConcreteBytecodec                 C   s   t | }|j||dS )Nr   )rp   _ConvertBytecodeToConcreter   )r(   r   r   	converterr)   r)   r*   r   >  s
   
zBytecode.to_concrete_bytecode)r)   )TF)NN)NT)r@   rA   rB   r	   r   r   r   r   r   r   r+   r   ra   r   rb   r   r1   staticmethodtypesCodeTyperC   r   rF   r4   r   r   r   rg   r)   r)   rR   r*   rz      s`    
$

rz   )(sysr   abcr   typingr   r   r   r   r   r   r	   r
   r   r   r   r,   rp   bytecode.flagsr   r   bytecode.instrr   r   r   r   r   r   r   r   bytecode.utilsr   r   rG   rJ   r/   rH   rh   ri   rz   r)   r)   r)   r*   <module>   s$   4(
R9
7