o
    i                     @   s&  U d dl Z d dlZd dlZd dlZd dlmZ d dlm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 zd dlmZ W n eyN   d dlmZ Y nw d dlZd dlmZmZmZmZ eedd	Z eruej!d
 ej!d ej!d fnerej!d ej!d fn	erej!d fndZ"erej!d fndZ#erej!d fndZ$erej!d fndZ%erej!d fndZ&e%e& Z'erej!d fndZ(erej!d fndZ)erej!d fndZ*erej!d ej!d
 fn	erej!d fndZ+erdnej,Z-ej.dkrej/Z0nej1Z0dZ2ee3df e4d< i Z5ee3ee6e6f f e4d< erEej!d ej!d ej!d fZ2er4g e2ej!d R Z2ej!d dej!d dej!d d iZ5ej7G d!d" d"ej8Z9ej7G d#d$ d$ej8Z:ej7G d%d& d&ej8Z;ej7G d'd( d(ej8Z<ej7G d)d* d*ej8Z=ej7G d+d, d,ej8Z>ej7G d-d. d.ej8Z?G d/d0 d0e3Z@d1D ]ZAeBe@eAd2d3  qe@ ZCd4ed5eeDeeEe3f f fd6d7ZFG d8d9 d9ZGeG ZHG d:d; d;ZIG d<d= d=eIZJG d>d? d?eIZKd@edAe6d5ee3 fdBdCZLej.dDkrdEe3d5eMfdFdGZNn	dEe3d5eMfdHdGZNi dIdJdKdLdMdNdOdPdQdRdSdPdTdUdVdUdWdUdXdUdYdPdZdUd[d\d]d\d^d\d_d\d`d\i dad\dbd\dcd\dddUdedPdfdPdgdPdhdJdier]djndkdldmerfdnndofdpdPdqdPdrdservdtndufdvdJdwdJdxd\eOPdydz ej!D dUeOPd{dz ej!D d\d|dUdUdUd\d\dUdUd\dUd\d}ZQee6ee3e3f f e4d~< dd3 dd3 dd3 dd3 dd3 dd3 dd3 dd3 dd3 dd3 dd3 dd3 dd3 ddd dD dd dddddgddz ej!D R D ZRee6ee3eeeM gee3e3f f f e4d< dee3 de6de3d5dfddZSeddG dd dZTG dd dZUG dd dZVG dd dZWedddZXedeYdZZG dd deeZ Z[ee3e6eGeJeKde9e=e:e;e<e?e>eeMe6f eeMeMe6f eeMe=f eee6eJeKf ee6eJeKf f f Z\G dd de[e\ Z]dS )    N)abstractmethod)	dataclass)dumps)AnyCallableDictGenericOptionalTupleTypeVarUnion)	TypeGuard)PY311PY312PY313PY314MIN_INSTRUMENTED_OPCODE   BUILD_INTERPOLATIONLOAD_GLOBAL	LOAD_ATTR LOAD_SUPER_ATTR	BINARY_OPCALL_INTRINSIC_1CALL_INTRINSIC_2LOAD_SMALL_INTLOAD_SPECIALLOAD_COMMON_CONSTANTCONVERT_VALUE)      .DUAL_ARG_OPCODESDUAL_ARG_OPCODES_SINGLE_OPSLOAD_FAST_LOAD_FASTSTORE_FAST_LOAD_FASTSTORE_FAST_STORE_FAST!LOAD_FAST_BORROW_LOAD_FAST_BORROW)	LOAD_FASTr(   )
