
    uYf                        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.m/Z/m0Z0m1Z1 ejd                  dk\  Z3dejh                  deddfd	Z5 ed
d      Z6 G d de"e7         Z8 G d d      Z9 G d dejt                  ee8e,f            Z; G d d      Z<y)    N)AnyDictIterableIteratorListMutableSequenceOptionalSequenceSetTupleTypeTypeVarUnion)CompilerFlags)_UNSETBITFLAG2_INSTRUCTIONSBITFLAG_INSTRUCTIONS	INTRINSICINTRINSIC_1OPINTRINSIC_2OPPLACEHOLDER_LABELUNSET	BaseInstrCellVarCompareFreeVarInstrInstrArgInstrLocationIntrinsic1OpIntrinsic2OpLabel	SetLinenoTryBeginTryEnd_check_arg_int	const_keyopcode_has_argument   
   codeconstsreturnc                 H    |sy |d   }t        |t              s||| _        y y )Nr   )
isinstancestr	docstring)r,   r-   first_consts      Q/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/bytecode/concrete.py_set_docstringr5   ;   s,    )K+s#{':$ (;    TConcreteInstr)boundc                   2    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 )r8   z{Concrete instruction.

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

    It has a read-only size attribute.

    _arg)_size_extended_argsN)linenolocationextended_argsnameargr>   r?   r@   c                :    || _         t        | 	  ||||       y )N)r>   r?   )r=   super__init__)selfrA   rB   r>   r?   r@   	__class__s         r4   rE   zConcreteInstr.__init__T   s#     ,s6HEr6   opcoder.   c                     t        |      r#|t        u rt        d|z        t        ||       y |dk(  r|t        ur|nd}t        ||       y |t        urt        d|z        y )Nz!operation %s requires an argumentr   zoperation %s has no argument)r(   r   
ValueErrorr&   )rF   rA   rH   rB   s       r4   
_check_argzConcreteInstr._check_argc   si    v&e| !Dt!KLL3%q[E)#qC3%% !?$!FGG  r6   c                     t         |   ||       d}|t        ur|dkD  r|dz  }|dz  }|dkD  r| j                  dd| j                  z  z   }|| _        y )N         )rD   _setr   r=   r<   )rF   rA   rB   sizerG   s       r4   rP   zConcreteInstr._setq   sl    
 	T3e*		 * *q4....D
r6   c                     | j                   S N)r<   rF   s    r4   rQ   zConcreteInstr.size   s    zzr6   c                 H    | j                   | j                  | j                  fS rS   )	_location_namer;   rT   s    r4   _cmp_keyzConcreteInstr._cmp_key   s    

DII66r6   instr_offsetc                 (   t         r| j                  dz  n| j                  | j                         z   }| j                         r||z   | j                  z   S | j                         r||z   | j                  z
  S | j                         r| j                  S y )NrM   )OFFSET_AS_INSTRUCTIONr<   use_cache_opcodesis_forward_rel_jumpr;   is_backward_rel_jumpis_abs_jump)rF   rY   ss      r4   get_jump_targetzConcreteInstr.get_jump_target   s     "7TZZ1_DJJ""$% ##%!#dii//$$&!#dii//99r6   c                    | j                   t        u rt        | j                  df      S | j                   }| j                  |dz  g}|dkD  r#|dz  }t        j                  |dz  g|d d |dkD  r#| j
                  rFt        |      | j                  k  r.t        j                  dg|d d t        |      | j                  k  r.t        |      S )Nr   rN   rO   )r;   r   bytes_opcodeEXTENDED_ARGr=   lenr<   )rF   rB   bs      r4   assemblezConcreteInstr.assemble   s    99$,,*++ii\\3:&DjAIC))3:6AbqE Dj a&4::% --t4"1 a&4::% Qxr6   clsr,   offsetc                     t         rd|z  n|}||   }t        |      r	||dz      }nt        }t        j                  |   } | |||      S )NrM      )r>   )r[   r(   r   rd   opname)ri   r>   r,   rj   indexoprB   rA   s           r4   disassemblezConcreteInstr.disassemble   sO    3F
%[r"uqy/CC~~b!4V,,r6   c                 f    t         j                  dk\  rt        j                  | j                     S dS )Nr*      r   )sysversion_infodis_inline_cache_entriesrd   rT   s    r4   r\   zConcreteInstr.use_cache_opcodes   s5     7* %%dll3	
 		
r6   )__name__
__module____qualname____doc__int__annotations__	__slots__r   r1   r   r   r	   r   rE   rK   rP   propertyrQ   r   rX   ra   rc   rh   classmethodr   r7   rp   r\   __classcell__rG   s   @r4   r8   r8   F   sh    I+I
 F
 ,1,0'+FF F
 c4'(F =)F  }FHs HC Hc Hd H  
	 c  7% 7c AB 7C HSM "%   -a -(3- -u -c -VW - -
