
    mh                        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jC        deddfd	ZD ed
d          ZE G d de)eF                   ZG G d d          ZH G d dejI        eeGe6f                            ZJ G 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                 ^    |sd S |d         }t          |t                    s|	|| _        d S d S )Nr   )
isinstancestr	docstring)r7   r8   first_consts      </usr/local/lib/python3.11/site-packages/bytecode/concrete.py_set_docstringr@   G   sB     )K+s## %{':$ (;':    TConcreteInstr)boundc                   n    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ZdedededdfdZdededdf fdZedefd            Zdeee         eef         fdZdedee         fdZdefdZedee         dee         dededef
d            ZdefdZ xZS )rC   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argrI   rJ   rK   c                `    || _         t                                          ||||           d S )N)rI   rJ   )rG   super__init__)selfrL   rM   rI   rJ   rK   	__class__s         r?   rP   zConcreteInstr.__init__`   s4     ,s6HEEEEErA   opcoder9   c                     t          |          r-|t          u rt          d|z            t          ||           d S |dk    r|t          ur|nd}t          ||           d S |t          urt          d|z            d S )Nz!operation %s requires an argumentr   zoperation %s has no argument)r2   r   
ValueErrorr0   )rQ   rL   rS   rM   s       r?   
_check_argzConcreteInstr._check_argo   s    v&& 	He|| !Dt!KLLL3%%%%%q[[E))##qC3%%%%%% !?$!FGGG  rA   c                     t                                          ||           d}|t          ur|dk    r|dz  }|dz  }|dk    | j        dd| j        z  z   }|| _        d S )N         )rO   _setr   rG   rH   )rQ   rL   rM   sizerR   s       r?   r[   zConcreteInstr._set}   s{    
 	T3e**		 ** *q4...D


rA   c                     | j         S N)rH   rQ   s    r?   r\   zConcreteInstr.size   s
    zrA   c                 *    | j         | j        | j        fS r^   )	_location_namerF   r_   s    r?   _cmp_keyzConcreteInstr._cmp_key   s    
DI66rA   instr_offsetc                    t           r
| j        dz  n| j        |                                 z   }|                                 r||z   | j        z   S |                                 r||z   | j        z
  S |                                 r| j        S d S )NrX   )OFFSET_AS_INSTRUCTIONrH   use_cache_opcodesis_forward_rel_jumprF   is_backward_rel_jumpis_abs_jump)rQ   rd   ss      r?   get_jump_targetzConcreteInstr.get_jump_target   s     "7FTZ1__DJ""$$% ##%% 	0!#di//$$&& 	0!#di// 	9trA   c                 p   | j         t          u rt          | j        df          S | j         }| j        |dz  g}|dk    r!|dz  }t          j        |dz  g|d d<   |dk    !| j        rCt          |          | j        k     r+t          j        dg|d d<   t          |          | j        k     +t          |          S )Nr   rY   rZ   )rF   r   bytes_opcodeEXTENDED_ARGrG   lenrH   )rQ   rM   bs      r?   assemblezConcreteInstr.assemble   s    9$,*+++i\3:&DjjAIC)3:6AbqbE Djj  	5a&&4:%% -t4"1" a&&4:%% QxxrA   clsr7   offsetc                     t           rd|z  n|}||         }t          |          r||dz            }nt          }t          j        |         } | |||          S )NrX      )rI   )rf   r2   r   ro   opname)rt   rI   r7   ru   indexoprM   rL   s           r?   disassemblezConcreteInstr.disassemble   sd    3?F

