
    mh              
          d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZ d dlZd dlmZ d dlmZ d dlmZmZmZmZmZm Z  d dl!m"Z"m#Z#m$Z$  ed	d
          Z% edd          Z& G d d
ej'        eeeee f                            Z(d Z)e G d d                      Z* G d d          Z+ G d dej,                  Z-dS )    N)defaultdict)	dataclass)AnyDict	GeneratorIterableIteratorListOptionalSetSupportsIndexTupleTypeVarUnionoverload)ConcreteInstr)CompilerFlags)UNSETInstrLabel	SetLinenoTryBeginTryEnd)PY310PY311PY313T
BasicBlock)boundUControlFlowGraphc            	       F    e Zd Z	 ddeeeeeee	f                           ddf fdZ
deeeeee	f                  fdZededeeeee	f         fd            Zedededefd	            Z fd
Zdee         fdZdedef fdZdedefdZded          fdZdefdZ xZS )r   Ninstructionsreturnc                 `    d | _         |r#t                                          |           d S d S N)
next_blocksuper__init__)selfr#   	__class__s     7/usr/local/lib/python3.11/site-packages/bytecode/cfg.pyr)   zBasicBlock.__init__!   s<     37 	+GG\*****	+ 	+    c           	   #   >   K   d}|t                     k     r |         }|dz  }t          |t          t          t          t
          f          st          d|j        j        z            t          |t                    r|	                                r|t                     k     rEt           fdt          |t                               D                       rt          d          t          |j        t                    s't          dt          |j                  j                  t          |t                    rAt          |j        t                    s't          dt          |j                  j                  |V  |t                     k     d S d S )Nr      zJBasicBlock must only contain SetLineno and Instr objects, but %s was foundc              3   N   K   | ]}t          |         t                    V   d S r&   )
isinstancer   ).0ir*   s     r,   	<genexpr>z&BasicBlock.__iter__.<locals>.<genexpr>9   sB       - -34JtAw..- - - - - -r-   z8Only the last instruction of a basic block can be a jumpz%Jump target must a BasicBlock, got %sz)TryBegin target must a BasicBlock, got %s)lenr1   r   r   r   r   
ValueErrorr+   __name__has_jumpanyrangeargr   typetarget)r*   indexinstrs   `  r,   __iter__zBasicBlock.__iter__,   s     c$iiKEQJEei&%IJJ  ').)AB  
 %'' ENN,<,< 3t99$$ - - - -8=eSYY8O8O- - - * *$ %R   "%)Z88 $?UY0  
 %** !%,