3 
r6   c                   t    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
y	)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   r.   Nc                 J    || _         || _        || _        || _        || _        y rS   r   )rF   r   r   r   r   r   s         r4   rE   zExceptionTableEntry.__init__   s*     )&&$r6   c           
          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   rT   s    r4   __repr__zExceptionTableEntry.__repr__   s\     --. /++, -kk] #++, -//*,	
r6   )rx   ry   rz   r{   r|   r}   boolr~   rE   r1   r    r6   r4   r   r      s~     
  K
  VI%% % 	%
 % % 
%
# 
r6   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j2                  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j2                  fd=Z2	 	 dDd>ed?ed
e3jh                  fd@Z5 xZ6S )EConcreteBytecoder-   namesvarnamesexception_tabler   Nr-   r   r   r   .c                    t         |           t        |      | _        t        |      | _        t        |      | _        |xs g | _        |D ]  }| j                  |        | j                  |       y rS   )	rD   rE   listr-   r   r   r   _check_instrextend)rF   instructionsr-   r   r   r   instrrG   s          r4   rE   zConcreteBytecode.__init__  sg     	6l%[
X.4"! 	%Ee$	%L!r6   r.   c              #   b   K   t         |          }|D ]  }| j                  |       |  y wrS   )rD   __iter__r   )rF   r   r   rG   s      r4   r   zConcreteBytecode.__iter__  s6     w')! 	Ee$K	s   ,/r   c                 r    t        |t        t        f      s!t        dt	        |      j
                  z        y )NzXConcreteBytecode must only contain ConcreteInstr and SetLineno objects, but %s was found)r0   r8   r#   rJ   typerx   )rF   r   s     r4   r   zConcreteBytecode._check_instr  s:    %-!;<#%)%[%9%9:  =r6   c                     t         |   |       t        |t              r4|j                  | _        |j
                  | _        |j                  | _        y y rS   )rD   _copy_attr_fromr0   r   r-   r   r   )rF   bytecoderG   s     r4   r   z ConcreteBytecode._copy_attr_from"  sC    )h 01"//DK!DJ$--DM 2r6   c                     dt        |       z  S )Nz<ConcreteBytecode instr#=%s>)rf   rT   s    r4   r   zConcreteBytecode.__repr__)  s    -D	99r6   otherc                 P   t        |       t        |      uryt        t        t        | j                              }t        t        t        |j                              }||k7  ry| j
                  |j
                  k7  ry| j                  |j                  k7  ryt        | !  |      S )NF)	r   r   mapr'   r-   r   r   rD   __eq__)rF   r   const_keys1const_keys2rG   s       r4   r   zConcreteBytecode.__eq__,  s    :T%[(3y$++673y%,,78+%::$==ENN*w~e$$r6   F)extended_argr,   r   c          
         t         j                  dk\  rt        j                  | d      D cg c]d  }t	        |j
                  |j                  |j                  dz  nt        |j                  rt        j                  |j                        nd       f }}nt         j                  dk\  r!t        d | j                         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%                  || j                   |      }|j'                  |       |t"        r|j(                  d	z  n|j(                  z  }|t        | j                         t"        rd	nd
z  k  rt+               }	|s|	j-                  |       | j.                  |	_        | j2                  |	_        t7        | j8                        |	_        | j<                  |	_        | j@                  |	_!        | jD                  |	_#        | j                  |	_$        tK        | jL                        |	_'        tK        | jP                        |	_)        tK        | jT                        |	_+        tK        | jX                        |	_-        tK        | j\                        |	_/        ta        |	| jP                         t         j                  dk\  r2|	jc                  | jd                        |	_3        | jh                  |	_5        n|	jj                  |	_5        ||	d d  |	S c c}w )Nrr   T)show_caches   r?   r)   c              3   ,   K   | ]  \  }}}||f  y wrS   r   ).0rj   _r>   s       r4   	<genexpr>z-ConcreteBytecode.from_code.<locals>.<genexpr>R  s       #):FVV$#s   r   rM   rl   )6rt   ru   rv   get_instructionsr8   rm   rB   r   	positionsr   from_positionsdictco_linesfindlinestartsco_firstlinenorf   co_coder[   rp   appendrQ   r   _remove_extended_argsco_namerA   co_filenamefilenamer   co_flagsflagsco_argcountargcountco_posonlyargcountposonlyargcountco_kwonlyargcountkwonlyargcountfirst_linenor   co_namesr   	co_constsr-   co_varnamesr   co_freevarsfreevarsco_cellvarscellvarsr5   _parse_exception_tableco_exceptiontabler   co_qualnamequalname)
r,   r   ir   line_startsrj   r>   
lineno_offr   r   s
             r4   	from_codezConcreteBytecode.from_code<  s    w& --dE  HH#$55#4AEECK%{{ +99!++FL  7*" #>Bmmo#  #3#5#5d#;< LF$($7$7FC-7L!RSTU-Ba&j