STORE_FASTr(   )r)   r)   c                   @   sn   e Zd ZdZdZdZdZdZdZe	j
dk rdZd	Zd
ZdZdZer%dd Zer5dZdZdZdZdZdZdS dS )Comparer         r          )r    	            r/   
   c                 C   s`   | d@ }|t jkrdS |t jkrdS |t jkrdS |t jkr dS |t jkr'dS |t jkr.dS d S )N   r2   r1   r,   r3   r-      )r*   EQNELTLEGTGE)selfvr   r   B/home/ubuntu/.local/lib/python3.10/site-packages/bytecode/instr.py	_get_maskp   s   





zCompare._get_mask                  N)__name__
__module____qualname__r8   r9   r6   r7   r:   r;   sysversion_infoINNOT_INISIS_NOT	EXC_MATCHr   r?   r   LT_CASTLE_CASTEQ_CASTNE_CASTGT_CASTGE_CASTr   r   r   r>   r*   _   s.    
r*   c                   @   s   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZer>dZdS dS )BinaryOpr   r+   r,   r    r-   r.   r0   r1   r2   r/   r3      r5   r!      r4   r@   rA   rB   rC   rD   rE                  N)rF   rG   rH   ADDANDFLOOR_DIVIDELSHIFTMATRIX_MULTIPLYMULTIPLY	REMAINDERORPOWERRSHIFTSUBTRACTTRUE_DIVIDEXORINPLACE_ADDINPLACE_ANDINPLACE_FLOOR_DIVIDEINPLACE_LSHIFTINPLACE_MATRIX_MULTIPLYINPLACE_MULTIPLYINPLACE_REMAINDER
INPLACE_ORINPLACE_POWERINPLACE_RSHIFTINPLACE_SUBTRACTINPLACE_TRUE_DIVIDEINPLACE_XORr   SUBSCRr   r   r   r>   rV      s<    rV   c                   @   s<   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdS )Intrinsic1Opr   r+   r,   r    r-   r.   r0   r1   r2   r/   r3   rW   N)rF   rG   rH   INTRINSIC_1_INVALIDINTRINSIC_PRINTINTRINSIC_IMPORT_STARINTRINSIC_STOPITERATION_ERRORINTRINSIC_ASYNC_GEN_WRAPINTRINSIC_UNARY_POSITIVEINTRINSIC_LIST_TO_TUPLEINTRINSIC_TYPEVARINTRINSIC_PARAMSPECINTRINSIC_TYPEVARTUPLEINTRINSIC_SUBSCRIPT_GENERICINTRINSIC_TYPEALIASr   r   r   r>   ry      s    ry   c                   @       e Zd ZdZdZdZdZdZdS )Intrinsic2Opr   r+   r,   r    r-   N)rF   rG   rH   INTRINSIC_2_INVALIDINTRINSIC_PREP_RERAISE_STARINTRINSIC_TYPEVAR_WITH_BOUND"INTRINSIC_TYPEVAR_WITH_CONSTRAINTS"INTRINSIC_SET_FUNCTION_TYPE_PARAMSr   r   r   r>   r      s    r   c                   @   s   e Zd ZdZdZdZdS )FormatValuer+   r,   r    N)rF   rG   rH   STRREPRASCIIr   r   r   r>   r      s    r   c                   @   r   )SpecialMethodz+Special method names used with LOAD_SPECIALr   r+   r,   r    N)rF   rG   rH   __doc__ENTEREXITAENTERAEXITr   r   r   r>   r      s    r   c                   @   s$   e Zd ZdZdZdZdZdZdZdS )CommonConstantz5Common constants names used with LOAD_COMMON_CONSTANTr   r+   r,   r    r-   N)	rF   rG   rH   r   ASSERTION_ERRORNOT_IMPLEMENTED_ERRORBUILTIN_TUPLEBUILTIN_ALLBUILTIN_ANYr   r   r   r>   r      s    r   c                       s<   e Zd ZU dZed  ed<  fddZdefddZ  Z	S )_UNSETNinstancec                    s   | j d u rt | | _ | j S N)r   super__new__)cls	__class__r   r>   r      s   
z_UNSET.__new__returnc                 C   s   | |u S r   r   r<   otherr   r   r>   __eq__   s   z_UNSET.__eq__)
rF   rG   rH   r   r	   __annotations__r   boolr   __classcell__r   r   r   r>   r      s   
 r   ),__abs____add____and____bool____ceil__
__divmod__	__float__	__floor____floordiv____ge____gt____hash__	__index____int__
__invert____le__
__lshift____lt____mod____mul____ne____neg____or____pos____pow____radd____rand____rdivmod____rfloordiv____rlshift____rmod____rmul____ror__	__round____rpow____rrshift__
__rshift____rsub____rtruediv____rxor____sub____truediv__	__trunc____xor__c                  G   s   t S r   )NotImplemented)argsr   r   r>   <lambda>  s    r   objr   c                 C   s.   zt | W S  ty   t| t| f Y S w r   )_dumps
ValueErrortypeid)r   r   r   r>   	const_key   s
   
r   c                   @      e Zd ZdZdS )Labelr   NrF   rG   rH   	__slots__r   r   r   r>   r   )      r   c                   @   sP   e Zd ZdZdeddfddZdedefdd	Zdefd
dZ	defddZ
dS )	_Variablenamer   r   Nc                 C   
   || _ d S r   r   r<   r   r   r   r>   __init__5     
z_Variable.__init__r   c                 C   s    t | t |ur
dS | j|jkS NF)r   r   r   r   r   r>   r   8  s   z_Variable.__eq__c                 C      | j S r   r   r<   r   r   r>   __str__=  s   z_Variable.__str__c                 C   s   d| j j| jf S )Nz<%s %r>)r   rF   r   r   r   r   r>   __repr__@     z_Variable.__repr__)rF   rG   rH   r   strr   r   r   r   r   r   r   r   r   r>   r   2  s    r   c                   @   r   )CellVarr   Nr   r   r   r   r>   r   D  r   r   c                   @   r   )FreeVarr   Nr   r   r   r   r>   r   H  r   r   argr   c                 C   sF   t | tstd|t| jf d|   krdks!n td| dS )Nz,operation %s argument must be an int, got %sr   iz;operation %s argument must be in the range 0..2,147,483,647T)
isinstanceint	TypeErrorr   rF   r   )r   r   r   r   r>   _check_arg_intL  s   
r   )r    r5   opcodec                 C   s
   | t jv S r   )dishasargr   r   r   r>   opcode_has_argument\  r   r   c                 C   s
   | t jkS r   )r   HAVE_ARGUMENTr   r   r   r>   r   a  r   ROT_TWO)r,   	ROT_THREE)r    ROT_FOUR)r-   DUP_TOPr,   DUP_TOP_TWO)r  r-   GET_LENGET_ITER)r	  r+   GET_YIELD_FROM_ITERGET_AWAITABLE	GET_AITER	GET_ANEXTLIST_TO_TUPLELIST_EXTEND)r  r+   
SET_UPDATEDICT_UPDATE
DICT_MERGE
COMPARE_OPIS_OPCONTAINS_OPIMPORT_NAMEASYNC_GEN_WRAPPUSH_EXC_INFOBEFORE_ASYNC_WITHIMPORT_FROMCOPY_DICT_WITHOUT_KEYSWITH_EXCEPT_START)r  r.   )ir2   MATCH_CLASSr  r+   r,   MATCH_MAPPINGMATCH_SEQUENCE
MATCH_KEYSr  r    r-   CHECK_EXC_MATCHCHECK_EG_MATCHPREP_RERAISE_STARc                 c       | ]
}| d r|V  qdS )UNARY_N
startswith.0or   r   r>   	<genexpr>      r.  c                 c   s(    | ]}| d s| dr|V  qdS )BINARY_INPLACE_Nr)  r+  r   r   r>   r.    s    
)r  r+   )BINARY_SLICELOAD_FROM_DICT_OR_GLOBALSLOAD_FROM_DICT_OR_DEREFLOAD_INTRISIC_1LOAD_INTRISIC_2SET_FUNCTION_ATTRIBUTEr   FORMAT_SIMPLEFORMAT_SPECTO_BOOLBUILD_TEMPLATESTATIC_STACK_EFFECTSc                 C   s   t rd| dfS ddfS )Nr  r+   )r   effectr   jumpr   r   r>   r     s   
c                 C   s   d| dfS )Nr  r+   r   r=  r   r   r>   r         c                 C      dd|  fS Nr	  r+   r   r=  r   r   r>   r     r@  c                 C   rA  )Nr  r    r   r=  r   r   r>   r     r@  c                 C   
   | |fS r   r   r=  r   r   r>   r        
 c                 C   s   | ||  fS r   r   r=  r   r   r>   r         c                 C   rC  r   r   r=  r   r   r>   r     rD  c                 C      | |d fS Nr+   r   r=  r   r   r>   r     rE  c                 C   rF  rG  r   r=  r   r   r>   r     rE  c                 C   rF  )Nr,   r   r=  r   r   r>   r     rE  c                 C      | d dfS rG  r   r=  r   r   r>   r     r@  c                 C   s   |r| dfS dS )Nr   r  r   r=  r   r   r>   r     s    c                 C   s   d|d@   dfS )Nr,   r+   r   r=  r   r   r>   r     s    )CALLCALL_KWr   r   SWAPCOPYROT_NSET_ADDLIST_APPENDMAP_ADDFORMAT_VALUEFOR_ITERr   c                 C      i | ]}|d d qS )c                 S   s   d| d fS rB  r   r=  r   r   r>   r     r@  <dictcomp>.<lambda>r   r,  kr   r   r>   
<dictcomp>  s    rW  )UNPACK_SEQUENCE	UNPACK_EXc                 C   rS  )c                 S   rH  rG  r   r=  r   r   r>   r     r@  rT  r   rU  r   r   r>   rW    s    MAKE_FUNCTIONCALL_FUNCTIONCALL_FUNCTION_EXCALL_FUNCTION_KWCALL_METHODc                 c   r'  )BUILD_Nr)  r+  r   r   r>   r.    r/  DYNAMIC_STACK_EFFECTSlocationlocation_name	min_valuec                 C   sR   | d u rd S t | tst| dt|  | |k r'td| d| d|  d S )Nz must be an int, got zinvalid z, expected >= z, got )r   r   r   r   r   )ra  rb  rc  r   r   r>   _check_location  s   
rd  T)frozenc                
   @   s   e Zd ZU dZee ed< ee ed< ee ed< ee ed< g dZdee dee dee dee ddf
d	d
Ze	dddZ
dS )InstrLocationz(Location information for an instruction.lineno
end_lineno
col_offsetend_col_offset)ri  rj  rh  rg  r   Nc                 C   s*  t | d| t | d| t | d| t | d| t|dtr#dnd t|dd t|dd t|dd |rQ|d u rBtd||krQtd| d	| d
|d usY|d ur|d u sa|d u rltd| d| d
|d ur|d u rxtd||kr||krtd| d| d
d S d S tdd S )Nrg  rh  ri  rj  r   r+   z$End lineno specified with no lineno.zEnd lineno z cannot be smaller than lineno .zMColumn offsets were specified but lineno information are incomplete. Lineno: z, end lineno: z2End column offset specified with no column offset.zEnd column offset z' cannot be smaller than column offset: zANo end column offset was specified but a column offset was given.)object__setattr__rd  r   r   )r<   rg  rh  ri  rj  r   r   r>   r     sP   zInstrLocation.__init__positiondis.Positionsc                 C   s   t |j|j|j|jS r   )rf  rg  rh  ri  rj  )r   rn  r   r   r>   from_positions.  s   zInstrLocation.from_positions)rn  ro  r   rf  )rF   rG   rH   r   r	   r   r   r   r   classmethodrp  r   r   r   r>   rf    s(   
 
0rf  c                   @   sF   e Zd ZdZdeddfddZedefddZd	ede	fd
dZ
dS )	SetLineno_linenorg  r   Nc                 C   s   t |dtrdnd || _d S )Nrg  r   r+   )rd  r   rt  )r<   rg  r   r   r>   r   ;  s   
zSetLineno.__init__c                 C   r   r   rs  r   r   r   r>   rg  @     zSetLineno.linenor   c                 C   s   t |tsdS | j|jkS r   )r   rr  rt  r   r   r   r>   r   D  s   
zSetLineno.__eq__)rF   rG   rH   r   r   r   propertyrg  r   r   r   r   r   r   r>   rr  8  s    rr  c                	   @   sH   e Zd ZdZefdeedf dedeee	f ddfdd	Z
dd
dZdS )TryBegin)
push_lastistack_depthtargetrz  _bytecode.BasicBlockrx  ry  r   Nc                 C   s   || _ || _|| _d S r   )rz  rx  ry  )r<   rz  rx  ry  r   r   r>   r   P  s   
zTryBegin.__init__c                 C   s   t | j| j| jS r   )rw  rz  rx  ry  r   r   r   r>   copyZ  r   zTryBegin.copy)r   rw  )rF   rG   rH   r   UNSETr   r   r   r   r   r   r|  r   r   r   r>   rw  M  s    



rw  c                   @   s,   e Zd ZdZdeddfddZdddZdS )	TryEndentryr   Nc                 C   r   r   )r  )r<   r  r   r   r>   r   a  r   zTryEnd.__init__c                 C   
   t | jS r   )r~  r  r   r   r   r>   r|  d  r   zTryEnd.copy)r   r~  )rF   rG   rH   r   rw  r   r|  r   r   r   r>   r~  ^  s    r~  T	BaseInstr)boundAc                   @   s  e Zd ZU dZdZefedddededee	de
f dee d	df
d
dZefdeded	dfddZd	efddZed	efddZejded	dfddZed	e	fddZejde	d	dfddZed	efddZejdefddZed	ee	e
df fddZejdee	e
df d	dfddZed	ee fddZejdee d	dfddZdHd ee d	e	fd!d"ZdHd ee d	ee	e	f fd#d$Zd%ed	efd&d'Zd	efd(d)Zd	efd*d+Zd	efd,d-Zd	efd.d/Z d	efd0d1Z!d	efd2d3Z"d	efd4d5Z#d	efd6d7Z$d8e%d	efd9d:Z&ee'd;< ee e'd<< e	e'd=< ee'd>< deded	dfd?d@Z(e)d	efdAdBZ*e+dedCe	ded	dfdDdEZ,e+d	eee ee%f fdFdGZ-dS )Ir  zAbstract instruction.)_arg	_location_name_opcodeN)rg  ra  r   r   rg  ra  r   c                C   s@   |  || |r|| _d S |tu rd | _d S t|d d d | _d S r   )_setr  r}  rf  )r<   r   r   rg  ra  r   r   r>   r   r  s   

zBaseInstr.__init__c                 C   s   |  || dS )ziModify the instruction in-place.

        Replace name and arg attributes. Don't modify lineno.

        N)r  )r<   r   r   r   r   r>   set  s   zBaseInstr.setc                 C   r  )z)Does the instruction require an argument?)r   r  r   r   r   r>   require_arg     
zBaseInstr.require_argc                 C   r   r   r  r   r   r   r>   r     ru  zBaseInstr.namec                 C   s   |  || j d S r   )r  r  r   r   r   r>   r        c                 C   r   r   )r  r   r   r   r>   r     ru  zBaseInstr.opcodeopc                 C   sd   t |ts	tdd|  krdkr!n ntj| }|d| k}nd}|s)td| || j d S )Nzoperator code must be an intr      z<%r>Fzinvalid operator code)r   r   r   r  opnamer   r  r  )r<   r  r   validr   r   r>   r     s   

c                 C   r   r   )r  r   r   r   r>   r     ru  zBaseInstr.argc                 C   s   |  | j| d S r   )r  r  r<   r   r   r   r>   r     r  c                 C   s   | j d ur	| j jS tS r   )r  rg  r}  r   r   r   r>   rg    s   zBaseInstr.linenoc                 C   sV   | j }|r|jd us|jd us|jd urtd|tu r!d | _ d S t|d d d | _ d S )NzNThe lineno of an instruction with detailed location information cannot be set.)r  rh  ri  rj  RuntimeErrorr}  rf  )r<   rg  locr   r   r>   rg    s   



c                 C   r   r   )r  r   r   r   r>   ra    ru  zBaseInstr.locationc                 C   s    |rt |tstd|| _d S )Nz@The instr location must be an instance of InstrLocation or None.)r   rf  r   r  )r<   ra  r   r   r>   ra    s
   
r?  c                 C   s   |   sd }nF| jtv r!t| jtr!t| jdksJ | jd }n,| jtv r;t| jtr;t| jdks5J | jd }nt| jtrG| jtj	v rJd}n| j}t
j| j||dS )Nr,   r   r    r?  )r  r  BITFLAG_OPCODESr   r  tuplelenBITFLAG2_OPCODESr   hasconstr   stack_effect)r<   r?  r   r   r   r>   r    s   zBaseInstr.stack_effectc                 C   sD   | j |d}| j}|tv rt| S |tv rt| || j|S |dfS )Nr  r   )r  r   r<  r`  r   )r<   r?  _effectnr   r   r>   pre_and_post_stack_effect  s   z#BaseInstr.pre_and_post_stack_effectr<   c                 C   s   | j | j| j| jdS )N)ra  )r   r  r  r  r   r   r   r>   r|    s   zBaseInstr.copyc                 C   s   |  | jS r   )	_has_jumpr  r   r   r   r>   has_jump  s   zBaseInstr.has_jumpc                 C   s   | j }d|v o
d|v S )zIs a conditional jump?JUMP_IF_r  r   r   r   r>   is_cond_jump  s   zBaseInstr.is_cond_jumpc                 C   s
   | j dv S )zIs an unconditional jump?>   JUMP_FORWARDJUMP_ABSOLUTEJUMP_BACKWARDJUMP_BACKWARD_NO_INTERRUPTr   r   r   r   r>   is_uncond_jump  s   