;; $CU\**3  
 KKK? c$iir-   r>   c                     d S r&    r*   r>   s     r,   __getitem__zBasicBlock.__getitem__O   s	     58Cr-   r*   c                     d S r&   rB   rC   s     r,   rD   zBasicBlock.__getitem__T       14r-   c                     t                                          |          }t          |t                    r$ t	          |           |          }| j        |_        |S r&   )r(   rD   r1   slicer<   r'   )r*   r>   valuer+   s      r,   rD   zBasicBlock.__getitem__W   sP    ##E**eU## 	/DJJu%%E#Er-   c                 \    t          |           D ]}t          |t                    r|c S d S r&   )reversedr1   r   )r*   r?   s     r,   #get_last_non_artificial_instructionz.BasicBlock.get_last_non_artificial_instruction_   s>    d^^ 	 	E%''  tr-   c                      t          |           t                                                                }| j        |_        |S r&   )r<   r(   copyr'   )r*   newr+   s     r,   rN   zBasicBlock.copyf   s2    d4jj((
r-   first_linenoc                 d   g }d}|}t          |           D ]\  }}t          |t                    r|j        x}}|                    |           9t          |t
          t          f          rV|||_        `|j        t          u r||_        v|j        |j        }t          |          D ]}| |= |S )zFCheck that all the element of the list are valid and remove SetLineno.N)		enumerater1   r   linenoappendr   r   r   rK   )r*   rP   
lineno_pos
set_linenocurrent_linenoposr?   r3   s           r,   legalizezBasicBlock.legalizek   s    

%#D// 	. 	.JC%++ .3l:
^!!#&&&%(F!344 %)&&-)!&*%% 	 	AQr-   c                     | sd S |                                  }||                                sd S |j        }t          |t                    sJ |S r&   )rL   r8   r;   r1   r   )r*   
last_instrtarget_blocks      r,   get_jumpzBasicBlock.get_jump   s_     	4==??
Z%8%8%:%:4!~,
33333r-   c                     |dz   t          |           k     r=t          | |dz            x}t                    r|S |dz  }|dz   t          |           k     =d S Nr/   )r5   r1   r   )r*   r>   bs      r,   get_trailing_try_endzBasicBlock.get_trailing_try_end   sb    ai#d))##tEAI.!77 QJE ai#d))##
 tr-   r&   )r7   
__module____qualname__r   r   r   r   r   r   r   r)   r	   r@   r   r   rD   r   rH   rL   rN   intrY   r]   ra   __classcell__r+   s   @r,   r   r       s       
 		+ 	+U5)Xv=>?
	+
 
	+ 	+ 	+ 	+ 	+ 	+!(5	8V)K#LM ! ! ! !F 8"8	ui61	28 8 8 X8 4!4E4a444 X4    Xe_    1       
S S    4
(<0 
 
 
 
#        r-   c                     || z  }|dk     rd}t          |          ||z  }t          ||          }t          ||          }|||fS )Nr   z.Failed to compute stacksize, got negative size)RuntimeErrormaxmin)	pre_delta
post_deltasizemaxsizeminsizemsgs         r,   _update_sizerq      s]    IDaxx>3JD'4  G'4  G'!!r-   c                       e Zd ZU dZeed<   ee         ed<   eeee	ee
e         f                  f         ed<   ee         ed<   eeef         ed<   eeef         ed<   dS )	_StackSizeComputationStoragezMCommon storage shared by the computers involved in computing CFG stack usage.check_pre_and_postseen_blocksblocks_startsizes
try_beginsexception_block_startsizeexception_block_maxsizeN)r7   rb   rc   __doc__bool__annotations__r   rd   r   r   r   r
   r   rB   r-   r,   rs   rs      s         WW  S CU3+>%?!@@AAAA X
  $CH~---
 "#s(^+++++r-   rs   c                   p   e Zd ZU dZeed<   eed<   eed<   eed<   eed<   ee	         ed<   ee
         ed<   dedededededee	         dee
         d	d
fdZd	eed ef         ed
f         fdZee
         ed<   deded	d
fdZdede	d	eed ef         ed
f         fdZdedeeee	         f         d	e	fdZd
S )_StackSizeComputerz4Helper computing the stack usage for a single block.commonblockrm   rn   ro   exception_handlerpending_try_beginr$   Nc                 v    || _         || _        || _        || _        || _        || _        || _        || _        d S r&   )r   r   rm   rn   ro   r   r   _current_try_begin)r*   r   r   rm   rn   ro   r   r   s           r,   r)   z_StackSizeComputer.__init__   sE     
	!2!2"3r-   c              #   8
  K   t          | j                  }| j        | j        f}t          | j                  | j        j        v s|                     ||          s	| j        V  | j        j                            |           | j        j	        |                             |           | j        | 
                    dd| j        z              t          | j                  D ]\  }}t          |t                    rt          |t                    r<| j        J | j        j                            |           || _        | j        | _        mt          |t&                    rh|j        | j        urt          |j        j        t,                    sJ |                     |j        j        |j        j                  E d{V  d| _        |                                r| j        j        r|                    d          n|                    d          df}t          g || j        | j        | j        R  \  }}}t          |j        t,                    sJ t=          | j        |j        |||d|                                r| j                             |          rdn| j                  V }tC          | j        |          | _        |"                                r| j                             |          x}	r_|	j        | j        u rQt          |	j        j        t,                    sJ |                     |	j        j        |	j        j                  E d{V  | j        j        #                    t          | j                             | j        V  | j        j        r|                    d          n|                    d          df} | j
        |  |                                r| j                             |          x}	rQt          |	j        j        t,                    sJ |                     |	j        j        |	j        j                  E d{V  | j        j        #                    t          | j                             | j        V  | j        j$        r?t=          | j        | j        j$        | j        | j        | j        d| j                  V | _        | j        j        #                    t          | j                             | j        V  dS )z;Iterate over the block instructions to compute stack usage.Nr   r/   T)jumpF)%idr   rm   r   r   ru   "_is_stacksize_computation_relevantrn   addrv   rq   rR   r1   r   r   r   rw   rT   ro   r   entryr=   r   &_compute_exception_handler_stack_usage
push_lastir8   rt   pre_and_post_stack_effectstack_effectr;   r~   is_finalra   ri   is_uncond_jumpremover'   )
r*   block_idfingerprintr3   r?   effect
taken_sizern   ro   tes
             r,   runz_StackSizeComputer.run   s      dj>>
 y$"89dj>>T[44477+NN 5 , 	##H--- 	%h/33K@@@ !-aT%;!;<<< "$*-- x	# x	#HAu%)--  %** .666&--e444*/'#yE6**  ;d&=== "%+"4jAAAAAFFK&K*         +/' ~~ 3' {5<E333>>>,,$,77; 
 0< 00!Y0(,06:l0 0 0,
GW "%)Z88888 2KI ~~''1,0J,K,KA,N,N1DD0! !     #4<99 '')) ' #j==a@@@(d&===)"(/:FFFFF#'#N#NHOH/$ $       
 K+222dj>>BBB,&&&
 ;19//U/;;;((e(44a8 
 Dv&& ~~ # 88;;;2 %bhozBBBBB#JJ+          
 '..r$*~~>>>l""":  		!3
%	'" "  DL 	&&r$*~~666lr-   r   rk   rl   c                 |    t          ||| j        | j        | j                  \  }}}|| _        || _        || _        d S r&   )rq   rm   rn   ro   )r*   rk   rl   rm   rn   ro   s         r,   rq   z_StackSizeComputer._update_size  sD    !-z49dlDL"
 "
gw 	r-   r   c           	   #      K   t          |          }| j        | j        j        |         k     rPt	          | j        || j        | j        | j        |d           V }| j        | j        j        |<   || j        j        |<   d S d S r&   )r   ro   r   rx   r~   rn   ry   )r*   r   r   b_id
block_sizes        r,   r   z9_StackSizeComputer._compute_exception_handler_stack_usage  s       %yy<$+?EEE1     J ;?,DK1$78BDK/555 FEr-   r   r   c                     t           r|| j        j        |         vS | j        j        |         x}r#|d         t          d |D                       k    S dS )Nr   c              3   &   K   | ]}|d          V  dS )r   NrB   )r2   fs     r,   r4   zH_StackSizeComputer._is_stacksize_computation_relevant.<locals>.<genexpr>  s&      +@+@QAaD+@+@+@+@+@+@r-   T)r   r   rv   ri   )r*   r   r   sizess       r,   r   z5_StackSizeComputer._is_stacksize_computation_relevant  sg      	 dk&CH&MMM 5h??u "1~+@+@%+@+@+@(@(@@@tr-   )r7   rb   rc   rz   rs   r|   r   rd   r   r{   r   r)   r   r   r   rq   r   r   r   rB   r-   r,   r~   r~      s        >> )(((  III LLL
 LLL  ~%%%  ))))4,4 4 	4
 4 4 $D>4 $H-4 
4 4 4 4&gYu%93%>?dJK g g g gV !****c s t    CC-1C	5-s23S$>	?C C C C&*/Xd^0C*D	     r-   r~   c            
           e Zd Zd" fdZd"dZdedefdZdeddfdZ	 d#de	e
eeef                           defd	Zd
d
ddededefdZdefdZdefdZdedef fdZdefdZdee         fdZedeeef         defd            Zedededefd            Zd Zdeeef         ddfdZdededefdZdee         fdZ e!de"j#        dd fd            Z$de"j#        fdZ%	 d#d
d
dd e	e         dedede&j'        fd!Z( xZ)S )$r!   r$   Nc                     t                                                       g | _        i | _        g | _        |                                  d S r&   )r(   r)   _blocks_block_indexargnames	add_block)r*   r+   s    r,   r)   zControlFlowGraph.__init__  sE    )+,.#%r-   c                 R    | j         }| j        D ]}|                    |          }dS )zLegalize all blocks.N)rP   r   rY   )r*   rW   r   s      r,   rY   zControlFlowGraph.legalize  s8    *\ 	< 	<E"^^N;;NN	< 	<r-   r   c                 z    	 | j         t          |                   S # t          $ r t          d| d          w xY w)Nz
the block z is not part of this bytecode)r   r   KeyErrorr6   )r*   r   s     r,   get_block_indexz ControlFlowGraph.get_block_index  sU    	P$RYY// 	P 	P 	PN%NNNOOO	Ps    :c                     t          | j                  }| j                            |           || j        t	          |          <   d S r&   )r5   r   rT   r   r   )r*   r   block_indexs      r,   
_add_blockzControlFlowGraph._add_block  s@    $,''E"""'2"U))$$$r-   r#   c                 N    t          |          }|                     |           |S r&   )r   r   )r*   r#   r   s      r,   r   zControlFlowGraph.add_block  s(     <((r-   Trt   compute_exception_stack_depthsrt   r   c          
         | sdS t          |t                      d | D             t                              d | D             d          t                              d | D             d          g           }d}t          s7t
          r0| j        t          j        t          j	        z  t          j
        z  z  rd}t          || d         |ddd	d	                                          }g }|j        }|j        }d	}		 	 |                    d	          }	t!          |	t"                    r4 |            }|                    |	          }	t!          |	t"                    4 ||           |	                                }~# t$          $ r |	t!          |	t"                    sJ t'          |	g|j                                        R  }	| D ]K}
|j        t/          |
                   s/|
D ],}t!          |t0                    r|j        t4          u rd|_        -L|r8|j        D ]0}|j        t/          |j                           }|dk    sJ ||_        1|	cY S w xY w)
zCompute the stack size by iterating through the blocks

        The implementation make use of a generator function to avoid issue with
        deeply nested recursions.

        r   c                 F    i | ]}t          |          t                      S rB   )r   setr2   r`   s     r,   
