o
    i                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dl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mZm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%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z>m?Z?m@Z@mAZA e>ZBdejCdeddfd	d
ZDedddZEG dd de)eF ZGG dd dZHG dd dejIeeGe6f  ZJG dd dZKdS )    N)AnyDictIterableIteratorListMutableSequenceOptionalSequenceSetTupleTypeTypeVarUnion)CompilerFlags)"_UNSET
BINARY_OPSBITFLAG2_OPCODESBITFLAG_OPCODESCOMMON_CONSTANT_OPSDUAL_ARG_OPCODESDUAL_ARG_OPCODES_SINGLE_OPSFORMAT_VALUE_OPS	INTRINSICINTRINSIC_1OPINTRINSIC_2OPPLACEHOLDER_LABELSPECIAL_OPSUNSET	BaseInstrBinaryOpCellVarCommonConstantCompareFormatValueFreeVarInstrInstrArgInstrLocationIntrinsic1OpIntrinsic2OpLabel	SetLinenoSpecialMethodTryBeginTryEnd_check_arg_int	const_keyopcode_has_argument)PY310PY311PY312PY313codeconstsreturnc                 C   s0   |sd S |d }t |ts|d u r|| _d S d S )Nr   )
isinstancestr	docstring)r6   r7   first_const r=   E/home/ubuntu/.local/lib/python3.10/site-packages/bytecode/concrete.py_set_docstringG   s   
r?   TConcreteInstr)boundc                       s"  e Zd ZU dZeed< dZefeddddedede	ede
f d	ee d
ee f
 fddZdedededdfddZdededdf fddZedefddZdeee eef fddZdedee fddZdefddZedee dee dededef