,(4F%11&$,,O##E*/D5::?%**T C-7L!RSTU $% **<8 ,,&t}}5 ,,#'#:#: "&"8"8 $ 3 3dmm,t~~. !1!12 !1!12 !1!12x0w&'/'F'F&&(H$ !% 0 0H ( 1 1H"Gs   A)Mr   r   c              #   |   K   |}| D ]1  }|j                   }|
|t        ur|}t        |t              s,||f 3 y wrS   )r>   r   r0   r8   )r   r   r>   r   i_linenos        r4   _normalize_linenoz"ConcreteBytecode._normalize_lineno  sO       " 	&E||H #(=!%/uo%	&s   0<	<c                 F   d}g }g }| j                  | | j                        D ]j  \  }}|j                  |j                                |j                  }|j                  t
        r|dz  n||||j                  f       |t
        r|dz  n|z  }l dj                  |      |fS )Nr   rM   r6   )r   r   r   rh   rQ   r[   r?   join)rF   rj   code_strlinenosr>   r   i_sizes          r4   _assemble_codezConcreteBytecode._assemble_code  s     !33D$:K:KL 	IMFEOOENN,-ZZFNN$9VaZvNN	 '<v{&HF	I "G,,r6   r   c                    g }d}| }|D ]  \  }}}}||z
  }|dk(  r|}||z
  }	|}|	dkD  r|j                  d       |	dz  }	|	dkD  r|dk  r3|j                  t        j                  d|	d             d}	|dz  }|dk  r3|dkD  r3|j                  t        j                  d|	d             d}	|dz  }|dkD  r3d|	cxk  rdk  sJ  J d|cxk  rdk  sJ  J |j                  t        j                  d|	|              dj                  |      S )Nr   rN   s    Bb   r6   )r   structpackr   )
r   r   lnotab
old_offset
old_linenorj   r   r>   dlinenodoffs
             r4   _assemble_lnotabz!ConcreteBytecode._assemble_lnotab  sH    
!
$+ 	< FAvqz)G!|JJ&DJ*k* * D.fkk$d;<4 D.
 C-fkk$c:;3 C-
 ######7)c)))))MM&++dD':;5	<8 xxr6   	linetabler   r   c                 `   |||dk  r1| j                  t        j                  ddd             |dz  }|dk  r1|dkD  r1| j                  t        j                  ddd             |dz  }|dkD  r1d|cxk  rdk  sJ  J d}|dkD  rs| j                  t        j                  dd|             |dz  }|dkD  r| j                  d       |dz  }|dkD  r| j                  t        j                  d|d             n&| j                  t        j                  d||             d|cxk  rdk  sJ  J y )Nir   r   r   r      s    )r   r   r   )r   r   r   s      r4   _pack_linetablez ConcreteBytecode._pack_linetable  s=     D.  T1d!;<4 D. C-  T1c!:;3 C- 7)c)))))G #:V[[sG<=CKD*  - * V[[tQ78 V[[tW=>DCr6   c                    |syg }d}t        |      }t        |      \  }}}}	|	|	j                  |	j                  |z
  nd }
n||z
  }
|D ]T  \  }}}}||j                  |j                  |z
  nd }n||z
  }|dk(  s|
|7|}||z
  }|}| j                  |||
       |}
V ||z   |z
  }| j                  |||
       dj	                  |      S )Nr6   r   )iternextr>   r   r   )rF   r   r   r   r   iter_inrj   r   r   old_locationold_dlinenor>   r?   r   r   s                  r4   _assemble_linestablez%ConcreteBytecode._assemble_linestable  s"   
 !#	