<dictcomp>z6ControlFlowGraph.compute_stacksize.<locals>.<dictcomp>  s$    :::r!uucee:::r-   c                 ,    g | ]}t          |          S rB   r   r   s     r,   
<listcomp>z6ControlFlowGraph.compute_stacksize.<locals>.<listcomp>  s    4I4I4IqRUU4I4I4Ir-   i   c                 ,    g | ]}t          |          S rB   r   r   s     r,   r   z6ControlFlowGraph.compute_stacksize.<locals>.<listcomp>  s    2G2G2GQ2a552G2G2Gr-   i )ru   rv   rx   ry   rw   r/   N)rs   r   dictfromkeysr   r   flagsr   	GENERATOR	COROUTINEASYNC_GENERATORr~   r   rT   popsendr1   rd   
IndexErrorri   ry   valuesrv   r   r   stack_depthr   rw   rx   r=   )r*   rt   r   r   initial_stack_sizecoro
coroutinespush_coroutinepop_coroutineargsr   r3   tbrm   s                 r,   compute_stacksizez"ControlFlowGraph.compute_stacksize  s     	1 .::T:::&*mm4I4ID4I4I4I5&Q&Q$(MM2G2G$2G2G2G$P$P
 
 
 
	#
	# 
')*/0
	# "# "DG/AtT
 