dd Zdefd!d"Z  ZS )#rA   z{Concrete instruction.

    arg must be an integer in the range 0..2147483647.

    It has a read-only size attribute.

    _arg)_extended_args_sizeN)linenolocationextended_argsnameargrF   rG   rH   c                   s   || _ t j||||d d S )N)rF   rG   )rD   super__init__)selfrI   rJ   rF   rG   rH   	__class__r=   r>   rL   `   s   zConcreteInstr.__init__opcoder8   c                 C   sh   t |r|tu rtd| t|| d S |dkr(|tur|nd}t|| d S |tur2td| d S )Nz!operation %s requires an argumentr   zoperation %s has no argument)r1   r   
ValueErrorr/   )rM   rI   rP   rJ   r=   r=   r>   
_check_argo   s   zConcreteInstr._check_argc                    s\   t  || d}|tur|dkr|d7 }|dL }|dks| jd ur)dd| j  }|| _d S )N         )rK   _setr   rD   rE   )rM   rI   rJ   sizerN   r=   r>   rV   }   s   

zConcreteInstr._setc                 C   s   | j S N)rE   rM   r=   r=   r>   rW      s   zConcreteInstr.sizec                 C   s   | j | j| jfS rX   )	_location_namerC   rY   r=   r=   r>   _cmp_key   s   zConcreteInstr._cmp_keyinstr_offsetc                 C   sZ   t r| jd n| j|   }|  r|| | j S |  r$|| | j S |  r+| jS d S )NrS   )OFFSET_AS_INSTRUCTIONrE   use_cache_opcodesis_forward_rel_jumprC   is_backward_rel_jumpis_abs_jump)rM   r]   sr=   r=   r>   get_jump_target   s   zConcreteInstr.get_jump_targetc                 C   s   | j tu rt| jdfS | j }| j|d@ g}|dkr-|dL }tj|d@ g|d d< |dks| jrGt|| jk rGtjdg|d d< t|| jk s7t|S )Nr   rT   rU   )rC   r   bytes_opcodeEXTENDED_ARGrD   lenrE   )rM   rJ   br=   r=   r>   assemble   s   
zConcreteInstr.assembleclsr6   offsetc                 C   sJ   t rd| n|}|| }t|r||d  }nt}tj| }| |||dS )NrS      )rF   )r^   r1   r   rf   opname)rk   rF   r6   rl   indexoprJ   rI   r=   r=   r>   disassemble   s   
zConcreteInstr.disassemblec                 C   s@   t jdkr| jtjv rtj| j S dS t jdkrtj| j S dS )N)      r   rr      )sysversion_infor[   dis_inline_cache_entriesrf   rY   r=   r=   r>   r_      s   


zConcreteInstr.use_cache_opcodes)__name__
__module____qualname____doc__int__annotations__	__slots__r   r:   r   r   r   r'   rL   rR   rV   propertyrW   r   r\   rd   re   rj   classmethodr   r@   rq   r_   __classcell__r=   r=   rN   r>   rA   R   sH   
 	(
c                   @   sn   e Zd ZU dZeed< eed< eed< eed< eed< dZdedededededd	fd
dZde	fddZ
d	S )ExceptionTableEntryzpEntry for a given line in the exception table.

    All offset are expressed in instructions not in bytes.

    start_offsetstop_offsettargetstack_depth
push_lasti)r   r   r   r   r   r8   Nc                 C   s"   || _ || _|| _|| _|| _d S rX   r   r   r   r   r   )rM   r   r   r   r   r   r=   r=   r>   rL      s
   
zExceptionTableEntry.__init__c              
   C   s,   d| j  d| j d| j d| j d| j 
S )Nz!ExceptionTableEntry(start_offset=z, stop_offset=z	, target=z, stack_depth=z, push_lasti=r   rY   r=   r=   r>   __repr__   s   zExceptionTableEntry.__repr__)rz   r{   r|   r}   r~   r   boolr   rL   r:   r   r=   r=   r=   r>   r      s,   
 
r   c                       sj  e Zd ZU eed< ee ed< ee ed< ee ed< 	d[ddddddedeedf de	e de
ee  f fd	d
Zdeeeef  f fddZdeddfddZ fddZdefddZdedef fddZedddejdedd fddZedeeeef  dedeeeef  fd d!Zdeeeeeeee
e f  f fd"d#Z eded$eeeeee
e f  defd%d&Z!ed'ee d(ed)e
e ddfd*d+Z"ded$e	eeeee
e f  defd,d-Z#ed.ede$fd/d0Z%d1ede$fd2d3Z&eded4edefd5d6Z'd4ed7ed8e
e de$fd9d:Z(d;ee$ d4ed7ed8edef
d<d=Z)ded$e	eeeee
e f  defd>d?Z*ede+eeef  ddfd@dAZ,edBee defdCdDZ-dedee fdEdFZ.ed\dGedHedee fdIdJZ/defdKdLZ0dMdNdOedefdPdQZ1	d]dMdMdRdSe
e dOedTedejfdUdVZ2	M	d^dWedXede3j4fdYdZZ5  Z6S )_ConcreteBytecoder7   namesvarnamesexception_tabler=   Nr7   r   r   r   .c                   sT   t    t|| _t|| _t|| _|pg | _|D ]}| | q| | d S rX   )	rK   rL   listr7   r   r   r   _check_instrextend)rM   instructionsr7   r   r   r   instrrN   r=   r>   rL     s   
	



zConcreteBytecode.__init__r8   c                 #   s*    t   }|D ]
}| | |V  qd S rX   )rK   __iter__r   )rM   r   r   rN   r=   r>   r   $  s   

zConcreteBytecode.__iter__r   c                 C   s$   t |ttfstdt|j d S )NzXConcreteBytecode must only contain ConcreteInstr and SetLineno objects, but %s was found)r9   rA   r+   rQ   typerz   )rM   r   r=   r=   r>   r   *  s   zConcreteBytecode._check_instrc                    s6   t  | t|tr|j| _|j| _|j| _d S d S rX   )rK   _copy_attr_fromr9   r   r7   r   r   )rM   bytecoderN   r=   r>   r   2  s   
z ConcreteBytecode._copy_attr_fromc                 C   s   dt |  S )Nz<ConcreteBytecode instr#=%s>)rh   rY   r=   r=   r>   r   9  s   zConcreteBytecode.__repr__otherc                    sl   t | t |ur
dS ttt| j}ttt|j}||kr dS | j|jkr(dS | j|jkr0dS t |S )NF)	r   r   mapr0   r7   r   r   rK   __eq__)rM   r   const_keys1const_keys2rN   r=   r>   r   <  s   zConcreteBytecode.__eq__F)extended_argr6   r   c             
   C   s&  t rOg }tj| ddD ]B}|jrt|jnd }|t|j|j	d ur'|j	d nt
|d tr4|jp3dndD ]\}}}t|D ]}|tdd|d q?q6qn]tr[dd	 |  D }ntt| }g }d}| j}	|t| jtrrd
nd k rtr|d
| n|}
|
|v r||
 }	t|	| j|}|| |tr|jd
 n|j7 }|t| jtrd
nd k svt }|s|| | j|_| j|_t| j|_ | j!|_"| j#|_$| j%|_&| j|_'t(| j)|_*t(| j+|_,t(| j-|_.t(| j/|_0t(| j1|_2t3|| j+ t r|4| j5|_6| j7|_8n|j8|_8||d d < |S )NT)show_caches   rG   r=   CACHEr   c                 S   s   i | ]\}}}||qS r=   r=   ).0rl   _rF   r=   r=   r>   
<dictcomp>f  s    z.ConcreteBytecode.from_code.<locals>.<dictcomp>rS   rm   )9r3   rx   get_instructions	positionsr'   from_positionsappendrA   rn   rJ   r   r5   
cache_inforanger2   co_linesdictfindlinestartsco_firstlinenorh   co_coder^   rq   rW   r   _remove_extended_argsco_namerI   co_filenamefilenamer   co_flagsflagsco_argcountargcountco_posonlyargcountposonlyargcountco_kwonlyargcountkwonlyargcountfirst_linenor   co_namesr   	co_constsr7   co_varnamesr   co_freevarsfreevarsco_cellvarscellvarsr?   _parse_exception_tableco_exceptiontabler   co_qualnamequalname)r6   r   r   ilocr   rW   line_startsrl   rF   
lineno_offr   r   r=   r=   r>   	from_codeL  sr    



zConcreteBytecode.from_coder   r   c                 c   sB    |}| D ]}|j }|d ur|tur|}t|tr||fV  qd S rX   )rF   r   r9   rA   )r   r   rF   r   i_linenor=   r=   r>   _normalize_lineno  s   

z"ConcreteBytecode._normalize_linenoc                 C   sz   d}g }g }|  | | jD ](\}}||  |j}|tr#|d n||||jf |tr2|d n|7 }qd||fS )Nr   rS       )r   r   r   rj   rW   r^   rG   join)rM   rl   code_strlinenosrF   r   i_sizer=   r=   r>   _assemble_code  s   zConcreteBytecode._assemble_coder   c           
      C   s  g }d}| }|D ]~\}}}}|| }|dkrq|}|| }	|}|	dkr0| d |	d8 }	|	dks#|dk rH| td|	d d}	|d8 }|dk s4|dkr`| td|	d d}	|d8 }|dksLd|	  krkdksnJ  J d|  krydks|J  J | td|	| qd|S )Nr   rT   s    Bb   r   )r   structpackr   )