%[r"" 	uqy/CCC~b!s4V,,,,rA   c                     t           j        dk    r,| j        t          j        v rt          j        | j                 ndS t           j        dk    rt          j        | j                 S dS )N)      r   r}      )sysversion_inforb   dis_inline_cache_entriesro   r_   s    r?   rg   zConcreteInstr.use_cache_opcodes   sa    w&& :!::: )$*55
 ((,T\::1rA   )__name__
__module____qualname____doc__int__annotations__	__slots__r   r<   r   r   r	   r(   rP   rV   r[   propertyr\   r   rc   rl   rn   rs   classmethodr   rB   r{   rg   __classcell__rR   s   @r?   rC   rC   R   s8          III+I
 F
 ,1,0'+F F FF F
 c4'(F =)F  }F F F F F FHs HC Hc Hd H H H H  
	      c    X7% 7c AB 7 7 7 7C HSM    "%      -a -(3- -u -c -VW - - - [-
3 
 
 
 
 
 
 
 
rA   c                   v    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
Zde	f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   r9   Nc                 L    || _         || _        || _        || _        || _        d S r^   r   r   r   r   r   )rQ   r   r   r   r   r   s         r?   rP   zExceptionTableEntry.__init__   s.     )&&$rA   c           
      V    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   r_   s    r?   __repr__zExceptionTableEntry.__repr__   s`    , -, ,+, , k, ,  +	, ,
 /, ,	
rA   )r   r   r   r   r   r   boolr   rP   r<   r    rA   r?   r   r      s           
  KKK
  VI%% % 	%
 % % 
% % % %
# 
 
 
 
 
 
rA   r   c                       e Zd ZU eed<   ee         ed<   ee         ed<   ee         ed<   	 dAddddddedeedf         de	e         de
ee                  f fd	Zd
eeeef                  f fdZded
dfdZ fdZd
efdZded
ef fdZedddej        ded
d fd            Zedeeeef                  ded
eeeef                  fd            Zd
eeeeeeee
e         f                  f         fdZ ededeeeeee
e         f                  d
efd            Z!edee         dede
e         d
dfd             Z"dede	eeeee
e         f                  d
efd!Z#ed"ed
e$fd#            Z%d$ed
e$fd%Z&eded&ed
efd'            Z'd&ed(ed)e
e         d
e$fd*Z(d+ee$         d&ed(ed)ed
ef
d,Z)dede	eeeee
e         f                  d
efd-Z*ede+eeef                  d
dfd.            Z,ed/ee         d
efd0            Z-ded
ee         fd1Z.edBd2ed3ed
ee         fd4            Z/d
efd5Z0d6d7d8ed
efd9Z1	 dCd6d6d:d;e
e         d8ed<ed
ej        fd=Z2	 	 dDd>ed?ed
e3j4        fd@Z5 xZ6S )EConcreteBytecoder8   namesvarnamesexception_tabler   Nr8   r   r   r   .c                0   t                                                       t          |          | _        t          |          | _        t          |          | _        |pg | _        |D ]}|                     |           |                     |           d S r^   )	rO   rP   listr8   r   r   r   _check_instrextend)rQ   instructionsr8   r   r   r   instrrR   s          r?   rP   zConcreteBytecode.__init__  s     	6ll%[[
X.4"! 	% 	%Ee$$$$L!!!!!rA   r9   c              #      K   t                                                      }|D ]}|                     |           |V  d S r^   )rO   __iter__r   )rQ   r   r   rR   s      r?   r   zConcreteBytecode.__iter__$  sT      ww''))! 	 	Ee$$$KKKK	 	rA   r   c                     t          |t          t          f          s$t          dt	          |          j        z            d S )NzXConcreteBytecode must only contain ConcreteInstr and SetLineno objects, but %s was found)r;   rC   r,   rU   typer   )rQ   r   s     r?   r   zConcreteBytecode._check_instr*  sK    %-!;<< 	#%)%[[%9:  	 	rA   c                     t                                          |           t          |t                    r&|j        | _        |j        | _        |j        | _        d S d S r^   )rO   _copy_attr_fromr;   r   r8   r   r   )rQ   bytecoderR   s     r?   r   z ConcreteBytecode._copy_attr_from2  sX    )))h 011 	."/DK!DJ$-DMMM	. 	.rA   c                 &    dt          |           z  S )Nz<ConcreteBytecode instr#=%s>)rq   r_   s    r?   r   zConcreteBytecode.__repr__9  s    -D		99rA   otherc                 z   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    rdS t                                          |          S )NF)	r   r   mapr1   r8   r   r   rO   __eq__)rQ   r   const_keys1const_keys2rR   s       r?   r   zConcreteBytecode.__eq__<  s    ::T%[[((53y$+66773y%,7788+%%5:$$5=EN**5ww~~e$$$rA   F)extended_argr7   r   c          
      x   t           rg }t          j        | d          D ]}|j        rt	          j        |j                  nd }|                    t          |j        |j	        
|j	        dz  nt          |                     t          r	|j        pdndD ]=\  }}}t          |          D ]'}|                    t          dd|                     (>nt          rd |                                 D             }n!t!          t          j        |                     }g }d}| j        }	|t'          | j                  t*          rd	nd
z  k     rt*          rd	|z  n|}
|
|v r||
         }	t                              |	| j        |          }|                    |           |t*          r
|j        d	z  n|j        z  }|t'          | j                  t*          rd	nd
z  k     t1                      }|s|                    |           | j        |_        | j        |_        t=          | j                  |_         | j!        |_"        | j#        |_$        | j%        |_&        | j        |_'        tQ          | j)                  |_*        tQ          | j+                  |_,        tQ          | j-                  |_.        tQ          | j/                  |_0        tQ          | j1                  |_2        tg          || j+                   t           r,|4                    | j5                  |_6        | j7        |_8        n|j8        |_8        ||d d <   |S )NT)show_caches   rJ   r   CACHEr   c                     i | ]	\  }}}||
S r   r   ).0ru   _rI   s       r?   
<dictcomp>z.ConcreteBytecode.from_code.<locals>.<dictcomp>f  s!    WWW2C&!VvvWWWrA   rX   rw   )9r4   r   get_instructions	positionsr(   from_positionsappendrC   rx   rM   r   r6   
cache_inforanger3   co_linesdictfindlinestartsco_firstlinenorq   co_coderf   r{   r\   r   _remove_extended_argsco_namerL   co_filenamefilenamer   co_flagsflagsco_argcountargcountco_posonlyargcountposonlyargcountco_kwonlyargcountkwonlyargcountfirst_linenor   co_namesr   	co_constsr8   co_varnamesr   co_freevarsfreevarsco_cellvarscellvarsr@   _parse_exception_tableco_exceptiontabler   co_qualnamequalname)r7   r   r   ilocr   r\   line_startsru   rI   
lineno_offr   r   s                r?   	from_codezConcreteBytecode.from_codeL  s]     #	UL)$DAAA U UCD;Xm21;???TX ##!'(u'8e!$     ;@"G1<#52R U UJAtQ"4[[ U U$++M'1s,S,S,STTTTUUU   =WWt}}WWW"3#5d#;#;<< LF$($7FC--7L2S!!RSTUU-BNa&jj
,,(4F%11&$,OO##E***/DT5:??%*T C--7L2S!!RSTUU $%%  	9**<888 ,&t}55 ,#'#: "&"8 $ 3dm,,t~.. !122 !122 !122x000 	2'/'F'F&( (H$ !% 0H ( 1H"rA   r   r   c              #   v   K   |}| D ]1}|j         }||t          ur|}t          |t                    r||fV  2d S r^   )rI   r   r;   rC   )r   r   rI   r   i_linenos        r?   _normalize_linenoz"ConcreteBytecode._normalize_lineno  si        " 	& 	&E|H #(=(=!%// &uo%%%	& 	&rA   c                 P   d}g }g }|                      | | j                  D ]n\  }}|                    |                                           |j        }|                    t
          r|dz  n||||j        f           |t
          r|dz  n|z  }od                    |          |fS )Nr   rX   rA   )r   r   r   rs   r\   rf   rJ   join)rQ   ru   code_strlinenosrI   r   i_sizes          r?   _assemble_codezConcreteBytecode._assemble_code  s     !33D$:KLL 	I 	IMFEOOENN,,---ZFNN$9EVaZZvN	   '<Hv{{&HFF""G,,rA   r   c                 L   g }d}| }|D ]\  }}}}||z
  }|dk    r|}||z
  }	|}|	dk    r |                     d           |	dz  }	|	dk     |dk     r6|                     t          j        d|	d                     d}	|dz  }|dk     6|dk    r6|                     t          j        d|	d                     d}	|dz  }|dk    6d|	cxk    rdk    sn J d|cxk    rdk    sn J |                     t          j        d|	|                     d                    |          S )Nr   rY   s    Bb   rA   )r   structpackr   )
r   r   lnotab
old_offset
old_linenoru   r   rI   dlinenodoffs
             r?   _assemble_lnotabz!ConcreteBytecode._assemble_lnotab  s    
!
$+ 	< 	< FAvqz)G!||JJ&DJ**k*** ** D..fk$d;;<<<4 D..
 C--fk$c::;;;3 C--
 ##########7))))c))))))MM&+dD'::;;;;xxrA   	linetabler   r   c                    ||dk     r4|                      t          j        ddd                     |dz  }|dk     4|dk    r4|                      t          j        ddd                     |dz  }|dk    4d|cxk    rdk    sn J nd}|dk    r~|                      t          j        dd|                     |dz  }|dk    r |                      d           |dz  }|dk     |                      t          j        d|d                     n)|                      t          j        d||                     d|cxk    rdk    sn J d S )Nir   r   r   r      s    )r   r   r   )r   r   r   s      r?   _pack_linetablez ConcreteBytecode._pack_linetable  s     D..  T1d!;!;<<<4 D.. C--  T1c!:!:;;;3 C-- 7))))c)))))))G #::V[sG<<===CKD**  --- ** V[tQ778888 V[tW==>>>DCrA   c                    |sdS g }d}t          |          }t          |          \  }}}}	|	|	j        
|	j        |z
  nd }
n||z
  }
|D ]O\  }}}}||j        
|j        |z
  nd }n||z
  }|dk    s|
|-|}||z
  }|}|                     |||
           |}
P||z   |z
  }|                     |||
           d                    |          S )NrA   r   )iternextrI   r  r   )rQ   r   r   r   r   iter_inru   r   r   old_locationold_dlinenorI   rJ   r   r   s                  r?   _assemble_linestablez%ConcreteBytecode._assemble_linestable  sB   
  	3!#	
w--37==0
L#  &2 #l22 K %|3K 18 	" 	",FFFH#  2 Oj00  !:-!|| 3JJ&DJ  D+>>>!KK +Yk:::xx	"""rA   varintc                     t                      }	 |                    | dz             | dz  } | r|dxx         dz  cc<   nn2|S )NT?      @   )	bytearrayr   )r	  encodeds     r?   _encode_location_varintz(ConcreteBytecode._encode_location_varintA  s^    ++	NN6D=)))qLF t#	 rA   svarintc                 v    |dk     r|                      | dz  dz            S |                      |dz            S )Nr   rw   )r  )rQ   r  s     r?   _encode_location_svarintz)ConcreteBytecode._encode_location_svarintN  sB    Q;;//7(qA0EFFF//1===rA   r\   c                 .    d| dz  z   |dk    r|dz
  ndz   S )N   r}   rZ   rw      r   )r7   r\   s     r?   _pack_location_headerz&ConcreteBytecode._pack_location_headerU  s&    419%TQYYAFFrA   rI   rJ   c                    t                      }||d d d f\  }}}}n|j        |j        |j        |j        f\  }}}}|+|                    |                     d|                     n|b|||k    rt          d| d|           |                    |                     d|          g| 	                    ||z
            R            n8|J |J ||k    rS||z
  dk    rJ|dk     rD||z
  dk    r;|                    |                     |dz  |          |dz  dz  ||z
  z   f           n||k    rF||z
  d	v r?|d
k     r9|d
k     r3|                    |                     d|z   |z
  |          ||f           n|                    |                     d|          g| 	                    ||z
            | 
                    ||z
            | 
                    |dz             | 
                    |dz             R            |S )N   zMAn instruction cannot have no column offset and span multiple lines (lineno: z, end lineno: r~   r   H   rZ      )rw   rX   r   
      rw   )r  rI   
end_lineno
col_offsetend_col_offsetr   r  rU   r   r  r  )	rQ   r\   rI   rJ   packedl_linenor  r   r!  s	            r?   _pack_locationzConcreteBytecode._pack_locationY  s     	@<Hj*nn ##'	@<Hj*n MM$44R>>???? %**@*@ T/7T TGQT T   MM..r488228f3DEE     )))!--- h&&v%**OO#j0R7722:?DII$q.Q.>J3NO    h&&v%//$$"S((222=63I4PP"&    222t<<66x&7HII 55j86KLL 55j1nEE 55nq6HII 
 
 
 rA   	locationsc                     |dz  }	 |                     |                     |||                     |j        |j        n|}|dz  }|dk     rnG|S )NrX   TrZ   rw   )r   r$  rI   )rQ   r%  r\   rI   rJ   s        r?   _push_locationsz ConcreteBytecode._push_locations  sm     	

	T00vxHHIII )1(CX__FAIDaxx	 rA   c                 T   |sdS g }t          |          }t          |          \  }}}}|pt          |d d d           }|}|D ]:\  }}	}}
|
p|}
|j        ||
k    r||	z  }|                     ||||          }|	}|
};|                     ||||           d                    |          S )NrA   )r  r  r(   rI   r'  r   )rQ   r   r   r%  r  r   r\   rI   r  r   rJ   s              r?   _assemble_locationsz$ConcreteBytecode._assemble_locations  s    
  	3%'	w--(,W%4#N}VT4'N'N '. 	$ 	$"Avq(/<H ".<83K3K)))T6<PPFD#LL 	YflCCCxx	"""rA   c                    d}d }d}|t          |           k     r| |         }t          |t                    r|dz  }6|j        dk    r |dz  }||dz  |j        z   }n|j        }| |= a|E|j        dk    rt
          n|dz  |j        z   }d }t          |j        ||j        |          }|| |<   d}|dz  }|t          |           k     |t          d          d S )Nr   rw   rp   rZ   NOP)rJ   rK   z#EXTENDED_ARG at the end of the code)	rq   r;   r,   rL   rM   r   rC   rJ   rU   )r   nb_extended_argsr   ry   r   rM   s         r?   r   z&ConcreteBytecode._remove_extended_args  s4    c,'''' 'E %++ 
z^++ A% +$0A$5#BLL#(9L ''$zU22ee9Jei8W#%J"^"2	   ',U##$ QJE? c,''''B #BCCC $#rA   except_table_iteratorc                 z    t          |           }|dz  }|dz  r!|dz  }t          |           }||dz  z  }|dz  !|S )Nr  r  r  )r  )r-  rr   vals      r?   _parse_varintzConcreteBytecode._parse_varint"  s^    &''"f"f 	AIC*++A1r6MC "f 	 
rA   c           	         t           sJ g }t          |          }	 	 |                     |          }|                     |          }||z   dz
  }|                     |          }|                     |          }|dz	  }	t          |dz            }
|                    t          ||||	|
                     # t          $ r |cY S w xY w)NTrw   )r4   r  r0  r   r   r   StopIteration)rQ   r   tableiteratorstartlengthendr   dldepthlastis              r?   r   z'ConcreteBytecode._parse_exception_table,  s     u((	T**844++H55fnq(++H55''11aR!V0VUERRSSST  	 	 	LLL	s   BB7 7CCvalueset_begin_markerc                     g }| dk    sJ | r&|                     | dz  |rdndz             | dz  } | &|pdg}|r|dxx         dz  cc<   t          |          S )Nr   r  r  r  r  r  )r   reversed)r;  r<  temps      r?   _encode_varintzConcreteBytecode._encode_varint?  s     zzzz 	KK
D&7bba8999aKE  	 {s 	HHHOHHH~~rA   c                    t                      }| j        pg D ]}|j        |j        z
  dz   }|j        dz  |j        z   }|                    |                     |j        d                     |                    |                     |                     |                    |                     |j                             |                    |                     |                     t          |          S )Nrw   T)
r  r   r   r   r   r   r   r@  r   rn   )rQ   r3  entryr\   r9  s        r?   _assemble_exception_tablez*ConcreteBytecode._assemble_exception_tableM  s    )/R 	5 	5E$u'99A=D&!+u/??ELL,,U-?FFGGGLL,,T22333LL,,U\::;;;LL,,U334444U||rA   Tcheck_pre_and_postrE  c                    |                                  }t          j                            |          }|                    |          S )NrD  )to_bytecode	_bytecodeControlFlowGraphfrom_bytecodecompute_stacksize)rQ   rE  r   cfgs       r?   rK  z"ConcreteBytecode.compute_stacksizeY  sA    ##%%(66x@@$$8J$KKKrA   rE  compute_exception_stack_depths	stacksizerN  c                   |	t           rr|rpt          j                            |                                           }|                    ||          }|                                                    d          } |                                 \  }}t           r|                     | j	        |          n<t          r|                     | j	        |          n|                     | j	        |          }t          | j                  }t          j        dk    rt#          j        | j        | j        | j        ||t-          | j                  |t1          | j                  t1          | j                  t1          | j                  | j        | j        | j        | j	        ||                                 t1          | j                  t1          | j                             S t#          j        | j        | j        | j        ||t-          | j                  |t1          | j                  t1          | j                  t1          | j                  | j        | j        | j	        |t1          | j                  t1          | j                             S )NrM  FrN  r   )!r4   rH  rI  rJ  rG  rK  to_concrete_bytecoder   r)  r   r3   r  r   rq   r   r   r   typesCodeTyper   r   r   r   r   tupler8   r   r   rL   r   rC  r   r   )	rQ   rO  rE  rN  rL  r   r   r   nlocalss	            r?   to_codezConcreteBytecode.to_code^  sG    +I,::4;K;K;M;MNNC--#5/M .  I ??$$99/4 :  D
 !//11' D$$T%6@@@ G))$*;WEEE**4+<gFF 	 dm$$w&&>$#DJdk""dj!!dm$$	!..00dm$$dm$$%  * >$#DJdk""dj!!dm$$	!dm$$dm$$!  rA   prune_caches#conserve_exception_block_stackdepthc                 t     d d          }                      |           t                      }d}|D ]_}t          |t                    r|                    |          }||                    |           |t          r
|j        dz  n|j        z  }` j        D ]}|                    |j	                   i }	i }
 j        D ]E}|j
        |	vsJ ||	|j
        <   |
                    |j        g                               |           Fg }g }i }i }d}t          r+ j         fd j        D             z   }t#          |          }n%t#           j                  }d  j        D             }t$          r| fd j        D             z   }n j        }                     | j                  D ]n\  }}||v r(t-                      }|||<   |                    |           ||	v rV|	|         }||vrJt/          t-                      |j        |r|j        nt4                    }|||<   |                    |           |                    |          }|j        }|t          r|dz  dz
  n|dz
  z  }|}|t          rdndz  }|r|j        dk    r|J n|j        }|j        }|t8          j        v r j        |         }n,|t8          j         v r+|tB          v r||dz	           ||d	z           f}n||         }n|t8          j"        v rz|tF          v r$tI          |dz             j%        |dz	           f}n|tL          v r5tI          |dz            tI          |dz             j%        |dz	           f}nz j%        |         }nk|t8          j'        v rW||k     r0||         }t          |tP                    r|ntQ          |          }n' j        ||z
           }tS          |          }n|t8          j*        v r2tW          t$          r|d