w-37=0
L#  &&2 ##l2  %|3K07 	",FFFH#  2 OOj0  !:-!| 3JJ&DJ  D+>!K%	"* +Yk:xx	""r6   varintc                 r    t               }	 |j                  | dz         | dz  } | r|dxx   dz  cc<   n	 |S -)N?      @   )	bytearrayr   )r   encodeds     r4   _encode_location_varintz(ConcreteBytecode._encode_location_varint.  sC    +NN6D=)qLFt# r6   svarintc                 d    |dk  r| j                  | dz  dz        S | j                  |dz        S )Nr   rl   )r   )rF   r  s     r4   _encode_location_svarintz)ConcreteBytecode._encode_location_svarint;  s:    Q;//7(qA0EFF//1==r6   rQ   c                 0    d| dz  z   |dk  r|dz
  z   S dz   S )N   r*   rO   rl      r   )r,   rQ   s     r4   _pack_location_headerz&ConcreteBytecode._pack_location_headerB  s(    419%TQYFFAFFr6   r>   r?   c                    t               }||d d d f\  }}}}n3|j                  |j                  |j                  |j                  f\  }}}}|#|j                  | j                  d|             |S |Q|||k7  rt        d| d|       |j                  | j                  d|      g| j                  ||z
               |S |J |J ||k(  rI||z
  dk(  rA|dk  r<||z
  dk  r4|j                  | j                  |dz  |      |dz  dz  ||z
  z   f       |S ||k(  r=||z
  d	v r6|d
k  r1|d
k  r,|j                  | j                  d|z   |z
  |      ||f       |S |j                  | j                  d|      g| j                  ||z
        | j                  ||z
        | j                  |dz         | j                  |dz                |S )N   zMAn instruction cannot have no column offset and span multiple lines (lineno: z, end lineno:    r   H   rO      )rl   rM   r   r+      rl   )r   r>   
end_lineno
col_offsetend_col_offsetr   r  rJ   r   r  r   )	rF   rQ   r>   r?   packedl_linenor  r  r  s	            r4   _pack_locationzConcreteBytecode._pack_locationF  s     	@<Hj*n ####''	@<Hj*n MM$44R>?@ { %**@ //7jzlT  MM..r48228f3DEn ] )))!--- h&v%*O#j0R722:?DI$q.Q.>J3NOH 7 h&v%/$"S(222=63I4P"&,  222t<66x&7HI 55j86KL 55j1nE 55nq6HI
 r6   	locationsc                     |dz  }	 |j                  | j                  |||             |j                  |j                  n|}|dz  }|dk  r	 |S J)NrM   rO   rl   )r   r  r>   )rF   r  rQ   r>   r?   s        r4   _push_locationsz ConcreteBytecode._push_locations  sb     	

 T00vxHI )1(CX__FAIDax r6   c                 N   |syg }t        |      }t        |      \  }}}}|xs t        |d d d       }|}|D ]H  \  }}	}
}|xs t        |
d d d       }|j                  r||k(  r||	z  }1| j	                  ||||      }|	}|}J | j	                  ||||       dj                  |      S )Nr6   )r   r   r   r>   r  r   )rF   r   r   r  r   r   rQ   r>   r   r   
new_linenor?   s               r4   _assemble_locationsz$ConcreteBytecode._assemble_locations  s    
 %'	w-(,W%4#N}VT4'N 07 	$+Avz8N=T4#NH ""|x'?)))T6<PFD#L	$ 	YflCxx	""r6   c                    d}d }d}|t        |       k  r| |   }t        |t              r|dz  })|j                  dk(  r*|dz  }||dz  |j                  z   }n|j                  }| |= b|S|j                  dk(  rt
        n|dz  |j                  z   }d }t        |j                  ||j                  |      }|| |<   d}|dz  }|t        |       k  r|t        d      y )Nr   rl   re   rO   NOP)r?   r@   z#EXTENDED_ARG at the end of the code)	rf   r0   r#   rA   rB   r   r8   r?   rJ   )r   nb_extended_argsr   rn   r   rB   s         r4   r   z&ConcreteBytecode._remove_extended_args  s    c,'' 'E %+
zz^+ A% +$0A$5#BL#(99L ''$zzU2e9Jeii8W#%JJ"^^"2	 ',U##$ QJE? c,''B #BCC $r6   except_table_iteratorc                 l    t        |       }|dz  }|dz  r|dz  }t        |       }||dz  z  }|dz  r|S )Nr   r   r   )r   )r  rg   vals      r4   _parse_varintzConcreteBytecode._parse_varint  sN    &'"f"fAIC*+A1r6MC "f 
r6   c           	      h   t         j                  dk\  sJ g }t        |      }	 	 | j                  |      }| j                  |      }||z   dz
  }| j                  |      }| j                  |      }|dz	  }	t	        |dz        }