r   r   lnotab
old_offset
old_linenorl   r   rF   dlinenodoffr=   r=   r>   _assemble_lnotab  s8   

z!ConcreteBytecode._assemble_lnotab	linetabler   r   c                 C   s  |d ur?|dk r|  tddd |d8 }|dk s|dkr0|  tddd |d8 }|dksd|  kr;dks>J  J nd}|dkro|  tdd| |d8 }|dkrd|  d |d8 }|dksW|  td|d n
|  td|| d|  krdksJ  J d S )Nir   r   r   r      s    )r   r   r   )r   r   r   r=   r=   r>   _pack_linetable  s*   
 z ConcreteBytecode._pack_linetablec                 C   s   |sdS g }d}t |}t|\}}}}	|	d ur%|	jd ur"|	j| nd }
n|| }
|D ]9\}}}}|d urB|jd ur?|j| nd }n|| }|dksR|
d u rS|d u rSq+|}|| }|}| |||
 |}
q+|| | }| |||
 d|S )Nr   r   )iternextrF   r   r   )rM   r   r   r   r   iter_inrl   r   r   old_locationold_dlinenorF   rG   r   r   r=   r=   r>   _assemble_linestable  s:   




z%ConcreteBytecode._assemble_linestablevarintc                 C   s<   t  }	 || d@  | dL } | r|d  dO  < n	 |S q)NT?      @   )	bytearrayr   )r   encodedr=   r=   r>   _encode_location_varintA  s   z(ConcreteBytecode._encode_location_varintsvarintc                 C   s*   |dk r|  | d> dB S |  |d> S )Nr   rm   )r   )rM   r   r=   r=   r>   _encode_location_svarintN  s   z)ConcreteBytecode._encode_location_svarintrW   c                 C   s"   d| d>  |dkr|d  S d S )N   rr   rU   rm      r=   )r6   rW   r=   r=   r>   _pack_location_headerU  s   "z&ConcreteBytecode._pack_location_headerrF   rG   c           	      C   s  t  }|d u r|d d d f\}}}}n|j|j|j|jf\}}}}|d u r/|| d| |S |d u rY|d urE||krEtd| d| || d|g| 	|| R  |S |d us_J |d useJ ||kr|| dkr|dk r|| dkr|| |d ||d d> ||  f |S ||kr|| d	v r|d
k r|d
k r|| d| | |||f |S || d|g| 	|| | 
|| | 
|d | 
|d R  |S )N   zMAn instruction cannot have no column offset and span multiple lines (lineno: z, end lineno: rs   r   H   rU      )rm   rS   r   
      rm   )r   rF   