z	  |dz  rdndz   ntX          r|dz	  n|          }n|tZ          v rt]          |          }n|t^          v rta          |          }n|tb          v rte          |          }n{|tf          v rti          |          }nb|tj          v rtm          |          }nI|tn          v r>|tF          v r%tI          |dz            tq          |dz	            f}ntq          |          }n|}|j9        ptu          |d d d           }|-tv          }t#          |          }|                    ||f           |                    ty          |j        ||                     ||
v r|
|         } t{          |           D ]}	 |                    t}          ||                              ,# t~          $ ro t/          t-                      |j        |r|j        nt4                    }|||<   |                    |           |                    t}          |                     Y w xY wp|D ]?\  }!}||!         }"t          |"tx                    r|"j        tv          u sJ ||         |"_        @|@                                D ]\  }}#||j	                 |#_	        t          jB                    }$|$C                                |$jD        |$jE        z   }%|%|$jF        z  }%|$jG        t          jI        z  r|%dz  }%|$jG        t          jJ        z  r|%dz  }% j        d |%         |$_K        t          |$ j                   |$M                    |           |$S )Nr   rX   c                 @    g | ]}|j         vt          |          S r   )r   r!   r   nrQ   s     r?   
<listcomp>z0ConcreteBytecode.to_bytecode.<locals>.<listcomp>  2     , , , Qdm5K5K