|j                  t        ||||	|
             ~# t        $ r |cY S w xY w)Nrr   rl   )rt   ru   r   r   r   r   r   StopIteration)rF   r   tableiteratorstartlengthendr   dldepthlastis              r4   r   z'ConcreteBytecode._parse_exception_table  s     7***(	**84++H5fnq(++H5''1aR!V0VUERS   	L	s   A?B# #B10B1valueset_begin_markerc                     g }| dk\  sJ | r#|j                  | dz  |rdndz         | dz  } | r#|xs dg}|r|dxx   dz  cc<   t        |      S )Nr   r   r   r   r   r  )r   reversed)r+  r,  temps      r4   _encode_varintzConcreteBytecode._encode_varint,  sf     zzKK
Dba89aKE  {sHOH~r6   c                    t               }| j                  xs g D ]  }|j                  |j                  z
  dz   }|j                  dz  |j
                  z   }|j                  | j                  |j                  d             |j                  | j                  |             |j                  | j                  |j                               |j                  | j                  |              t        |      S )Nrl   T)
r   r   r   r   r   r   r   r0  r   rc   )rF   r#  entryrQ   r)  s        r4   _assemble_exception_tablez*ConcreteBytecode._assemble_exception_table:  s    ))/R 	5E$$u'9'99A=D&&!+u/?/??ELL,,U-?-?FGLL,,T23LL,,U\\:;LL,,U34	5 U|r6   Tcheck_pre_and_postr5  c                    | j                         }t        j                  j                  |      }|j	                  |      S )Nr4  )to_bytecode	_bytecodeControlFlowGraphfrom_bytecodecompute_stacksize)rF   r5  r   cfgs       r4   r;  z"ConcreteBytecode.compute_stacksizeF  s;    ##%((66x@$$8J$KKr6   r5  compute_exception_stack_depths	stacksizer>  c                   |t         j                  dk\  rb|r`t        j                  j	                  | j                               }|j                  ||      }|j                         j                  d      } | j                         \  }}t         j                  dk\  r| j                  | j                  |      nJt         j                  dk\  r| j                  | j                  |      n| j                  | j                  |      }t        | j                        }t         j                  dk\  rt        j                   | j"                  | j$                  | j&                  ||t)        | j*                        |t-        | j.                        t-        | j0                        t-        | j                        | j2                  | j4                  | j6                  | j                  || j9                         t-        | j:                        t-        | j<                              S t        j                   | j"                  | j$                  | j&                  ||t)        | j*                        |t-        | j.                        t-        | j0                        t-        | j                        | j2                  | j4                  | j                  |t-        | j:                        t-        | j<                              S )Nrr   r=  Fr>  r)   )rt   ru   r8  r9  r:  r7  r;  to_concrete_bytecoder   r  r   r   r   rf   r   typesCodeTyper   r   r   r|   r   tupler-   r   r   rA   r   r3  r   r   )	rF   r?  r5  r>  r<  r   r   r   nlocalss	            r4   to_codezConcreteBytecode.to_codeK  sQ    ',J,,::4;K;K;MNC--#5/M . I ??$99/4 : D
 !//1' 7* $$T%6%6@ ##w. ))$*;*;WE**4+<+<gF 	 dmm$w&>>$$##DJJdkk"djj!dmm$		!!..0dmm$dmm$% * >>$$##DJJdkk"djj!dmm$		!!dmm$dmm$! r6   prune_caches#conserve_exception_block_stackdepthc                 b   | d d  }| j                  |       t               }d}|D ][  }t        |t              r|j	                  |      }||j                  |       |t        r|j                  dz  n|j                  z  }] | j                  D ]  }|j                  |j                          i }	i }