end_lineno
col_offsetend_col_offsetr   r   rQ   r   r   r   )	rM   rW   rF   rG   packedl_linenor   r   r   r=   r=   r>   _pack_locationY  s   @
7$
zConcreteBytecode._pack_location	locationsc                 C   sJ   |d }	 | | ||| |jd ur|jn|}|d8 }|dk r$	 |S q)NrS   TrU   rm   )r   r  rF   )rM   r  rW   rF   rG   r=   r=   r>   _push_locations  s   z ConcreteBytecode._push_locationsc                 C   s   |sdS g }t |}t|\}}}}|pt|d d d }|}|D ]$\}}	}}
|
p(|}
|jd ur7||
kr7||	7 }q| ||||}|	}|
}q| |||| d|S )Nr   )r   r   r'   rF   r  r   )rM   r   r   r  r   r   rW   rF   r   r   rG   r=   r=   r>   _assemble_locations  s"   
z$ConcreteBytecode._assemble_locationsc                 C   s   d}d }d}|t | k rd| | }t|tr|d7 }q|jdkr6|d7 }|d ur/|d> |j }n|j}| |= q|d urZ|jdkrAtn|d> |j }d }t|j||j|d}|| |< d}|d7 }|t | k s|d urltdd S )Nr   rm   rg   rU   NOP)rG   rH   z#EXTENDED_ARG at the end of the code)	rh   r9   r+   rI   rJ   r   rA   rG   rQ   )r   nb_extended_argsr   ro   r   rJ   r=   r=   r>   r     s>   


!z&ConcreteBytecode._remove_extended_argsexcept_table_iteratorc                 C   s@   t | }|d@ }|d@ r|dK }t | }||d@ O }|d@ s|S )Nr   r   r   )r   )r	  ri   valr=   r=   r>   _parse_varint"  s   zConcreteBytecode._parse_varintc                 C   s   t sJ g }t|}z1	 | |}| |}|| d }| |}| |}|d? }	t|d@ }
|t||||	|
 q tyF   | Y S w )NTrm   )r3   r   r  r   r   r   StopIteration)rM   r   tableiteratorstartlengthendr   dldepthlastir=   r=   r>   r   ,  s"   



	z'ConcreteBytecode._parse_exception_tablevalueset_begin_markerc                 C   s`   g }| dksJ | r| | d@ |rdndB  | dL } | s