5K5K5KrA   c                 ,    g | ]}t          |          S r   )r!   )r   r]  s     r?   r^  z0ConcreteBytecode.to_bytecode.<locals>.<listcomp>  s    >>>1GAJJ>>>rA   c                 @    g | ]}|j         vt          |          S r   )r   r%   r\  s     r?   r^  z0ConcreteBytecode.to_bytecode.<locals>.<listcomp>  r_  rA   rw   r   r  r        r   )Nr   setr;   r,   rl   addrf   r\   r   r   r   
setdefaultr   r   r4   r   r   rq   r6   r   r   r   r+   r.   r   r   r   rL   ro   rM   hasconstr8   haslocalr   hasnamer   r   r   r   hasfreer!   r%   
hascomparer#   r5   r   r)   r   r*   r   r    r   r"   r   r-   r   r$   rJ   r(   r   r&   r>  r/   KeyErroritemsrH  Bytecoder   r   r   r   r   inspect
CO_VARARGSCO_VARKEYWORDSargnamesr@   r   )&rQ   rX  rY  c_instructionsjump_targetsru   c_instrr   ex_entryex_startex_endrB  jumpsr   labels	tb_instrscells_lookupncellslocals_lookuprI   labeltb_instrjump_targetr\   current_instr_offsetrS   c_argrM   	n_or_cellrL   rJ   instr_indexentriesry   r   tbr   nargss&   `                                     r?   rG  zConcreteBytecode.to_bytecode  sx    aaa"">222 "%% 	U 	UG'9-- ,,V44F!  (((-BTw|q((TFF , 	. 	.HX_----
 4679) 	C 	CE %X5555+0HU'(e/44;;EBBBB (*OQ9;	  	?= , , , ,$(M, , , L &&FF''F>>>>>L  	*( , , , ,$(M, , , MM !MM#55D- 
  
 D	> D	>OFG %%!&v##E*** !! ( 	))'(>#))"   H (0Ie$ ''111!11&99K<D )>Ntqy1}}TAXNF#) 07aaa7F
  HQ 7 7"****
 !W---+e,CCw///!111,UaZ8-PR
:ST+E2w..00 OO Juz2  #333#EAIUQYEUVJAWX"j/w..v~~$0$7	  *)W==4II!(!3!3   $}UV^<%dmmw111! @!URZ(GaHH.3>uzz CC
 },,&u--CC},,&u--CCz))"5//CC222(//CC{**'..CC///00 OO'
33
 *%00C"+V}VT4QU/V/V*+C"%l"3"3KLL+{!;<<<##E',h$O$O$OPPP $v-- !56%g.. > >E>$++F9U3C,D,DEEEE# > > > $,!GG!,B'E--!&$ $ ,4	%($++H555$++F8,<,<=====>  #( 	, 	,E; 'EeU++N	=N0N0N0NN{+EII #** 	- 	-IE2u|,BII%''  &&&!H$;;))>G.. 	QJE>G22 	QJE M&5&1x---%%%s   2(VA6XX)r   )Fr^   )TF)7r   r   r   r   r   r<   r   rU  r   r   r	   rP   r   r   rC   r,   r   r   r   r   r   r   r   staticmethodrS  rT  r   r
   r   r   rn   r(   r   r   r  r  r  r  r  r  r$  r'  r)  r   r   r0  r   r@  rC  rK  rW  rH  rn  rG  r   r   s   @r?   r   r     s        LLL 9 3i
 -.... " !#"$?C" " " 	"
 S#X" 3-" "$':";<" " " " " "$(5	)A#BC      # $    . . . . .:# : : : :%C %D % % % % % %  6;L L LnL/3L	L L L \L\ &u]I%=>?&OR&	%]*+	,& & & \&"-	ud5c30G!GHII	J- - - -, " " $(sCh}>U/U)V$W" 	"  "  "  \" H " ;" &)" 4<SM" 	"  "  "  \" J0#0# %S#x/F FGH0# 
	0# 0# 0# 0#f 
 
	 
 
 
 \
> >	 > > > > GC Gs Gs G G G \GXX!$X080GX	X X X Xt	?  	
   
   0#### %S#x/F FGH## 
	## ## ## ##J .D%eI},D&EF.D	.D .D .D \.Db Xc] s    \$	!	"   &  c T hsm    \
5 
 
 
 
 ?C L L Lt Ls L L L L $(H $(/3H H HC=H !	H
 )-H 
H H H HX "49g gg .2g 
		g g g g g g g grA   r   c                       e Zd ZdZdej        ddfdZdedefdZ	e
dee         d	edefd
            ZddZdefdZ	 	 ddee         dedefdZdS )_ConvertBytecodeToConcreter  r7   r9   Nc                     t          |t          j                  sJ || _        g | _        g | _        i | _        i | _        d| _        d| _	        i | _
        g | _        g | _        g | _        d S )Nr   F)r;   rH  rn  r   r   ry  rz  exception_handling_blocksrequired_cachesseen_manual_cacheconsts_indicesconsts_listr   r   )rQ   r7   s     r?   rP   z#_ConvertBytecodeToConcrete.__init__  sx    $	 233333 24=?
(*NP& !& JL&( "
#%rA   r;  c                     t          |          }|| j        v r| j        |         S t          | j                  }|| j        |<   | j                            |           |S r^   )r1   r  rq   r  r   )rQ   r;  keyry   s       r?   	add_constz$_ConvertBytecodeToConcrete.add_const  sd    $%%%&s++D'((#(C &&&rA   r   rL   c                     	 |                      |          }n4# t          $ r' t          |           }|                     |           Y nw xY w|S r^   )ry   rU   rq   r   )r   rL   ry   s      r?   re  z_ConvertBytecodeToConcrete.add  s_    	KK%%EE 	 	 	JJELL	 s    .A	A	c                     t           j        j        d d d           }g }g }t          r j        D ]}}t	          |t
                    rf|j        t          v rXt	          |j        t                    sJ |j        D ]4}t	          |t                    sJ                       j        |           5~t          j         j        d g          D ]}t	          |t
                    r9|j        dk    r. j        st#          d          d _         xj        dz  c_        nm j        rf j        sG j                             fdt+           j                  D                        d _        d _        nt#          d j         d	          |t	          |t,                    rt/           j                   j        |<   t	          |t2                    rt          |j        d d d           }!t	          |t6                    rI|j        t:          usJ t=          t/           j                  dd|j        |j                   j         |<   t	          |tB                    r0 j         |j"                 }t/           j                  dz
  |_#        t	          |t
                    sJ |j$        t:          ur|j$        |j$        }|j        }|j        }	|j        }
d}t	          |
t,                    r|
}d}d}n|	t          j%        v r &                    |
          }n|	t          j'        v r	|	t          v rt	          |
t                    rIt/          |
          d
k    r6t	          |
d         t                    rt	          |
d         t                    sJ                       j        |
d                   }                      j        |
d                   }|dk    s|dk    rBtP          |	         \  }}tS          |||          } j        *                    |           |}|}n|dz  |z   }nt          rbt	          |
tV                    rM|*                    t/           j                              j        j,        -                    |
j                  }nNt          rbt	          |
t\                    rM|*                    t/           j                              j        j/        -                    |
j                  }nt	          |
t                    sJ                       j        |
          }n|	t          j0        v r|	tb          v rt	          |
t                    r.t/          |
          d
k    rt	          |
d         td                    s
J |
            t	          |
d         t                    r"                      j3        |
d                   }n/t	          |
th                    rtk          |
          }n
J |
            tk          |
d                   |dz  z   }n|	tl          v rt	          |
t                    rdt/          |
          dk    rQt	          |
d         td                    r6t	          |
d         td                    rt	          |
d
         t                    s
J |
                                  j3        |
d
                   }tk          |
d                   d
tk          |
d                   z  z   |d
z  z   }nt	          |
t                    sJ d|
 d                                  j3        |
          }n|	t          j7        v rt	          |
tV                    rM|*                    t/           j                              j        j,        -                    |
j                  }n0t	          |
t\                    sJ |*                    t/           j                              j        j/        -                    |
j                  }n|	t          j8        v ryt	          |
tr                    rct          r.|
:                                |
j;        dz  dz  z   |
j;        dz  z   }nutx          r |
:                                |
j;        dz  z   }nN|
j;        }nF|	tz          v r$t	          |
t|          t~          f          r|
j;        }nt	          |
tj                    sJ |
}tS          |||          }|r/ j@        *                    t/           j                  ||f           t          r |B                                 _        d _         j        *                    |           t          ri }d}d}t           j        j,                  D ]P\  }}| j        v r# j        -                    |          ||<   |dz  }1t/           j                  |z   ||<   |dz  }Q|D ]!} j        |         }||j                 |_        "t/           j                  t/           j        j,                  z   |z
  }nt/           j        j,                  }|D ]} j        |         }|xj        |z  c_         d S )Nr   z,Found a CACHE opcode when none was expected.Trw   c                 T    g | ]$}t          d dj        d         j                  %S )r   r   r  r   )rC   r   rJ   )r   r   rQ   s     r?   r^  zD_ConvertBytecodeToConcrete.concrete_instructions.<locals>.<listcomp>  sL        !" * 'T5Fr5J5S    rA   r   Fz?Found some manual CACHE opcode but less than expected. Missing z CACHE opcodes.rX   rc  r   r  r}   zGot z, expected a strr  rb  )Dr(   r   r   r6   r;   r&   ro   r   rM   rU  r<   re  r   	itertoolschainrL   r  RuntimeErrorr  r   r   r   r+   rq   rz  r,   rI   r.   r   r   r   r   r  r/   rB  r   rJ   rg  r  rh  r   rC   r   r!   r   ry   r%   r   ri  r   r   r   r$   r   r   rj  rk  r#   	_get_maskr;  r5   r   r)   r*   ry  r4   rg   	enumerate)rQ   rJ   cell_instrsfree_instrsbinstrpargr   rB  
instr_namerS   rM   is_jumpr  r  
arg1_index
arg2_indexn1n2ru  ry   shared_name_indexesn_shared
n_unsharedr   rL   free_offsets   `                         r?   concrete_instructionsz0_ConvertBytecodeToConcrete.concrete_instructions  sh
    !;T4NN "$!#
  	6- 6 6fe,, 6CS1S1S%fj%88888 &
 6 6)$444445555 _T]TF;; m	. m	.E %'' EJ',A,A+ W&'UVVV)-&$$)$$$% -  %,,    &+4+?%@%@	     ,-D(-2D**&I#'#7I I I  
 }%'' %():%;%;E"%++ (tT4HH%** (5555 9L)**Aq%2CUEU9 9.u5  %(( 6u{C %((9$:$:Q$>!eU+++++~U**u~/I >J]F)CG#u%% Z7+++s++7+++---"3..HHMM&s1vs33 *&s1vs33 *M4
 "&$-Q!@!@J!%$-Q!@!@J!B*r//!<V!DB"/J"R"R"R)00999%'
 *!+qJ > 9z#w77 9&&s4+<'='=>>> M288BBEE 9z#w77 9&&s4+<'='=>>> M288BBEE%c3///// HHT]C88EE7?**_,,"3..HHMM&s1vt44 *M *M5 "#a&#.. * $SV < <#C55 * #C)c))uAKK5A:6EE///"3..HHMM&s1vt44 *&s1vt44 * 's1vs33 *M 	 *M4 !HHTZQ88EAKK!c#a&kk/9UaZHEE%c3//MM1M1M1M1MMM/ HHTZ55EE7?**c7++ C&&s4+<'='=>>> M288BBEE%c733333&&s4+<'='=>>> M288BBEE7---c7++ *  *MMOO #	F 2q8:"y2~/   * #39> B #	9$$cL,#?@@ &IE!#s+++++ $JIIIG L