#%% 	
 RT
#*",	" yy !s++ +(=??D99T??D !s++ + t$$$xxzz"   	 	 	 #
4(=(=##=
 tFf<CCEEFFFD  2 2/5		: 2" 2 2%a22 2q}7M7M,1AM . * + * *B!;BryMMJD19999%)BNNKKK7	s   6A?E5 5CI	I	c                 0    dt          | j                  z  S )Nz<ControlFlowGraph block#=%s>r5   r   r*   s    r,   __repr__zControlFlowGraph.__repr__T  s    -DL0A0AAAr-   c           	         g }i }| D ]}t          |          D ]\  }}t          |t                    r|t          |j        t                    sJ |                    |t          |                     |                    d||         |                     |j                  |j	        f           t          |t                    r#|                    d||j                 f           t          |t                    r|                                s|                                r|                                rc|j        }t          |t                    sJ t!          |j        |                     |          |j                  }|                    |           n|                    |           |                    |          x}r"|                    d||j                 f            n|                    |           |S )Nr   r   )location)rR   r1   r   r=   r   
setdefaultr5   rT   r   r   r   r   r   r8   r   r;   r   namer   ra   )	r*   r#   rw   r   r>   r?   r\   c_instrr   s	            r,   _get_instructionsz"ControlFlowGraph._get_instructionsY  s     *,
 %	/ %	/E )% 0 0 $/ $/ueX.. #/%elJ?????))%ZAAA ''&&u- 00>>!,	     v.. / '':ek3J(KLLLLu-- /NN$$/(-(8(8/ ~~'' 3',y),