|p!dg}|r,|d  dO  < t|S )Nr   r   r   r   r   r   )r   reversed)r  r  tempr=   r=   r>   _encode_varint?  s   
zConcreteBytecode._encode_varintc                 C   s   t  }| jpg D ]5}|j|j d }|jd> |j }|| |jd || | || |j || | qt	|S )Nrm   T)
r   r   r   r   r   r   r   r  r   re   )rM   r  entryrW   r  r=   r=   r>   _assemble_exception_tableM  s   z*ConcreteBytecode._assemble_exception_tableTcheck_pre_and_postr  c                C   s    |   }tj|}|j|dS )Nr  )to_bytecode	_bytecodeControlFlowGraphfrom_bytecodecompute_stacksize)rM   r  r   cfgr=   r=   r>   r"  Y  s   z"ConcreteBytecode.compute_stacksizer  compute_exception_stack_depths	stacksizer%  c          	      C   sJ  |d u st r|rtj|  }|j||d}| jdd} |  \}}t r.| | j	|nt
r7| | j	|n| | j	|}t| j}tjdkryt| j| j| j||t| j|t| jt| jt| j| j| j| j| j	||  t| jt| j S t| j| j| j||t| j|t| jt| jt| j| j| j| j	|t| jt| j S )Nr$  Fr%  rt   )!r3   r  r   r!  r  r"  to_concrete_bytecoder   r  r   r2   r   r   rh   r   rv   rw   typesCodeTyper   r   r   r~   r   tupler7   r   r   rI   r   r  r   r   )	rM   r&  r  r%  r#  r   r   r   nlocalsr=   r=   r>   to_code^  sp   	
	
zConcreteBytecode.to_codeprune_caches#conserve_exception_block_stackdepthc           &   
      s   d d  }  | t }d}|D ]"}t|trq||}|d ur(|| |tr0|jd n|j7 }q jD ]}||j	 q8i }	i }
 jD ]}|j
|	vsQJ ||	|j
< |
|jg | qHg }g }i }i }d}tr j fdd jD  }t|}nt j}dd  jD }tr| fdd jD  }n j} | jD ]\}}||v rt }|||< || ||	v r|	| }||vrtt |j|r|jnt}|||< || ||}|j}|tr|d d n|d 7 }|}|trdnd7 }|r|jdkr|d u sJ n(|j}|j}|tjv r  j| }n|tj v r=|t!v r8||d	?  ||d
@  f}n|| }n|tj"v rt|t#v rVt$|d@  j%|d?  f}n|t&v rnt$|d@ t$|d@  j%|d?  f}n j%| }n|tj'v r||k r|| }t|t(r|nt(|}n~ j||  }t)|}nr|tj*v rt+tr|d? |d@ rdnd nt,r|d	? n|}nP|t-v rt.|}nF|t/v rt0|}n<|t1v rt2|}n2|t3v rt4|}n(|t5v rt6|}n|t7v r|t#v rt$|d@ t8|d? f}nt8|}n|}|j9pt:|d d d }|d ur+t;}t|}|||f |t<|j||d ||
v r{|
| } t=| D ]7}z|t>||  W qC t?yz   tt |j|rd|jnt}|||< || |t>| Y qCw q|D ]\}!}||! }"t|"t<r|"jt;u sJ || |"_q~|@ D ]\}}#||j	 |#_	qtAB }$|$C  |$jD|$jE }%|%|$jF7 }%|$jGtHjI@ r|%d7 }%|$jGtHjJ@ r|%d7 }% jd |% |$_KtL|$ j |$M| |$S )Nr   rS   c                       g | ]}| j vrt|qS r=   )r   r    r   nrY   r=   r>   
<listcomp>      z0ConcreteBytecode.to_bytecode.<locals>.<listcomp>c                 S   s   g | ]}t |qS r=   )r    r1  r=   r=   r>   r3    s    c                    r0  r=   )r   r$   r1  rY   r=   r>   r3    r4  rm   r   r   r         r   )Nr   setr9   r+   rd   addr^   rW   r   r   r   
setdefaultr   r   r3   r   r   rh   r5   r   r   r   r*   r-   r   r   r   rI   rf   rJ   hasconstr7   haslocalr   hasnamer   r   r   r   hasfreer    r$   
hascomparer"   r4   r   r(   r   r)   r   r   r   r!   r   r,   r   r#   rG   r'   r   r%   r  r.   KeyErroritemsr  Bytecoder   r   r   r   r   inspect
CO_VARARGSCO_VARKEYWORDSargnamesr?   r   )&rM   r.  r/  c_instructionsjump_targetsrl   c_instrr   ex_entryex_startex_endr  jumpsr   labels	tb_instrscells_lookupncellslocals_lookuprF   labeltb_instrjump_targetrW   current_instr_offsetrP   c_argrJ   	n_or_cellrI   rG   instr_indexentriesro   r   tbr   nargsr=   rY   r>   r    s0  

