!!3t'8#9#95'"JKKK  /'.'@'@'B'B$).&$$W----  	624HJ$T]%;<< $ $44=((-1]-@-@-F-F'*MHH-0-?-?*-L'*!OJJ$ ? ?+E21'+>dm,,s4=3I/J/JJXUKKdm455K  	' 	'E'.GKK;&KKK	' 	'rA   c                    g }g }d}| j         D ][}|                    |           |t          r|j        dz  dz
  n	|j        dz
  z  }|                    |           |t          rdndz  }\|                    |           d}| j        D ]\  }}}| j        |         }||         }	||         |                                z   }
|                                r|	|
t          r
|j        dz  n|j        z   z  }	n2|                                r|
t          r
|j        dz  n|j        z   |	z
  }	|j        }|	|_	        |j        |k    rd}|r|S | j
                                        D ]c\  }}||j                 |_        ||j                 |_        |j        }t          |t                     sJ | j        |         }||         }	|	|_        ddS )Nr   rX   rw   FT)r   r   rf   r\   ry  rz  rg   rh   ri   rM   r  rm  r   r   r   r;   r+   )rQ   label_offsetsinstruction_offsetsru   r   modifiedry   r  target_indextarget_offsetrd   old_sizer  rB  lbs                  r?   compute_jumpsz(_ConvertBytecodeToConcrete.compute_jumps  s,     & 		8 		8E  ((( )>Tq1$$UZRS^F  &&v...07aaa7FFV$$$ #': 	  	 E5%;u-L),7M )/%2I2I2K2KKL((** 	'<LEJ!OO%*"  ++--  *?OuzQUZQ#$  zH%EIzX%%  	O 7==?? 	) 	)IB "5U5G!HE 3E4E FE Bb%(((((;r?L),7M(ELLurA   Tcompute_jumps_passesrN  c           
         t           rU|rSt          j                            | j                  }|                    d           |                                | _        || j        }| j        j        }|t          ur| 
                    |           | j                            | j        j                   |                                  t          d|          D ]}|                                 }|s nt#          d|z            t%          | j        t)          | j                  t)          | j                  | j        t/          | j                                                            }|                    | j                   |S )NTrQ  r   z2compute_jumps() failed to converge after %d passesr   )r4   rH  rI  rJ  r   rK  rG  _compute_jumps_passesr=   r   r  r   r   rr  r  r   r  r  r   r   rU  r  r   r   r  valuesr   )rQ   r  rN  rL  r>   r   r  concretes           r?   rR  z/_ConvertBytecodeToConcrete.to_concrete_bytecode  s   
  	.3 	.,::4=IIC!!!FFFOO--DM'#'#= m-e##NN;'''T]3444""$$$q.// 	 	A))++H   46  
 $)**
##] !?!F!F!H!HII
 
 
 	  ///rA   )r9   N)NT)r   r   r   r  rH  rn  rP   r   r   r  r  r   r<   re  r  r   r  r	   r   rR  r   rA   r?   r  r    s       
 &Y/ &D & & & &$s s     49 C C    \^' ^' ^' ^'@At A A A AJ /3/3& &&sm& )-& 
	& & & & & &rA   r  )Lr   ro  r  rS   ro   r   r   rS  typingr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   rH  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/   r0   r1   r2   bytecode.utilsr3   r4   r5   r6   rf   BaseBytecoder@   rB   r   rC   r   _BaseBytecodeListr   r  r   rA   r?   <module>r     s   



           



                              "     ( ( ( ( ( (# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #H 6 5 5 5 5 5 5 5 5 5 5 5
  %/ % %d % % % % GC'''w w w w wIcN w w wt4
 4
 4
 4
 4
 4
 4
 4
nL L L L Ly25	9Q3RS L L L^t t t t t t t t t trA   