| j                  D ]L  }|j                  |	vsJ ||	|j                  <   |
j                  |j                  g       j                  |       N g }g }i }i }d}t        j                  dk\  rB| j                   | j"                  D cg c]  }|| j                   vs| c}z   }t%        |      }n!t%        | j"                        }| j"                  }| j'                  || j(                        D ]G  \  }}||v r t+               }|||<   |j                  |       ||	v rL|	|   }t-        t+               |j.                  |r|j0                  nt2              }|||<   |j                  |       |j	                  |      }|j                  }|t        r|dz  dz
  n|dz
  z  }|}|t        rdndz  }|r|j4                  dk(  r|?J |j6                  }|j8                  t:        j<                  v r| j>                  |   }n|j8                  t:        j@                  v r| j                   |   }nn|j8                  t:        jB                  v r|j4                  tD        v r"tG        |dz        | jH                  |dz	     f}n|j4                  tJ        v r.tG        |dz        tG        |dz        | jH                  |dz	     f}n| jH                  |   }n|j8                  t:        jL                  v r4||k  r||   }tO        |      }n| jP                  ||z
     }tS        |      }n~|j8                  t:        jT                  v r$tW        t        j                  dk\  r|dz	  n|      }n>|j8                  tX        v rt[        |      }n |j8                  t\        v rt_        |      }n|}|j`                  xs tc        |d d d       }|$td        }t%        |      }|j                  ||f       |j                  tg        |j4                  ||             ||
v s|
|   }ti        |      D ]  }|j                  tk        ||                ! J |D ]8  \  }}||   } t        | tf              r| j6                  td        u sJ ||   | _        : |jm                         D ]  \  }}!||j                     |!_	         to        jp                         }"|"js                  |        |"jt                  |"jv                  z   }#|#|"jx                  z  }#|"jz                  t|        j~                  z  r|#dz  }#|"jz                  t|        j                  z  r|#dz  }#| j                   d |# |"_A        t        |"| j>                         |"j                  |       |"S c c}w )	Nr   rM   rr   rl   CACHEr*      r  r   )Dr   setr0   r#   ra   addr[   rQ   r   r   r   
setdefaultr   r   rt   ru   r   r   rf   r   r   r"   r$   r   r   r   rA   rB   rH   rd   hasconstr-   haslocalhasnamer   r   r   r   hasfreer   r   r   
hascomparer   r   r    r   r!   r?   r   r   r   r.  r%   itemsr8  Bytecoder   r   r   r   r   inspect
CO_VARARGSCO_VARKEYWORDSargnamesr5   r   )$rF   rH  rI  c_instructionsjump_targetsrj   c_instrr   ex_entryex_startex_endr2  jumpsr   labels	tb_instrsncells_lookupncellsr>   labeltb_instrjump_targetrQ   current_instr_offsetc_argrB   rA   r?   instr_indexentriesrn   r   tbr   nargss$                                       r4   r7  zConcreteBytecode.to_bytecode  s    a"">2 "%% 	UG'9-,,V4F!  (-Bw||q(TF	U ,, 	.HX__-	. 4679)) 	CE %%X555+0HU''(e//4;;EB	C (*OQ9;	 w&====,AT]],B, L &F'F==L#55D-- 
 U	BOFG %!&v##E* ! (#G$$)LE%%RW $,	% ##H-!11&9K<<D )>tqy1}TAXNF#) 0aa7F
  7"***  >>W%5%55++e,C^^w'7'77--.C^^w6||';;#EAI

5A:0FG )>>#EAIUQYEUVJAWX"jj/^^w6v~+E2%dm#}}UV^<%dm^^w'9'99!(+(8(8G(C!C ^^}4&u-C^^}4&u-CC"++V}VT4QU/V*+C"%l"3KLL+{!;<##E',,h$OP $v- !56%g. BE ''y/?(@ABiU	Bp #( 	,E; 'EeU+		=N0NNN{+EI		, #* 	-IE2u||,BI	- %%'  &!!H$;$;;)))>>G...QJE>>G222QJE MM&51x-%o,s   X,X,)r   )FrS   )TF)7rx   ry   rz   r   r}   r1   r   rE  r   r   r	   rE   r   r   r8   r#   r   r   r   r   r   r   r   staticmethodrC  rD  r   r
   r|   r   rc   r   r   r   r   r   r   r   r  r  r  r  r  r   r   r   r   r0  r3  r;  rG  r8  rW  r7  r   r   s   @r4   r   r      s   L 9 3i
 -.. " !#"$?C" 	"
 S#X" 3-" "$':";<"$(5	)A#BC # $ .:# :%C %D %  6;JnnJ/3J	J JX &u]I%=>?&OR&	%]*+	,& &"-	ud5c30G!GHII	J-, " " $(sCh}>U/U)V$W" 	"  " H " ;" &)" 4<SM" 	"  " J/#/# %S#x/F FGH/# 
	/#d 
 
	 
 
> >	 > GC Gs Gs G GXX!$X080GX	Xt	?  	
   
0#### %S#x/F FGH## 
	##J .D%eI},D&EF.D	.D .Db Xc] s  $	!	"& c T hsm  
5 
 ?C Lt Ls L $(J $(/3JC=J !	J
 )-J 
J\ "49nn .2n 
			nr6   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y)_ConvertBytecodeToConcreter+   r,   r.   Nc                     t        |t        j                        sJ || _        g | _        g | _        i | _        i | _        d| _        d| _	        i | _
        g | _        g | _        g | _        y )Nr   F)r0   r8  rW  r   r   rb  rc  exception_handling_blocksrequired_cachesseen_manual_cacheconsts_indicesconsts_listr   r   )rF   r,   s     r4   rE   z#_ConvertBytecodeToConcrete.__init__O  sq    $	 2 2333 24=?
(*NP& !& JL&( "
#%r6   r+  c                     t        |      }|| j                  v r| j                  |   S t        | j                        }|| j                  |<   | j                  j	                  |       |S rS   )r'   rx  rf   ry  r   )rF   r+  keyrn   s       r4   	add_constz$_ConvertBytecodeToConcrete.add_consta  sd    $%%%&&s++D''(#(C &r6   r   rA   c                     	 | j                  |      }|S # t        $ r  t        |       }| j                  |       Y |S w xY wrS   )rn   rJ   rf   r   )r   rA   rn   s      r4   rO  z_ConvertBytecodeToConcrete.addj  sG    	KK%E   	JELL	s    %>>c                 n   | j                   j                  }g }g }| j                   D ]  }t        |t              rC|j                  dk(  r4| j
                  st        d      d| _        | xj
                  dz  c_        n| j
                  r| j                  sn| j                  j                  t        | j
                        D cg c]'  }t        dd| j                  d   j                        ) c}       d| _        d| _        nt        d	| j
                   d
      t        |t              r$t        | j                        | j                  |<   *t        |t               r|j"                  }Ht        |t$              rY|j&                  t(        usJ t+        t        | j                        dd|j&                  |j,                        | j.                  |<   t        |t0              r8| j.                  |j2                     }t        | j                        dz
  |_        t        |t              sJ |j"                  t(        ur|j"                  |j"                  }n|j"                  t(        u r||_        |j6                  }d}t        |t              r|}	d}d}n|j8                  t:        j<                  v r| j?                  |      }ns|j8                  t:        j@                  v r0t        |tB              sJ | jE                  | jF                  |      }n'|j8                  t:        jH                  v r|j                  tJ        v rt        |tL              r4t        |      dk(  r&t        |d   tN              rt        |d   tB              sJ |       | jE                  | jP                  |d         }
tS        |d         |
dz  z   }nx|j                  tT        v rt        |tL              rGt        |      dk(  r9t        |d   tN              r&t        |d   tN              rt        |d   tB              sJ |       | jE                  | jP                  |d         }
tS        |d         dtS        |d         z  z   |
dz  z   }nt        |tB              sJ d| d       | jE                  | jP                  |      }n|j8                  t:        jV                  v rt        |tX              rU|j[                  t        | j                               | j                   j\                  j_                  |j                        }nt        |t`              sJ |j[                  t        | j                               | j                   jb                  j_                  |j                        }n|j8                  t:        jd                  v rQt        |tf              ruth        jj                  dk\  r!|jm                         |jn                  dz  z   }nA|jn                  }n4|j8                  tp        v r"t        |tr        tt        f      r|jn                  }t        |tR              sJ t        |j                  ||j                        }|r1| jv                  j[                  t        | j                        	|f       th        jj                  dk\  r|jy                         | _        d| _        | j                  j[                  |        th        jj                  dk\  ri }d}d}t{        | j                   j\                        D ]W  \  }}|| jF                  v r$| jF                  j_                  |      ||<   |dz  }8t        | jF                        |z   ||<   |dz  }Y |D ]%  }
| j                  |
   }||j6                     |_        ' t        | jF                        t        | j                   j\                        z   |z
  }nt        | j                   j\                        }|D ]&  }