&























zConcreteBytecode.to_bytecode)r=   )FrX   )TF)7rz   r{   r|   r   r   r:   r   r+  r   r   r   rL   r   r   rA   r+   r   r   r   r   r   r   r   staticmethodr)  r*  r   r	   r~   r   re   r'   r   r   r   r   r   r   r   r   r  r  r  r   r   r  r   r  r  r"  r-  r  rA  r  r   r=   r=   rN   r>   r     s  
 

N
$%
3
Z

%1	

Lr   c                   @   s   e Zd ZdZdejddfddZdedefdd	Z	e
d
ee dedefddZdddZdefddZ		ddee dedefddZdS )_ConvertBytecodeToConcreter   r6   r8   Nc                 C   sV   t |tjsJ || _g | _g | _i | _i | _d| _d| _	i | _
g | _g | _g | _d S )Nr   F)r9   r  rA  r   r   rL  rM  exception_handling_blocksrequired_cachesseen_manual_cacheconsts_indicesconsts_listr   r   )rM   r6   r=   r=   r>   rL     s   
z#_ConvertBytecodeToConcrete.__init__r  c                 C   s@   t |}|| jv r| j| S t| j}|| j|< | j| |S rX   )r0   ra  rh   rb  r   )rM   r  keyro   r=   r=   r>   	add_const  s   



z$_ConvertBytecodeToConcrete.add_constr   rI   c                 C   s8   z|  |}W |S  ty   t| }| | Y |S w rX   )ro   rQ   rh   r   )r   rI   ro   r=   r=   r>   r8    s   z_ConvertBytecodeToConcrete.addc                    s  t  jjd d d }g }g }tr; jD ](}t|tr:|jtv r:t|jt	s&J |jD ]}t|t
s2J   j| q)qt jd gD ]}t|trb|jdkrb jsWtdd _  jd8  _n& jr js j fddt jD  d _d _n	td	 j d
|d u rqCt|trt j j|< qCt|trt |jd d d }qCt|tr|jtusJ tt jdd|j|j j |< qCt|t!rڈ j |j" }t jd |_#qCt|tsJ |j$tur|j$d ur|j$}|j}|j}	|j}
d}t|
tr|
}d}d}n|	tj%v r &|
}n|	tj'v r|	tv r{t|
t	r<t|
dkr<t|
d t
r<t|
d t
s>J   j|
d }  j|
d }|dksZ|dkrst(|	 \}}t)|||d} j*| |}|}n|d> | }nytrt|
t+r|*t j  jj,-|
j}n^trt|
t.r|*t j  jj/-|
j}nCt|
t
sJ   j|
}n2|	tj0v rr|	t1v rt|
t	rt|
dkrt|
d t2sJ |
t|
d t
r  j3|
d }nt|
t4rt5|
}nJ |
t5|
d |d>  }n|	t6v r\t|
t	r<t|
dkr<t|
d t2r<t|
d t2r<t|
d t
s@J |
  j3|