zBaseInstr.is_uncond_jumpc                 C   s
   | j tv S )zIs an absolute jump.)r  HASJABSr   r   r   r>   is_abs_jump  r  zBaseInstr.is_abs_jumpc                 C   s   | j tv o	d| jvS )zIs a forward relative jump.BACKWARDr  HASJRELr  r   r   r   r>   is_forward_rel_jump     zBaseInstr.is_forward_rel_jumpc                 C   s   | j tv o	d| jv S )zIs a backward relative jump.r  r  r   r   r   r>   is_backward_rel_jump  r  zBaseInstr.is_backward_rel_jumpc                 C   s   | j dv rdS |  rdS dS )N>   RERAISE
BREAK_LOOPRETURN_CONSTRETURN_VALUECONTINUE_LOOPRAISE_VARARGSTF)r  r  r   r   r   r>   is_final  s
   
zBaseInstr.is_finalc                 C   s.   | j turd| j| j | jf S d| j| jf S )Nz<%s arg=%r location=%s>z<%s location=%s>)r  r}  r  r  r   r   r   r>   r   )  s   
zBaseInstr.__repr__r   c                 C   s$   t | t |ur
dS |  | kS r   )r   _cmp_keyr   r   r   r>   r   /  s   zBaseInstr.__eq__r  r  r  r  c                 C   sz   t |ts	tdztj| }W n ty   td| w |tkr+td| d| ||| || _	|| _|| _
d S )Nzoperation name must be a strzinvalid operation name: z
operation zE is an instrumented or pseudo opcode. Only base opcodes are supported)r   r   r   r  opmapKeyErrorr   r   
_check_argr  r  )r<   r   r   r   r   r   r>   r  >  s   