| j                  |
   }|xj6                  |z  c_        ( y c c}w )NrK  z,Found a CACHE opcode when none was expected.Trl   r   r   r   Fz9Found some manual opcode but less than expected. Missing z CACHE opcodes.rM   r*   zGot z, expected a strrL  r  rr   )>r   r   r0   r   rA   rv  RuntimeErrorrw  r   r   ranger8   r?   r"   rf   rc  r#   r>   r$   r   r   r   r   ru  r%   r2  r   rB   rH   rd   rQ  r|  rR  r1   rO  r   rS  r   rE  r   r   r|   r   rT  r   r   r   rn   r   r   rU  r   rt   ru   	_get_maskr+  r   r    r!   rb  r\   	enumerate)rF   r>   cell_instrsfree_instrsr   r   r2  rB   is_jumprh  rn   r^  shared_name_indexesn_shared
n_unsharedrA   free_offsets                    r4   concrete_instructionsz0_ConvertBytecodeToConcrete.concrete_instructionss  s   ++ "$!#]] D	.E %'EJJ',A++&'UVV)-&$$)$%%-- %%,,
 &+4+?+?%@	 !" * 'T5F5Fr5J5S5S ,-D(-2D*&##'#7#7"8I 
 %'%():):%;E"%+%*((555 9L))*Aq%2C2CUEUEU9..u5  %(66u{{C %((9(9$:Q$>!eU+++||5(U\\-E&%))CG#u%!1!11nnS)!1!11!#s+++hht}}c20::!55"3.HM&s1vt4&s1vs3	
 4
 !HHTZZQ8Ec!f+!4CZZ#88"3.HM&s1vt4&s1vt4&s1vs3 4 !HHTZZQ8Ec!f+CAK75A:FC%c3/M4u<L1MM/((4::s3C0c7+&&s4+<+<'=>--0066sxx@C%c7333&&s4+<+<'=>--0066sxx@C!3!33c7+ ''72!mmoa@!ii*cL,#?@))C c3'''#EJJennMG