d }t5|
d dt5|
d   |d>  }nt|
t
sjJ d|
 d  j3|
}n|	tj7v rt|
t+r|*t j  jj,-|
j}net|
t.sJ |*t j  jj/-|
j}nL|	tj8v rt|
t9rtr|
: |
j;d@ d>  |
j;d@  }n,t<r|
: |
j;d>  }n|
j;}n|	t=v rt|
t>t?fr|
j;}n
t|
t5sJ |
}t)|||d}|r
 j@*t j||f tAr|B  _d _ j*| qCtArqi }d}d}tC jj,D ]&\}}| jv rC j-|||< |d7 }q+t j| ||< |d7 }q+|D ]} j| }||j |_qTt jt jj, | }nt jj,}|D ]} j| }| j|7  _qyd S )Nr   z,Found a CACHE opcode when none was expected.Trm   c                    s"   g | ]}t d d jd jdqS )r   r   r   r   )rA   r   rG   )r   r   rY   r=   r>   r3    s    zD_ConvertBytecodeToConcrete.concrete_instructions.<locals>.<listcomp>r   Fz?Found some manual CACHE opcode but less than expected. Missing z CACHE opcodes.rS   r6  r   r   rr   zGot z, expected a strr   r5  )Dr'   r   r   r5   r9   r%   rf   r   rJ   r+  r:   r8  r   	itertoolschainrI   r_  RuntimeErrorr`  r   r   r   r*   rh   rM  r+   rF   r-   r   r   r   r   r^  r.   r  r   rG   r:  rd  r;  r   rA   r   r    r   ro   r$   r   r<  r   r   r   r#   r~   r   r=  r>  r"   	_get_maskr  r4   r   r(   r)   rL  r3   r_   	enumerate)rM   rG   cell_instrsfree_instrsbinstrpargr   r  
instr_namerP   rJ   is_jumprR  rV  
arg1_index
arg2_indexn1n2rH  ro   shared_name_indexesn_shared
n_unsharedr   rI   free_offsetr=   rY   r>   concrete_instructions  sV  











&



z0_ConvertBytecodeToConcrete.concrete_instructionsc                 C   sf  g }g }d}| j D ]$}|| |tr|jd d n|jd 7 }|| |tr*dnd7 }q	|| d}| jD ]H\}}}| j| }|| }	|| |  }
| ra|	|
tr[|jd n|j 8 }	n| rs|
trm|jd n|j |	 }	|j}|	|_	|j|krd}q8|r|S | j
 D ]&\}}||j |_||j |_|j}t|tsJ | j| }|| }	|	|_qdS )Nr   rS   rm   FT)r   r   r^   rW   rL  rM  r_   r`   ra   rJ   r^  r@  r   r   r   r9   r*   )rM   label_offsetsinstruction_offsetsrl   r   modifiedro   rR  target_indextarget_offsetr]   old_sizerZ  r  lbr=   r=   r>   compute_jumps  sV   






z(_ConvertBytecodeToConcrete.compute_jumpsTcompute_jumps_passesr%  c                 C   s   t r|rtj| j}|jdd | | _|d u r| j}| jj}|t	ur*| 
| | j| jj |   td|D ]
}|  }|sE nq;td| t| jt| jt| j| jt| j d}|| j |S )NTr'  r   z2compute_jumps() failed to converge after %d passesr   )r3   r  r   r!  r   r"  r  _compute_jumps_passesr;   r   rd  r   r   rE  rx  r   r  rg  r   r   r+  rb  r   r   r^  valuesr   )rM   r  r%  r#  r<   r   r{  concreter=   r=   r>   r(    s<   

z/_ConvertBytecodeToConcrete.to_concrete_bytecode)r8   N)NT)rz   r{   r|   r  r  rA  rL   r   r~   rd  r\  r   r:   r8  rx  r   r  r   r   r(  r=   r=   r=   r>   r]    s$    	
 aEr]  )Lrx   rB  re  rP   rf   r   rv   r)  typingr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r  bytecode.flagsr   bytecode.instrr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   bytecode.utilsr2   r3   r4   r5   r^   BaseBytecoder?   r@   r~   rA   r   _BaseBytecodeListr   r]  r=   r=   r=   r>   <module>   s4    <$z7       