zBaseInstr._setc                 C   s   | t jv p	| t jv S r   )r  hasjrelhasjabsr   r   r   r>   r  R  r  zBaseInstr._has_jumpr   c                 C      d S r   r   )r<   r   r   r   r   r   r>   r  V     zBaseInstr._check_argc                 C   r  r   r   r   r   r   r>   r  Z  r  zBaseInstr._cmp_keyr   ).rF   rG   rH   r   r   r}  r   r  r   r   r   r	   rf  r   r  r   r  rv  r   setterr   r   rg  ra  r  r
   r  r  r|  r  r  r  r  r  r  r  r   r   r   r   r  staticmethodr  r   r  r  r   r   r   r>   r  l  s~   
 
 "r{  c                   @   sF   e Zd ZdZdeee eef fddZ	dede
deddfd	d
ZdS )Instrr   r   c                 C   s(   | j }| jtjv rt|}| j| j|fS r   )r  r  r  r   r  r  r  r   r   r>   r  w  s   zInstr._cmp_keyr   r   r   Nc              
   C   s>  |dkrt dt|r|tu rt d| n
|tur!t d| | |r;t|ttjfs9td|t	|j
f d S |tjv rTt|ttfsRtd|t	|j
f d S |tjv s_|tjv r|tv rt|tr|t|dkr|t|d tr|t|d	 tstd
|t	|j
t|f d S |tv rt|trt|dkrt|d trt|d	 trt|d tstd|t	|j
t|f d S |tv rt|trt|dkrt|d ttfrt|d	 ttfstd|t	|j
t|f d S tr|tjv rt|ttfrd S t|tstd|t	|j
f d S |tjv r8t|tr)t d| t|tjr6t d| d S |tjv rQt|tsOtd|t	|j
f d S |tv rt|tst|trzt|}W d S  ty } ztd|t	|j
f |d }~ww td|t	|j
f d S |t v rt|tstd|t	|j
f |dk s|dkrt d||f d S |t!v rt|t"std|t	|j
f d S |t#v rt|t$std|t	|j
f d S |t%v rt|t&s td|t	|j
f d S |t'v rt|t(std|t	|j
f d S |t)v r|tv rQt|trAt|dkrAt|d trAt|d	 t*sOtd|t	|j
t|f d S t|t*st|trzt*|}W d S  ty } ztd|t	|j
t|f |d }~ww td|t	|j
t|f d S t|rt+|| d S d S )NEXTENDED_ARGzuonly concrete instruction can contain EXTENDED_ARG, highlevel instruction can represent arbitrary argument without itz!operation %s requires an argumentzoperation %s has no argumentz>operation %s argument type must be Label or BasicBlock, got %sz8operation %s argument must be CellVar or FreeVar, got %sr,   r   r+   zQoperation %s argument must be a tuple[bool, str | FormatValue], got %s (value=%s)r    zIoperation %s argument must be a tuple[bool, bool, str], got %s (value=%s)zBoperation %s argument must be a tuple[str, str], got %s (value=%s)z+operation %s argument must be a str, got %sz-label argument cannot be used in %s operationz-block argument cannot be used in %s operationz2operation %s argument type must be Compare, got %sz@operation %s argument type must be coercible to BinaryOp, got %sz3operation %s argument type must be BinaryOp, got %sz.operation %s argument type must be int, got %sr  zCoperation %s argument type must be an int between 0 and 255, got %sz7operation %s argument type must be Intrinsic1Op, got %sz7operation %s argument type must be Intrinsic2Op, got %sz8operation %s argument type must be SpecialMethod, got %sz9operation %s argument type must be CommonConstant, got %szKoperation %s argument must be a tuple[bool, FormatValue], got %s (value=%s)z>operation %s argument must be a FormatValue] got %s (value=%s)),r   r   r}  r  r   r   	_bytecode
BasicBlockr   r   rF   r  hasfreer   r   haslocalhasnamer  r  r  r   r   r  r"   r   r  
hascomparer*   
BINARY_OPSrV   r   	ExceptionSMALL_INT_OPSINTRINSIC_1OPry   INTRINSIC_2OPr   SPECIAL_OPSr   COMMON_CONSTANT_OPSr   FORMAT_VALUE_OPSr   r   )r<   r   r   r   er   r   r>   r  }  s  

	










zInstr._check_arg)rF   rG   rH   r   r
   r	   rf  r   r   r  r   InstrArgr  r   r   r   r>   r  t  s    r  )^r   enumr   r  rI   abcr   dataclassesr   marshalr   r   typingr   r   r   r   r	   r
   r   r   r   ImportErrortyping_extensionsbytecoder  bytecode.utilsr   r   r   r   getattrr   r  r  r  r  r  r  	INTRINSICr  r  r  r  r  r  rJ   hasjumpr  r  r"   r   r   r#   r   uniqueIntEnumr*   rV   ry   r   r   r   r   r   r  setattrr}  bytesr   r   r   PLACEHOLDER_LABELr   r   r   r   r   r   dictfromkeysr<  r`  rd  rf  rr  rw  r~  r  rl  r  r  r  r  r   r   r   r>   <module>   s  
 (
	



)	."		
 !"#$%&'0 F  3
L
 t