!!3t'8'8#95'"JK 7*'.'@'@'B$).&$$W-ID	.T w&24HJ$T]]%;%;< $44==(-1]]-@-@-F'*MH-0-?*-L'*!OJ$ % ?++E21'++>? dmm,s4==3I3I/JJXUKdmm445K  	'E''.GKK;&K	'cs   ,`2
c                 
   g }g }d}t        | j                        D ]^  \  }}|j                  |       |t        r|j                  dz  dz
  n|j                  dz
  z  }|j                  |       |t        rdndz  }` |j                  |       d}| j
                  D ]  \  }}}| j                  |   }||   }	t        j                  dk\  r|j                  dv r|	dz  }	|j                         r-||   }
|	|
t        r|j                  dz  n|j                  z   z  }	n<|j                         r,||   }
|
t        r|j                  dz  n|j                  z   |	z
  }	|j                  }|	|_        |j                  |k7  sd} |r|S | j                  j                         D ]f  \  }}||j                     |_        ||j                      |_        |j"                  }t%        |t&              sJ | j                  |   }||   }	|	|_        h y)Nr   rM   rl   FrL  )FOR_ITERSENDT)r  r   r   r[   rQ   rb  rc  rt   ru   rA   r]   r^   rB   ru  rV  r   r   r   r0   r"   )rF   label_offsetsinstruction_offsetsrj   rn   r   modifiedrh  target_indextarget_offsetrY   old_sizero  r2  lbs                  r4   compute_jumpsz(_ConvertBytecodeToConcrete.compute_jumps  s)     %d&7&78 		8LE5  ( )>q1$UZZRS^F  &&v.0aa7F		8 	V$ #':: 	 E5%;;u-L),7M
 7*uzz=Q/Q"((*,U3'<EJJ!O%**"  ++-,U3 *?uzzQUZZQ#$  zzH%EIzzX%7	 > O 77==? 	)IB "5U5G5G!HE 3E4E4E FE Bb%(((;;r?L),7M(EL	) r6   compute_jumps_passesr>  c           
      @   t         j                  dk\  rR|rPt        j                  j	                  | j
                        }|j                  d       |j                         | _        || j                  }| j
                  j                  }|t        ur| j                  |       | j                  j                  | j
                  j                         | j                          t!        d|      D ]  }| j#                         }|r n t%        ddz   z        t'        | j(                  t+        | j,                        t+        | j.                        | j                  t1        | j2                  j5                                     }|j7                  | j
                         |S )Nrr   TrA  r   z2compute_jumps() failed to converge after %d passesrl   r   )rt   ru   r8  r9  r:  r   r;  r7  _compute_jumps_passesr2   r   r|  r   r   r[  r  r  r  r  r   r   rE  ry  r   r   ru  valuesr   )rF   r  r>  r<  r3   pasr  concretes           r4   rB  z/_ConvertBytecodeToConcrete.to_concrete_bytecodef  sX   
 w&+I,,::4==IC!!!FOO-DM'#'#=#= mm--e#NN;'T]]334""$01 	C))+H	
 G3QR7S  $))*

#]] !?!?!F!F!HI
 	  /r6   )r.   N)NT)rx   ry   rz   r  r8  rW  rE   r   r|   r|  rq  r   r1   rO  r  r   r  r	   r   rB  r   r6   r4   rs  rs  H  s    
 &Y// &D &$s s  49 C C  h'TGt GV /3/3%&sm% )-% 
	%r6   rs  )=rv   rX  rH   rd   r   rt   rC  typingr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r8  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(   ru   r[   BaseBytecoder5   r7   r|   r8   r   _BaseBytecodeListr   rs  r   r6   r4   <module>r     s    
    
    "  (      < ((G3 %// % %d % C's
IcN s
l4
 4
nRy225	9Q3RS RjC Cr6   