CCCCC #0!J 00>>%*^# # #
 %++G4444$++E222"77>>>r N$++Xz"(7K,LMMME ''....r-   otherc                 
   t          |           t          |          urdS | j        |j        k    rdS |                                 }|                                }||k    rdS t                                          |          S )NF)r<   r   r   r(   __eq__)r*   r   instrs1instrs2r+   s       r,   r   zControlFlowGraph.__eq__  s}    ::T%[[((5=EN**5((**))++g5 ww~~e$$$r-   c                 *    t          | j                  S r&   r   r   s    r,   __len__zControlFlowGraph.__len__  s    4<   r-   c                 *    t          | j                  S r&   )iterr   r   s    r,   r@   zControlFlowGraph.__iter__  s    DL!!!r-   r>   c                     d S r&   rB   rC   s     r,   rD   zControlFlowGraph.__getitem__  s    HKr-   r*   c                     d S r&   rB   rC   s     r,   rD   zControlFlowGraph.__getitem__  rF   r-   c                 p    t          |t                    r|                     |          }| j        |         S r&   )r1   r   r   r   rC   s     r,   rD   zControlFlowGraph.__getitem__  s4    eZ(( 	0((//E|E""r-   c                 L   t          |t                    r|                     |          }| j        |         }| j        |= | j        t          |          = t          |t          |                     D ]1}| j        |         }| j        t          |          xx         dz  cc<   2d S r_   )r1   r   r   r   r   r   r:   r5   )r*   r>   r   r3   s       r,   __delitem__zControlFlowGraph.__delitem__  s    eZ(( 	0((//EU#Lbii(uc$ii(( 	. 	.ALOEbii(((A-((((	. 	.r-   c                    t          |t                    st          d          |                     |          }|dk     rt	          d          | j        |         }|dk    r|S |t          |          k    rt	          d          ||d          }|s!|dz   t          |           k     r| |dz            S ||d = t          |          }|j        |_        ||_        | |dz   d          D ]$}| j        t          |          xx         dz  cc<   %| j        
                    |dz   |           |dz   | j        t          |          <   |S )Nzexpected blockr   zindex must be positivezindex out of the blockr/   )r1   r   	TypeErrorr   r6   r   r5   r'   r   r   insert)r*   r   r>   r   r#   block2s         r,   split_blockzControlFlowGraph.split_block  sj   %,, 	.,---**5111995666[)A::L3u::5666UVV} 	-QT**K!O,,%&&ML))!,!+/++, 	. 	.Ebii(((A-((((K!OV444(3a"V**%r-   c                    | sg S t                      | d         g}|r |                                }t          |          v r)                    t          |                     d}|D ]}t	          |t
                    rKt	          |j        t                    r|                    |j                   |	                                rd}bt	          |t                    r6t	          |j        t                    sJ |                    |j                   |r!|j        r|                    |j                   | fd| D             S )Nr   TFc                 6    g | ]}t          |          v|S rB   r   )r2   r`   seen_block_idss     r,   r   z4ControlFlowGraph.get_dead_blocks.<locals>.<listcomp>  s)    ???a2a55#>#>#>#>#>r-   )r   r   r   r   r1   r   r;   r   rT   r   r   r=   r'   )r*   stackr   fall_throughr3   r   s        @r,   get_dead_blocksz ControlFlowGraph.get_dead_blocks  sX    	Ia	 	/IIKKE%yyN**r%yy)))L + +a'' +!!%44 ,QU+++zz|| -',8,, +%ah
;;;;;LL*** / 0 /U-...!  	/$ @???4????r-   bytecodec                    i }g }i }t          |           D ]\  }}t          |t                    r|||<    t          |t                    r7t          |j        t                    r|                    ||j        f           lt          |t                    r9t          |j        t                    sJ |                    ||j        f           t          |t                    r
|||j	        <   i }|D ]\  }}||         }|||<   t                      }	|	                    |            t          | j                  |	_        |	d         }
i }g }i }t          t                    }d }d}d }t          |           D ]\  }}d }||v r_||         }|dk    rI|
                                x}r3|
}|	                                }|                                s||
_        |}
||
||<   n|
                                r||z|                                r|
}|	                                }
nO|                                r;t          |j        t                    sJ |
}|	                                }||
_        |}
||}d}||~|                                rYt          |t                    rD|sJ |                                }||         d         |_	        |                    |           d }t||                                rp||v rl||j                 ||         k    rUt          |j        t                    sJ ||j                                     t          ||         d                              |                                rv|rt|                    t          ||         d                              |                                }|
                    |           ||                             |           d}d }t          |t                    rt          |t          t          t          f          r|                                }t          |t                    r&|J |}d}t          |t                    sJ |g||<   nt          |t                    r4t          |t                    sJ ||j	                 d         |_	        d }d}nH|}t          |j        t                    r,t          |t                    sJ |                    |           |}|
                    |           |                                D ]\  }}||         }
t-                      }d}|t/          |
          k     rQ|
|         }|dz  }t          |t                    r|                    |j	                   nn|t/          |
          k     Q|D ]A}|j	        |vr6||                             d|           |                    |j	                   B|D ]-}|j        }t          |t                    sJ ||         |_        .|                                D ]5\  } }!| j        }t          |t                    sJ |!D ]}"||         |"_        6|	S )Nr   FTr/   )rR   r1   r   r   r;   rT   r   r=   r   r   r!   _copy_attr_fromlistr   r   rL   r   r   r'   r8   rN   itemsr   r5   r   r   )#r   label_to_block_indexjumpstry_end_locationsr>   r?   block_startstarget_indextarget_labelbytecode_blocksr   labelsjumping_instrsrw   add_try_endactive_try_begintry_begin_inserted_in_blockr[   	old_block	old_labelli	new_blocktempntenew_tbrO   labtesexisting_te_entriesr3   r   labelb_tbc_tbsc_tbs#                                      r,   from_bytecodezControlFlowGraph.from_bytecode  sQ     "%h// 		7 		7LE5%'' 7.3$U++E5)) 7jE.J.J 7eUY/0000E8,, 7!%,66666eU\23333E6** 716!%+. */ 	6 	6&L,/=L)5L&&*,,''111#'(9#:#:   "&( 68
 2=T1B1B 04&+#&*
%h// t	  t	 LE5+/I $$(/	 A::)R)R)T)T#T2: %I / 9 9 ; ;I ;;== 5+4(%E((-F9% ::<< &AW &&(( 
& %I+5577EE  ((** &%jne<<<<< %I / 9 9 ; ;I'0E$%E $2.3+$)? &&(( %;Zv-F-F %;++++**,,C *+; <R @CI$$S)))'+$ &1
 #++--,0AAA 1@01ABC C  **.%@@@@@#JN3::":.>#?#CDD   "**,, ; ;!((
;K0LR0P)Q)QRRR!1!6!6!8!8V,,, ##34;;FCCC6:3J%''  %%6!:;; jjlleX.. 3+333',$26/%c844444),Ju%%v.. 	3%c622222 *5; 7 ;CI'+$27//!&J!%)U33 3)#u55555&--c222LL $))++ 	6 	6HC3KE"%%%E #e**$$%L
a(( '++AG4444 #e**$$  6 68#6663K&&q"---'++BH5556 $ 	& 	&EIEeU+++++uEII &++-- 	, 	,KD%KEeU+++++ , ,$Um, r-   c                    t                      }| D ]p}|                                }|"|                    t          |                     d |D             D ])}|                    t          |j                             *qi }g }i }t                      }g }	d}
d}| D ]u}t          |          |v r5t                      }||t          |          <   |	                    |           |D ](}t          |t          t          t          f          r|                                }t          |t                    r|
F|
\  }}|j        |j        u sJ |j        |j        k    sJ t          |j        |j                  |_        ||\  }}|j        }|j        |j        u r|j        |j        k    ru|j        t           u r"|j        t           u sJ t           |j        _        n$t          |j        |j                  |j        _        |j        ||<   |	                    |           9t          |t                    sJ |||<   ||f}
d}nt          |t                    rUt          |t                    sJ |j        |v r|                    |j                   ||j                 |_        d}
||f}nKt          |j        t&                    r/t          |t                    sJ |                    |           d}nd}|}|	                    |           *w|D ]!}|t          |j                           |_        "t          |                                          D ]!}|t          |j                           |_        "t+          j                    }|                    |            t1          | j                  |_        |	|dd<   |S )zConvert to Bytecode.Nc              3   D   K   | ]}t          |t                    |V  d S r&   )r1   r   )r2   r3   s     r,   r4   z/ControlFlowGraph.to_bytecode.<locals>.<genexpr>  s1      CCQ:a+B+BCqCCCCCCr-   )r   r]   r   r   r=   r   rT   r1   r   r   r   rN   r   rj   r   r   r   r   r;   r   r   	_bytecodeBytecoder   r   r   )r*   used_blocksr   r\   r   r   r   rw   seen_try_endr#   last_try_beginlast_try_end	new_labelr?   rO   cfg_tbbyt_tbcfg_tebyt_ter   r   s                        r,   to_bytecodezControlFlowGraph.to_bytecode  s    ee 	/ 	/E >>++L'< 0 0111CC%CCC / /29..../ 
&)eeOQ <@59 B	+ B	+E%yyK''!GG	$-r%yy!##I... <+ <+eeXv%>?? 8 **,,C!%22 4, *5-;NFF#(<6=#@#@#@#@#(#3v7H#H#H#H#H14 & 2E4E2 2F. (3-9NFF$*LE % < <$)$48H$H$H $)#4#=#=+0+<+E+E+E+E?DFL$<$<?B(-(95;L@& @&FL$< 5;L
5 1 , 3 3F ; ; ; ()#x88888,/
5)*/'+#E622 ,)#v66666 ;,66$$((555$.u{$;	)-(-s|#EIz:: ,)#u55555S)))'+'+E##E****y<+~  	. 	.Er%)}}-EIIj''))** 	. 	.Br")}}-BII%''  &&& //"r-   	stacksizec                    ||                      ||          }|                                 }|                    |dd          S )zConvert to code.Nr   F)r  rt   r   )r   r  to_code)r*   r  rt   r   bcs        r,   r   zControlFlowGraph.to_code  sa     ..#5/M /  I zz$+0  
 
 	
r-   )r$   Nr&   )*r7   rb   rc   r)   rY   r   rd   r   r   r   r   r   r   r   r   r{   r   strr   r
   r   r   r   r   r	   r@   r   rD   r    rH   r   r   r   staticmethodr  r  r  r  typesCodeTyper   re   rf   s   @r,   r!   r!     sc            < < < <PZ PC P P P P3
 3t 3 3 3 3 KO $XeE94D.E%FG	    $(/3	a a a !a )-	a
 
a a a aFB# B B B B
-	- - - -^%C %D % % % % % %! ! ! ! !"(:. " " " " KsJ!7KJKKK XK4!4E4a444 X4# # #
.sJ!7 .D . . . .   C  J        D@j!1 @ @ @ @4 A	 2 A7I A A A \AFiY/ i i i iZ $(
 $(/3
 
 
C=
 !	

 )-
 

 
 
 
 
 
 
 
r-   ).sysr$  collectionsr   dataclassesr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r  bytecode.concreter   bytecode.flagsr   bytecode.instrr   r   r   r   r   r   bytecode.utilsr   r   r   r   r    
_InstrListr   rq   rs   r~   BaseBytecoder!   rB   r-   r,   <module>r0     sx   



  # # # # # # ! ! ! ! ! !                             "     + + + + + + ( ( ( ( ( ( K K K K K K K K K K K K K K K K . . . . . . . . . .GC|$$$GC)***w w w w w%eE9h,N&OP w w wt" " " , , , , , , , ,<E E E E E E E EP_	
 _	
 _	
 _	
 _	
y- _	
 _	
 _	
 _	
 _	
r-   