
    h                        S SK r \ R                  " \\\\\\\\\\\\S9  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SS	K	J
r
Jr  SS
KJrJrJr   " S S\R                   5      r\" \R$                  5      r " S S5      r " S S\5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S\5      r " S S\5      r " S S \5      r " S! S"5      r " S# S$5      r " S% S&5      r  " S' S(\!5      r" " S) S*5      r# " S+ S,5      r$ " S- S.5      r%\ RL                  S/\S0\'4S1 j5       r( " S2 S3\
5      r) " S4 S5\5      r*g)6    N)
PyrexTypes	ExprNodesNodesBuiltinOptionsTreeVisitorCythonTransformInternalErrorerrorwarningfake_rhs_exprTypedExprNode   )r   )r   )r   )r   )r   )r   r	   )r   r   r
   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )r      c                 <   > [         TU ]  U5        Xl        X l        g N)super__init__type_may_be_none)selfr   may_be_nonepos	__class__s       U/var/www/fran/franai/venv/lib/python3.13/site-packages/Cython/Compiler/FlowControl.pyr   TypedExprNode.__init__   s    	'    c                      U R                   S:g  $ NF)r   r   s    r   r   TypedExprNode.may_be_none   s      E))r   )r   r   NN)__name__
__module____qualname____firstlineno__r   r   __static_attributes____classcell__r   s   @r   r   r      s    (
* *r   r   c                   0    \ rS rSrSrS rS rS rS rSr	g)	ControlBlock"   aC  Control flow graph node. Sequence of assignments and name references.

children  set of children nodes
parents   set of parent nodes
positions set of position markers

stats     list of block statements
gen       dict of assignments generated by this block
bounded   set  of entries that are definitely bounded in this block

Example:

 a = 1
 b = a + c # 'c' is already bounded or exception here

 stats = [Assignment(a), NameReference(a), NameReference(c),
              Assignment(b)]
 gen = {Entry(a): Assignment(a), Entry(b): Assignment(b)}
 bounded = {Entry(a), Entry(c)}

c                     [        5       U l        [        5       U l        [        5       U l        / U l        0 U l        [        5       U l        SU l        SU l        SU l	        SU l
        SU l        g Nr   )setchildrenparents	positionsstatsgenboundedi_inputi_outputi_geni_killi_stater!   s    r   r   ControlBlock.__init__9   sW    u
u
r   c                 T    U R                   (       + =(       a    U R                  (       + $ r   )r4   r3   r!   s    r   emptyControlBlock.emptyH   s    JJ5t~~#56r   c                 $   U R                    H  nUR                  R                  U 5        M      U R                   H  nUR                   R                  U 5        M      U R                  R                  5         U R                   R                  5         g)z'Detach block from parents and children.N)r1   r2   removeclear)r   childparents      r   detachControlBlock.detachK   sb    ]]EMM  & #llFOO""4( #r   c                 p    U R                   R                  U5        UR                  R                  U 5        g r   )r1   addr2   r   blocks     r   	add_childControlBlock.add_childT   s&    % $r   )r6   r1   r5   r9   r7   r:   r8   r;   r2   r3   r4   N)
r$   r%   r&   r'   __doc__r   r>   rE   rK   r(    r   r   r,   r,   "   s    ,7 r   r,   c                       \ rS rSrSrS rSrg)	ExitBlockY   zNon-empty exit point block.c                     gr    rN   r!   s    r   r>   ExitBlock.empty\   s    r   rN   N)r$   r%   r&   r'   rM   r>   r(   rN   r   r   rP   rP   Y   s
    %r   rP   c                       \ rS rSrS rSrg)AssignmentList`   c                     / U l         g r   r4   r!   s    r   r   AssignmentList.__init__a   s	    
r   rX   Nr$   r%   r&   r'   r   r(   rN   r   r   rU   rU   `   s    r   rU   c                   x    \ rS rSrSrS rSS jrSS jrS rS r	S	 r
SS
 jrS rS rS rS rS rS rS rSrg)ControlFlowe   a  Control-flow graph.

entry_point ControlBlock entry point for this graph
exit_point  ControlBlock normal exit point
block       ControlBlock current block
blocks      set    children nodes
entries     set    tracked entries
loops       list   stack for loop descriptors
exceptions  list   stack for exception descriptors
in_try_block  int  track if we're in a try...except or try...finally block
c                    [        5       U l        [        5       U l        / U l        / U l        [        5       U l        [        5       U l        U R                  R                  U R                  5        U R                  U l
        SU l        g r/   )r0   blocksentriesloops
exceptionsr,   entry_pointrP   
exit_pointrH   rJ   in_try_blockr!   s    r   r   ControlFlow.__init__r   s^    eu
'>#+(%%
r   Nc                     [        5       nU R                  R                  U5        U(       a  UR                  U5        U$ )z\Create floating block linked to `parent` if given.

NOTE: Block is NOT added to self.blocks
)r,   r_   rH   rK   r   rD   rJ   s      r   newblockControlFlow.newblock~   s1    
 U#r   c                     [        5       nU R                  R                  U5        U(       a  UR                  U5        O,U R                  (       a  U R                  R                  U5        X l        U R                  $ )ziCreate block children block linked to current or `parent` if given.

NOTE: Block is added to self.blocks
)r,   r_   rH   rK   rJ   rh   s      r   	nextblockControlFlow.nextblock   sT    
 U#ZZJJ  '
zzr   c                     UR                   (       a  gUR                  =(       dX    UR                  =(       dE    UR                  =(       d2    UR                  =(       d    UR
                  =(       d    UR                  $ r    )is_anonymousis_localis_pyclass_attris_argfrom_closure
in_closureerror_on_uninitializedr   entrys     r   
is_trackedControlFlow.is_tracked   s\     -%"7"7 -5<< -""-&+&6&6-,,	.r   c                 z   UR                   (       a  UR                  (       a  UR                  R                  (       d}  UR                  R                  (       db  UR                  R
                  (       dG  UR                  R                  (       d,  UR                  R                  (       a  UR                  (       d  ggNTF)	rp   is_variabler   is_struct_or_union
is_complexis_arrayis_cython_lock_typeis_cpp_classis_cpp_optionalrv   s     r   is_statically_assigned"ControlFlow.is_statically_assigned   s`    NNu00..&&$$//**))%2G2Gr   c                     U R                   (       a3  U R                   R                  R                  UR                  SS 5        gg)z0Mark position, will be used to draw graph nodes.N   )rJ   r3   rH   r   r   nodes     r   mark_positionControlFlow.mark_position   s0    ::JJ  $$TXXbq\2 r   c                    U R                   (       az  U R                  U5      (       ac  [        XX4S9nU R                   R                  R	                  U5        XPR                   R
                  U'   U R                  R                  U5        g g g )N	rhs_scope)rJ   rx   NameAssignmentr4   appendr5   r`   rH   )r   lhsrhsrw   r   
assignments         r   mark_assignmentControlFlow.mark_assignment   sd    ::$//%00'%MJJJ##J/$.JJNN5!LLU#	 1:r   c                    U R                   (       a|  U R                  U5      (       ae  [        XU5      nU R                   R                  R	                  U5        X@R                   R
                  U'   U R                  R                  U5        g g g r   )rJ   rx   Argumentr4   r   r5   r`   rH   )r   r   r   rw   r   s        r   mark_argumentControlFlow.mark_argument   sd    ::$//%00!#E2JJJ##J/$.JJNN5!LLU#	 1:r   c                 &   U R                   (       a  U R                  U5      (       ai  [        X5      nU R                   R                  R	                  U5        [
        U R                   R                  U'   U R                  R                  U5        g g g r   )	rJ   rx   NameDeletionr4   r   Uninitializedr5   r`   rH   )r   r   rw   r   s       r   mark_deletionControlFlow.mark_deletion   sd    ::$//%00%d2JJJ##J/$1DJJNN5!LLU#	 1:r   c                     U R                   (       aa  U R                  U5      (       aJ  U R                   R                  R                  [	        X5      5        U R
                  R                  U5        g g g r   )rJ   rx   r4   r   NameReferencer`   rH   r   r   rw   s      r   mark_referenceControlFlow.mark_reference   sO    ::$//%00JJ##M$$>? LLU# 1:r   c                    U R                   1n[        5       nU(       aU  UR                  5       nUR                  U5        UR                   H  nXB;  d  M
  UR                  U5        M     U(       a  MU  U R
                  U-
  nU H  nUR                  5         M     UR                  U R                   5        U Hr  nUR                  5       (       d  M  UR                   H'  nUR                   H  nUR                  U5        M     M)     UR                  5         UR                  U5        Mt     U =R
                  U-  sl        g)z%Delete unreachable and orphan blocks.N)rc   r0   poprH   r1   r_   rE   rA   r>   r2   rK   )r   queuevisitedrootrC   unreachablerJ   rD   s           r   	normalizeControlFlow.normalize   s    !!"%99;DKK'IIe$ ' e  ;;0 ELLN ! 	t''( E{{}}#mmF!&((/ "0 , &  	{"r   c                    0 U l         SnU R                   H.  n[        5       nU=Ul        Ul        X0R                   U'   US-  nM0     U R
                   H  nUR                   Hn  n[        U[        5      (       d  M  Xl        U R                   UR                     nUR                  R                  U5        U=R                  U-  sl        US-  nMp     M     U R
                   H  nUR                  R                  5        H{  u  p%U R                   U   nU[        L a   U=R                  UR                  -  sl        OU=R                  UR                  -  sl        U=R                  UR                  -  sl        M}     UR                  Ul        UR"                   H/  nU=R                  U R                   U   R                  -  sl        M1     M     U R                   R%                  5        H,  nU R&                  =R                  UR                  -  sl        M.     U R&                  R                  U R&                  l        g)z+Set initial state, map assignments to bits.r   N)assmtsr`   rU   maskbitr_   r4   
isinstancer   rw   r   r5   itemsr   r9   r:   r8   r6   valuesrc   )r   r   rw   r   rJ   stats         r   
initializeControlFlow.initialize   s    \\E#%F'**FK&*!'KKAIC	 " [[EdN33"H![[4FLL''-KK3&KAIC $ ! [[E$yy0U+=(KK6::-KKK488+K+  1 #[[ENE 2 6 66 ' ! kk((*F""fjj0" +$($4$4$:$:!r   c                    [        5       nU R                  U   nXR                  -  (       am  U R                  U5      (       a  UR	                  [        U5      5        O<UR                  (       a  UR	                  [        5        OUR	                  [        5        UR                   H)  nXR                  -  (       d  M  UR	                  U5        M+     U$ r   )
r0   r   r   r   rH   StaticAssignmentrs   Unknownr   r4   )r   istaterw   retr   assmts         r   map_oneControlFlow.map_one  s    e!%U!3JJ**511(/0## & \\E		!! " 
r   c                    SnU(       a{  SnU R                    H_  nSnUR                   H  nX4R                  -  nM     X2R                  ) -  UR                  -  nXRR                  :w  a  SnX2l        XRl        Ma     U(       a  Mz  gg)z(Per-block reaching definitions analysis.TFr   N)r_   r2   r8   r:   r9   r7   )r   dirtyrJ   r7   rD   r8   s         r   reaching_definitions ControlFlow.reaching_definitions   su    
 E#mmF.G ,#||m3u{{B~~- E '!) % er   )	r   rJ   r_   r`   rc   rb   rd   re   ra   r   )r$   r%   r&   r'   rM   r   ri   rl   rx   r   r   r   r   r   r   r   r   r   r   r(   rN   r   r   r\   r\   e   sN    

	.	3
$$$$#8$;L"*r   r\   c                       \ rS rSrS rSrg)	LoopDescri3  c                 *    Xl         X l        / U l        g r   )
next_block
loop_blockrb   )r   r   r   s      r   r   LoopDescr.__init__4  s    $$r   )rb   r   r   NrZ   rN   r   r   r   r   3  s    r   r   c                   "    \ rS rSrSrSS jrSrg)ExceptionDescri:  zException handling helper.

entry_point   ControlBlock Exception handling entry point
finally_enter ControlBlock Normal finally clause entry point
finally_exit  ControlBlock Normal finally clause exit point
Nc                 (    Xl         X l        X0l        g r   rc   finally_enterfinally_exit)r   rc   r   r   s       r   r   ExceptionDescr.__init__B  s    &*(r   r   r#   )r$   r%   r&   r'   rM   r   r(   rN   r   r   r   r   :  s    )r   r   c                   @    \ rS rSrS	S jrS rS rS r\S 5       r	Sr
g)
r   iH  Nc                     UR                   c  [        5       Ul         Xl        X l        X0l        UR
                  U l        [        5       U l        SU l        SU l        S U l	        X@l
        g r    )cf_stater0   r   r   rw   r   refsrr   is_deletioninferred_typer   )r   r   r   rw   r   s        r   r   NameAssignment.__init__I  sT    <<5CL
77E	 !"r   c                 R    U R                   R                  < SU R                  < S3$ Nz(entry=)r   r$   rw   r!   s    r   __repr__NameAssignment.__repr__W      !%!8!8$**EEr   c                     U R                   R                  U R                  =(       d    U R                  R                  5      U l        U R
                  $ r   )r   
infer_typer   rw   scoper   r!   s    r   r   NameAssignment.infer_typeZ  s8    !XX001S4::CSCST!!!r   c                     U R                   R                  U R                  =(       d    U R                  R                  5      $ r   )r   type_dependenciesr   rw   r   r!   s    r   r    NameAssignment.type_dependencies^  s*    xx))$..*LDJJ<L<LMMr   c                     U R                   R                  R                  (       d  U R                   R                  $ U R                  $ r   )rw   r   is_unspecifiedr   r!   s    r   r   NameAssignment.typea  s-    zz--::??"!!!r   )	rw   r   rr   r   r   r   r   r   r   r   )r$   r%   r&   r'   r   r   r   r   propertyr   r(   rN   r   r   r   r   H  s,    #F"N " "r   r   c                   8   ^  \ rS rSrSrU 4S jrS rS rSrU =r	$ )r   ih  z7Initialised at declaration time, e.g. stack allocation.c                    > UR                   R                  (       d  SnOS n[        UR                   X!R                  S9n[        TU ]  X3U5        g )NFr   r   )r   is_pyobjectr   r   r   r   )r   rw   r   r   r   s       r   r   StaticAssignment.__init__j  sA    zz%%KKJJKYY@5)r   c                 .    U R                   R                  $ r   )rw   r   r!   s    r   r   StaticAssignment.infer_types  s    zzr   c                     g)NrN   rN   r!   s    r   r   "StaticAssignment.type_dependenciesv  s    r   rN   )
r$   r%   r&   r'   rM   r   r   r   r(   r)   r*   s   @r   r   r   h  s    A* r   r   c                       \ rS rSrS rSrg)r   iz  c                 >    [         R                  XX#5        SU l        g NT)r   r   rr   )r   r   r   rw   s       r   r   Argument.__init__{  s    36r   )rr   NrZ   rN   r   r   r   r   z  s    r   r   c                        \ rS rSrS rS rSrg)r   i  c                 >    [         R                  XX5        SU l        g r   )r   r   r   )r   r   rw   s      r   r   NameDeletion.__init__  s    36r   c                    U R                   R                  U R                  R                  5      nUR                  (       d:  UR                  U R                  R                  5      (       a  [        R                  $ Xl        U$ r   )	r   r   rw   r   r   can_coerce_to_pyobjectr   py_object_typer   )r   r   s     r   r   NameDeletion.infer_type  s\    ++DJJ,<,<=))!889I9IJJ,,,*r   )r   r   N)r$   r%   r&   r'   r   r   r(   rN   r   r   r   r     s     r   r   c                       \ rS rSrSrSrg)r   i  zDefinitely not initialised yet.rN   Nr$   r%   r&   r'   rM   r(   rN   r   r   r   r     s    )r   r   c                       \ rS rSrSrSrg)r   i  z7Coming from outer closure, might be initialised or not.rN   Nr   rN   r   r   r   r     s    Ar   r   c                        \ rS rSrS rS rSrg)r   i  c                 v    UR                   c  [        5       Ul         Xl        X l        UR                  U l        g r   )r   r0   r   rw   r   r   s      r   r   NameReference.__init__  s*    == EDM	
88r   c                 R    U R                   R                  < SU R                  < S3$ r   r   r!   s    r   r   NameReference.__repr__  r   r   )rw   r   r   N)r$   r%   r&   r'   r   r   r(   rN   r   r   r   r     s    Fr   r   c                   :   ^  \ rS rSrSrSrSrU 4S jrS rSr	U =r
$ )ControlFlowStatei  Fc                 \  > [         U;   a+  UR                  [         5        SU l        U(       d  SU l        O=[        U;   a  UR                  [        5        SU l        O[        U5      S:X  a  SU l        [        TU ]!  U Vs/ s H  o"R                  [        Ld  M  UPM     sn5        g s  snf )NTr   )r   discardcf_maybe_null
cf_is_nullr   len	is_singler   r   r   r   )r   stateir   s      r   r   ControlFlowState.__init__  s    E!MM-(!%D"&MM'"!%D5zQ!%<1m!;Q<	><s   B)B)c                     U S   $ r/   rN   r!   s    r   oneControlFlowState.one  s    Awr   )r  r  r
  )r$   r%   r&   r'   r  r  r
  r   r  r(   r)   r*   s   @r   r  r    s#     MJI>  r   r  c                   @    \ rS rSrSrS rS rS rS rSS jr	S r
S	rg
)	GVContexti  zGraphviz subgraph object.c                 <    0 U l         SU l        / U l        0 U l        g r/   )blockidsnextidr1   sourcesr!   s    r   r   GVContext.__init__  s    r   c                 :    U R                   R                  U5        g r   )r1   r   )r   rC   s     r   rH   GVContext.add  s    U#r   c                     XR                   ;  a1  SU R                  -  U R                   U'   U =R                  S-  sl        U R                   U   $ )Nzblock%dr   )r  r  rI   s     r   nodeidGVContext.nodeid  s@    %#,t{{#:DMM% KK1K}}U##r   c                    UR                   (       d  g[        UR                   5      n[        UR                   5      nUS   nX@R                  ;  a&  [	        UR                  5       5      U R                  U'   U R                  U   nSR                  XRS   S-
  US     Vs/ s H  ofR                  5       PM     sn5      $ s  snf )N r   \nr   )r3   minmaxr  list	get_linesjoinstrip)r   rJ   startstopsrcdescrlinesls          r   extract_sourcesGVContext.extract_sources  s    EOO$5??#8<<'%)(*<*<*>%?DLL"X&zze!HqLa.IJ.I779.IJKKJs    C c                     UR                  SU-  5        UR                  S5        U R                   H  nUR                  XU5        M     UR                  S5        g)zRender graphviz dot graphzdigraph %s {
z node [shape=box];
z}
N)writer1   render)r   fpnameannotate_defsrC   s        r   r/  GVContext.render  sH    
!D()
'(]]ELL=1 #
r   c                 F    UR                  SS5      R                  SS5      $ )N"z\"
r  )replace)r   texts     r   escapeGVContext.escape  s     ||C'//e<<r   )r  r1   r  r  NF)r$   r%   r&   r'   rM   r   rH   r  r+  r/  r9  r(   rN   r   r   r  r    s$    #$$	L=r   r  c                   (    \ rS rSrSrS rSS jrSrg)GVi  zGraphviz DOT renderer.c                     Xl         X l        g r   )r1  flow)r   r1  r?  s      r   r   GV.__init__  s    		r   c           
         UR                  SU R                  -  5        U R                  R                   GH(  nUR	                  U5      nU(       a  UR
                   H  n[        U[        5      (       aH  USUR                  R                  < SUR                  (       a  SOS< SUR                  S   < S3-  nM`  [        U[        5      (       d  Mw  UR                  (       d  M  USUR                  R                  < S	UR                  S   < S3-  nM     U(       d  S
nUR                  U5      nUR                  SU< SUR                  U5      < S35        GM+     U R                  R                   HP  nUR                  U5      nUR                   H,  nUR                  SU< SUR                  U5      < S35        M.     MR     UR                  S5        g )Nz subgraph %s {
z
 z [deletion
definition r   ]z [reference r>   z  z	 [label="z"];
z -> z;
z }
)r.  r1  r?  r_   r+  r4   r   r   rw   r   r   r   r  r9  r1   )	r   r0  ctxr2  rJ   labelr   pidrC   s	            r   r/  	GV.render  s[   
#dii/0YY%%E''.E!KKD!$77 JJOO4;K;KZQ]-]_c_g_ghi_j"l l#D-88:::!tzzPTPXPXYZP[%\\E ( **U#CHHsCJJu4EFG & YY%%E**U#CCE1BCD ( & 	r   )r?  r1  Nr;  )r$   r%   r&   r'   rM   r   r/  r(   rN   r   r   r=  r=    s     r   r=  c                   0    \ rS rSrSrS rS rS rS rSr	g)	MessageCollectioni  z/Collect error/warnings messages first then sortc                 "    [        5       U l        g r   )r0   messagesr!   s    r   r   MessageCollection.__init__
  s    r   c                 @    U R                   R                  USU45        g r   rM  rH   r   r   messages      r   r   MessageCollection.error  s    3g./r   c                 @    U R                   R                  USU45        g r    rP  rQ  s      r   r   MessageCollection.warning  s    3w/0r   c                     [        U R                  5       H&  u  pnU(       a  [        X5        M  [        XS5        M(     g Nr   )sortedrM  r   r   )r   r   is_errorrR  s       r   reportMessageCollection.report  s/    &,T]]&;"C7c#a(	 '<r   )rM  N)
r$   r%   r&   r'   rM   r   r   r   rZ  r(   rN   r   r   rK  rK    s    901)r   rK  r?  compiler_directivesc                    U R                  5         U R                  5         [        5       n0 n[        5       nU R                   GH  nUR                  nUR
                   GH  nU R                  UR                     nU R                  XgR                  5      n	[        U[        5      (       a  UR                  R                  R                  U	5        UR                  UR                  5        XhR                  ) -  nUR                   (       a  XhR"                  -  nOXgR"                  -  nUR                  U5        UR$                  [&        La(  UR                  R(                  R+                  U5        GM  GM  [        U[,        5      (       d  GM1  UR                  X7R.                  '   UR                  R0                  R+                  U5        UR.                  R                  R                  U	5        U	R3                  [4        5        U	R3                  [6        5        U	 H  n
U
R8                  R                  U5        M      GM     GM     US   nUS   nUS   nUS   n[;        5       nU Ht  n[4        UR                  ;   a2  SUl        [?        UR                  5      S:X  a	  SUl         M@  SUl         MI  [6        UR                  ;   a	  SUl        Mf  SUl         SUl        Mv     URC                  5        GH  u  nn[4        UR                  ;   Ga  SUl        URD                  (       dD  [?        UR                  5      S:X  a+  URF                  URH                  RJ                  ;  a  SUl         URL                  (       d=  URD                  (       d,  URN                  (       d  URP                  RR                  (       a  M  UR@                  (       a  URT                  (       d  URV                  (       dK  [X        RV                  (       ab  URP                  RZ                  (       d  URP                  R\                  (       a,  UR_                  UR`                  SURF                  -  5        GMr  URc                  UR`                  SURF                  -  5        GM  U(       aD  S	URF                  -  nURT                  (       a  US
-  nURc                  UR`                  U5        GM  GM  [6        UR                  ;   a
  SUl        GM
  SUl         SUl        GM     U H  n
U
R8                  (       a  M  U
R                  RN                  (       a  M3  U
R                  RT                  (       a  MP  U
R                  R0                  (       a  U(       ax  U
Rd                  (       a4  URc                  U
R`                  SU
R                  RF                  -  5        O3URc                  U
R`                  SU
R                  RF                  -  5        SU
R                  l3        M     U Rh                   H  nUR0                  (       a  M  URN                  (       a  M)  URF                  S:w  a  URF                  Rk                  S5      (       dr  URd                  (       a1  U(       a)  URc                  UR`                  SURF                  -  5        O0U(       a)  URc                  UR`                  SURF                  -  5        SUl3        M     URm                  5         U H  n[o        UR                  5      Ul        M     U H  n[o        UR                  5      Ul        M     g )Nzwarn.maybe_uninitializedzwarn.unused_resultzwarn.unusedzwarn.unused_argTr   Fz0local variable '%s' referenced before assignmentz9local variable '%s' might be referenced before assignmentz% (maybe initialized inside a closure)zUnused argument value '%s'zUnused result in '%s'_unusedzUnused argument '%s'zUnused entry '%s')8r   r   r0   r_   r7   r4   r   rw   r   r   r   r   r   updaterH   r   r   r   r   r   cf_assignmentsr   r   r   cf_referencesr  r   r   r   rK  r  r	  r  r   rs   r1  r   scope_predefined_names
allow_nullrq   r   rY  rt   ru   r   r   r   r   r   r   rr   cf_usedr`   
startswithrZ  r  )r?  r\  assignments
referencesassmt_nodesrJ   r;   r   i_assmtsr  r   warn_maybe_uninitializedwarn_unused_resultwarn_unusedwarn_unused_argrM  r   rw   msgs                      r   check_definitionsrp    s7   OO %KJ%K --KKD{{4::.HLL**5E$//!!((/)!]]N2##||+Gxx'G%88=0JJ--44T: 1D-00(,


99%

((//5		""))%0 m,g&"EJJNN4( #/   :  33MN,-AB%m4K)*;<O "H DMM)!%D4==!Q&"&"'%!%D#DO!&D  "'')eDMM)!%D&&3t}}+=+B

%++*L*LL"&5#5#5,,

0C0C)9)9//66

..%**2K2KNNJ**%&
 $$J**%& *QTYT^T^^##BBC  HH	 * %
 "&D#DO!&DK *P 


5;;#>#>#>...{{((-?<<$$UYY0L%*[[%5%516 7 $$UYY0G%*[[%5%516 7 %EII  ###---zzS )>)>x)H)H<<& ((4J).54 5 # ((4G).54 5!EM  OO(7 (7 r   c                   :   ^  \ rS rSrU 4S jrS rS rS rSrU =r	$ )AssignmentCollectori  c                 0   > [         TU ]  5         / U l        g r   )r   r   rg  )r   r   s    r   r   AssignmentCollector.__init__  s    r   c                 *    U R                  U S S 5        g r   )_visitchildrenr!   s    r   
visit_NodeAssignmentCollector.visit_Node  s    D$-r   c                 f    U R                   R                  UR                  UR                  45        g r   )rg  r   r   r   r   s     r   visit_SingleAssignmentNode.AssignmentCollector.visit_SingleAssignmentNode  s#    488 45r   c                 v    UR                    H)  nU R                  R                  X!R                  45        M+     g r   )lhs_listrg  r   r   r   r   r   s      r   visit_CascadedAssignmentNode0AssignmentCollector.visit_CascadedAssignmentNode  s*    ==C##S((O4 !r   )rg  )
r$   r%   r&   r'   r   rw  rz  r  r(   r)   r*   s   @r   rr  rr    s    .65 5r   rr  c                   B   \ rS rSrS rS rS rS rS rS r	S5S	 jr
S
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS6S jr S  r!S! r"S" r#S# r$S$ r%S% r&S& r'S' r(S( r)S) r*S* r+S+ r,S, r-S- r.S. r/S/ r0S0 r1S1 r2S2 r3S3 r4S4r5g)7ControlFlowAnalysisi  c                     XR                   :X  a  U R                  $ [        U R                  5       H  u  p#X!L d  M  Us  $     er   )envr?  reversedstack)r   r  er?  s       r   find_in_stack!ControlFlowAnalysis.find_in_stack  s;    ((?99

+GAx , 	ur   c                 B   U R                   S   nU(       a
  [        5       OS U l        SSKJn  U" 5       U l        [        5       U l        SU l        UR                  U l
        [        5       U l        / U l        [        [        R                   SS9U l        U R%                  U5        ['        U R                  U R                   5        U(       aA  U R                   S   n[)        US5       nU R                  R+                  US	US
9  S S S 5        U$ U$ ! , (       d  f       U$ = f)Ncontrol_flow.dot_outputr   )ConstantFoldingFTr   zcontrol_flow.dot_annotate_defswmodule)r2  )current_directivesr  gv_ctxOptimizer  constant_folderr0   
reductionsin_inplace_assignmentr   r  r\   r?  r  r   r   r   object_exprvisitchildrenrp  openr/  )r   r   
dot_outputr  r2  r0  s         r   visit_ModuleNode$ControlFlowAnalysis.visit_ModuleNode  s    ,,-FG
%/ikT-.0 %%*"::M	
()B)BPTU4 $))T%<%<= 334TUMj#&"""2x}"M 't '&s   'D
Dc                 b   UR                    H'  nUR                  (       d  M  U R                  U5        M)     U R                  US5        U R                  R	                  U R
                  U R                  45        UR                  U l        [        5       U l        UR                  R                  R                  5        HJ  nU R                  R                  U5      (       d  M%  U R                  R                  R                  U5        ML     U R                  U5        U R                  R                  5         UR                    H  nU R                  U5        M     UR                   (       aQ  U R                  R#                  UR                   [%        [&        R(                  SS9UR                   R*                  5        UR,                  (       aQ  U R                  R#                  UR,                  [%        [&        R.                  SS9UR,                  R*                  5        U R                  UR0                  5        UR2                  (       a%  U R                  UR4                  R0                  5        U R                  R6                  (       a9  U R                  R6                  R9                  U R                  R:                  5        U R                  R=                  5         [?        U R                  U R@                  5        U R                  RB                  R                  U R                  RD                  5        U RF                  bC  U RF                  R                  [I        UR                  RJ                  U R                  5      5        U R                  RM                  5       u  U l        U l        U$ )N)
decoratorsFr  )'argsdefaultr  r  r   r  r?  local_scoper\   r`   r   rx   rH   r   rl   _visitstar_argr   r   r   
tuple_typerw   starstar_arg	dict_typebodyis_generatorgbodyrJ   rK   rd   r   rp  r  r_   rc   r  r=  r1  r   r   r   argrw   s       r   visit_FuncDefNode%ControlFlowAnalysis.visit_FuncDefNode  sq   99C{{{""3'  	41

488TYY/0##M	 %%--446Eyy##E**		!!%%e, 7 	4 		99CKK ==II##DMM$1'2D2D>C%E$(MM$7$79 II##D$5$5$1'2C2C>C%E$($5$5$;$;= 	DIIKK

( 99??IIOO%%dii&:&:; 			$))T%<%<=		TYY223;;"KKOOBt//44dii@A"jjnn.$)r   c                 2    SUl         U R                  U5      $ r   )usedr  r   s     r   visit_DefNode!ControlFlowAnalysis.visit_DefNode  s    	%%d++r   c                     U$ r   rN   r   s     r   visit_GeneratorBodyDefNode.ControlFlowAnalysis.visit_GeneratorBodyDefNode      r   c                     U$ r   rN   r   s     r   visit_CTypeDefNode&ControlFlowAnalysis.visit_CTypeDefNode  r  r   Nc                    U R                   R                  (       d  g U R                   R                  (       ab  U R                   R                  S   nU R                   R                  R                  UR                  5        U R                   R                  5         U(       d  U R                  nUR                  (       a^  UR                  b  UR                  nO%U R                  R                  UR                  5      nUc  g U R                   R                  XXSS9  OUR                  (       a  [        UR                  5       Hl  u  pgUR                   (       a$  [#        [$        R&                  SUR(                  S9nO"X R                  L a  UnOUR+                  U5      nU R                  XxUS9  Mn     OU R-                  U5        U R                   R                  (       ac  U R                   R                  S   nU R                   R                  R                  UR                  5        U R                   R                  5         g g )Nr   Fr   )r?  rJ   rb   rK   rc   rl   r  is_namerw   r  lookupr1  r   is_sequence_constructor	enumerater  
is_starredr   r   	list_typer   inferable_item_noder  )	r   r   r   r   	exc_descrrw   r  r  	item_nodes	            r   r   #ControlFlowAnalysis.mark_assignment  s   yy99		,,R0IIIOO%%i&;&;<II!""C;;yy$		1}II%%c%K((#CHH->> -g.?.?UX[X_X_ `I,,, #I # 7 7 :I$$Sy$I . KK99		,,R0IIIOO%%i&;&;<II!  r   c                 d    U R                   S   (       a  U R                  R                  U5        gg)z'Mark position if DOT output is enabled.r  N)r  r?  r   r   s     r   r   !ControlFlowAnalysis.mark_position:  s(    ""#<=II##D) >r   c                     UR                    H  u  p#US:w  d  M  U R                  U5        M      U R                  U5        U$ )N*)r   r   r  )r   r   r1  targets       r   visit_FromImportStatNode,ControlFlowAnalysis.visit_FromImportStatNode?  s<     JJLDs{$$V, ' 	4 r   c                 0    [        S[        U5      -  5      e)NzUnhandled assignment node %s)r
   r   r   s     r   visit_AssignmentNode(ControlFlowAnalysis.visit_AssignmentNodeF  s    :T$ZGHHr   c                     U R                  UR                  5        U R                  UR                  UR                  5        U$ r   )r  r   r   r   r   s     r   rz  .ControlFlowAnalysis.visit_SingleAssignmentNodeI  s/    DHHTXXtxx0r   c                     U R                  UR                  5        UR                   H  nU R                  X!R                  5        M      U$ r   )r  r   r}  r   r~  s      r   r  0ControlFlowAnalysis.visit_CascadedAssignmentNodeN  s7    DHH==C  hh/ !r   c                     [        5       nUR                  U5        UR                   H  u  p4U R                  U5        M     UR                   H  u  p4U R	                  X45        M     U$ r   )rr  r  rg  r  r   )r   r   	collectorr   r   s        r   visit_ParallelAssignmentNode0ControlFlowAnalysis.visit_ParallelAssignmentNodeT  s[    ')	%!--HCKK .!--HC  * .r   c                     SU l         U R                  U5        SU l         U R                  UR                  U R	                  UR                  5       5      5        U$ r{   )r  r  r   r   r  create_binop_noder   s     r   visit_InPlaceAssignmentNode/ControlFlowAnalysis.visit_InPlaceAssignmentNode]  sM    %)"4 %*"TXXt';';D<R<R<T'UVr   c                    UR                    H  nUR                  (       a  UR                  =(       d%    U R                  R	                  UR
                  5      nUR                  (       d  UR                  (       a#  [        UR                  SUR
                  -  5        UR                  (       d  U R                  U5        U R                  R                  X#5        M  U R                  U5        M     U$ )Nz7can not delete variable '%s' referenced in nested scope)r  r  rw   r  r  r1  rt   rs   r   r   ignore_nonexistingr  r?  r   r  s       r   visit_DelStatNode%ControlFlowAnalysis.visit_DelStatNoded  s    99C{{		>TXX__SXX%>##u'9'9#''79>DE ..KK$		''3C   r   c                     U R                   R                  UR                  5      nU(       aB  UR                  (       + nU R                  R                  U[        UR                  U5      U5        U$ r   )r  r  r1  not_noner?  r   r   r   )r   r   rw   r   s       r   visit_CArgDeclNode&ControlFlowAnalysis.visit_CArgDeclNodes  sQ    		*"mm+KII##mEJJ<eEr   c                 \   U R                   R                  (       a  UR                  =(       d%    U R                  R	                  UR
                  5      nU(       aQ  U R                   R                  X5        X R                  ;   a'  U R                  (       d  [        UR                  S5        U$ )Nz+Cannot read reduction variable in loop body)r?  rJ   rw   r  r  r1  r   r  r  r   r   r   s      r   visit_NameNode"ControlFlowAnalysis.visit_NameNode{  sl    99??JJ<$((//$))"<E		((5OO+D4N4N$((GI r   c                     U R                   R                  (       aI  UR                   H9  nU R                  U5        U R                   R                  (       a  M1  SUl          U$    U$ r   )r?  rJ   r4   r  is_terminator)r   r   r   s      r   visit_StatListNode&ControlFlowAnalysis.visit_StatListNode  sK    99??

D!yy)-D& #
 r   c                 J    U R                  U5        U R                  U5        U$ r   )r  r   r   s     r   rw  ControlFlowAnalysis.visit_Node  s#    4 4 r   c                     U$ r   rN   r   s     r   visit_SizeofVarNode'ControlFlowAnalysis.visit_SizeofVarNode  r  r   c                     U$ r   rN   r   s     r   visit_TypeidNode$ControlFlowAnalysis.visit_TypeidNode  r  r   c                 |   U R                   R                  5       nU R                   R                  nUR                   H  nU R                   R	                  U5      nU R                  UR                  5        U R                   R	                  5         U R                  UR                  5        U R                   R                  (       d  M  U R                   R                  R                  U5        M     UR                  (       au  U R                   R	                  US9  U R                  UR                  5        U R                   R                  (       a%  U R                   R                  R                  U5        OUR                  U5        UR                  (       a  X R                   l        U$ S U R                   l        U$ NrD   )r?  ri   rJ   
if_clausesrl   r  	conditionr  rK   else_clauser2   )r   r   r   rD   clauses        r   visit_IfStatNode$ControlFlowAnalysis.visit_IfStatNode  s%   YY'')
ooFYY((0FKK(()II!KK$yy		))*5 & IIv.KK(()yy		))*5Z((IIO  #DIIOr   c                 h   U R                  U5        U R                  R                  5       nU R                  R                  nU R                  R	                  U5      nU R                  UR                  5        U R                  R	                  5         U R                  UR                  5        U R                  R                  (       a%  U R                  R                  R                  U5        UR                  U5        UR                  (       a  X R                  l        U$ SU R                  l        U$ )z@Essentially an if-condition that wraps a RaiseStatNode.
        N)
r   r?  ri   rJ   rl   r  r  	exceptionrK   r2   r   r   r   rD   s       r   visit_AssertStatNode(ControlFlowAnalysis.visit_AssertStatNode  s     	4 YY'')
$$V,DNN#		DNN#99??IIOO%%j1$(IIO  #DIIOr   c                 4   U R                   R                  5       nU R                   R                  5       nU R                   R                  R	                  [        X25      5        UR                  (       a  U R                  UR                  5        U R                   R                  5         U R                  UR                  5        U R                   R                  R                  5         U R                   R                  (       aJ  U R                   R                  R                  U5        U R                   R                  R                  U5        UR                  (       au  U R                   R                  US9  U R                  UR                  5        U R                   R                  (       a%  U R                   R                  R                  U5        OUR                  U5        UR                  (       a  X0R                   l
        U$ S U R                   l
        U$ r  )r?  rl   ri   ra   r   r   r  r  r  r   rJ   rK   r  r2   r   r   condition_blockr   s       r   visit_WhileStatNode'ControlFlowAnalysis.visit_WhileStatNode  sN   ))--/YY'')
		yEF>>KK'		DII		99??IIOO%%o6IIOO%%j1II7KK(()yy		))*5%%j1(IIO  #DIIOr   c                 F   SnUR                   R                  nUR                  nUR                   R                  =(       d    U R                  n[        U[        R                  5      (       Ga  UR                  nUR                  Gc  UR                  (       Ga  UR                  UR                  5      nU(       a  UR                  (       GaL  UR                  S:X  a*  [        UR                  5      S:X  a  UR                  S   nGOUR                  S:X  Ga  [        UR                  5      S:X  a  UR                   (       a  [        UR                  5      S:X  a  UR                  S   nUR                  (       a  UR#                  U5      n	U	R$                  (       a|  U R'                  UR                  S   [        R(                  " UR*                  S[,        R.                  S9UR                   R                  S	9  UR                  S   nUR                  S   n[        U[        R                  5      (       Ga2  UR                  nUR                  Gc  UR                  (       Ga  UR                  UR                  5      nU(       a  UR                  (       a  UR                  S
;   a  SnUR                  S S  H'  n
U R'                  XJUR                   R                  S	9  M)     [        UR                  5      S:  an  U R'                  X@R1                  [        R2                  " UR*                  SUR                  S   UR                  S   5      5      UR                   R                  S	9  U(       d/  U R'                  XAR4                  UR                   R                  S	9  g g )NFr  r   r   r  r   PY_SSIZE_T_MAX)valuer   r   )rangexrangeT+)iteratorsequencer  
expr_scoper  r   r   SimpleCallNodefunctionr   r  r  r1  
is_builtinr	  r  r  r   is_builtin_typer   IntNoder   r   c_py_ssize_t_typer  
binop_nodeitem)r   r   
is_specialr  r  r  r  rw   r
  iterator_typer  s              r   mark_forloop_target'ControlFlowAnalysis.mark_forloop_target  s   
==))mm&&2$((h	 8 899((H}}$)9)9)9

8==1 0 0 0}}
2s8==7IQ7N#+==#3!+5#hmm:LPQ:Q!99c&++>NRS>S'/}}Q'7H'//080C0CC0H#0#@#@$($8$8(.A(1(9(9&**L\?I?[?[)]26--2J2J	 %9 %L
 .4[[^F/7}}Q/?Hh	 8 899((H}}$)9)9)9

8==1 0 0}}(;;%)
#+==!#4C 00H`H`0a $5x}}-1 009M9M ) 4 4TXX585=]]15E5=]]15E!G:H
 ;?--:R:R 1 T    dmm>V>V W r   c                    UR                   nUR                  S S  H  nU R                  X#5        M     [        UR                  5      S:  a[  U R                  X R	                  [
        R                  " UR                  SUR                  S   UR                  S   5      5      5        UR                  (       d  U R                  U5        g g )Nr   r	  r   )r  r  r   r	  r  r   r  r   )r   r   r  r  s       r    mark_parallel_forloop_assignment4ControlFlowAnalysis.mark_parallel_forloop_assignment  s    99Ra=C  - !tyy>A  )=)=$$TXX(+(,		!(,		!6*7 8
 yy  ( r   c                 $    U R                  U5      $ r   )visit_ForInStatNoder   s     r   visit_AsyncForStatNode*ControlFlowAnalysis.visit_AsyncForStatNode*  s    ''--r   c                    U R                   R                  5       nU R                   R                  5       nU R                   R                  R	                  [        X25      5        U R                  UR                  5        U R                   R                  5         [        U[        R                  5      (       a  U R                  U5        O[        U[        R                  5      (       a'  U R                  UR                  UR                  5        OA[        U[        R                   5      (       a  U R#                  U5        O [%        U5      5       e[        U[        R                   5      (       a#  U R'                  XR                  R(                  S9  U R                   R                  5         U R                  UR*                  5        U R                   R                  R-                  5         U R                   R.                  (       a%  U R                   R.                  R1                  U5        UR2                  (       au  U R                   R                  US9  U R                  UR2                  5        U R                   R.                  (       a%  U R                   R.                  R1                  U5        OUR1                  U5        UR4                  (       a  X0R                   l        U$ S U R                   l        U$ )N)excluder  )r?  rl   ri   ra   r   r   r  r
  r   r   ForInStatNoder  AsyncForStatNoder   r  r  ParallelRangeNoder  r   _delete_privatesrw   r  r   rJ   rK   r  r2   r   s       r   r  'ControlFlowAnalysis.visit_ForInStatNode-  s   ))--/YY'')
		yEFDMM"		dE//00$$T*e4455  dii8e556611$7$$t*$5 dE3344!!$0A0A!B		DII		 99??IIOO%%o6II7KK(()yy		))*5%%j1(IIO  #DIIOr   c                     UR                    H@  nU(       a  UR                  ULd  M  U R                  R                  X3R                  5        MB     g r   )assigned_nodesrw   r?  r   )r   r   r!  private_nodes       r   r%  $ControlFlowAnalysis._delete_privates[  s:     //Ll00?		''6H6HI 0r   c                 |   U R                   n[        UR                  S5      (       a  [        U5      U l         UR                   H]  nSUR
                  l        UR                  UR
                     u  pEU(       d  M8  U R                   R                  UR
                  5        M_     U R                  U5      nX l         U$ )Nrw   T)
r  hasattrr  r0   r(  rw   ru   rg  rH   r  )r   r   r  r)  r   	reductions         r   visit_ParallelRangeNode+ControlFlowAnalysis.visit_ParallelRangeNode`  s    __
 4;;((!*oDO $ 3 3<@""9!%!1!1,2D2D!E9OO''(:(:;	 !4 ++D1D$r   c                     UR                    H  nSUR                  l        M     U R                  U5        U R	                  U5        U R                  U5        U$ r   )r(  rw   ru   r%  r  )r   r   r)  s      r   visit_ParallelWithBlockNode/ControlFlowAnalysis.visit_ParallelWithBlockNodes  sQ     //L8<L5 0 	d#4 d#r   c                    U R                   R                  5       nU R                   R                  5       nU R                   R                  R	                  [        X25      5        U R                  UR                  5        U R                  UR                  5        UR                  b  U R                  UR                  5        U R                   R                  5         U R                  UR                  UR                  5        UR                  b`  U R                  UR                  U R                  [        R                  " UR                  SUR                  UR                  5      5      5        U R                   R                  5         U R                  UR                   5        U R                   R                  R#                  5         U R                   R$                  (       a%  U R                   R$                  R'                  U5        UR(                  (       au  U R                   R                  US9  U R                  UR(                  5        U R                   R$                  (       a%  U R                   R$                  R'                  U5        OUR'                  U5        UR*                  (       a  X0R                   l        U$ S U R                   l        U$ )Nr	  r  )r?  rl   ri   ra   r   r   r  bound1bound2stepr   r  r  r   r  r   r  r   rJ   rK   r  r2   r   s       r   visit_ForFromStatNode)ControlFlowAnalysis.visit_ForFromStatNode}  s   ))--/YY'')
		yEFDKK DKK 99 KK		"		T[[$++699   d.B.B$$TXXsDKKK/M N 			DII		99??IIOO%%o6II7KK(()yy		))*5%%j1(IIO  #DIIOr   c                     [        S5      e)NzGeneric loops are not supported)r
   r   s     r   visit_LoopNode"ControlFlowAnalysis.visit_LoopNode  s    =>>r   c                 f    U R                  UR                  UR                  R                  5        U$ r   )r   r   	with_node
enter_callr   s     r   "visit_WithTargetAssignmentStatNode6ControlFlowAnalysis.visit_WithTargetAssignmentStatNode  s%    TXXt~~'@'@Ar   c                     U R                  UR                  5        U R                  UR                  5        U R                  UR                  5        U$ r   )r  managerr>  r  r   s     r   visit_WithStatNode&ControlFlowAnalysis.visit_WithStatNode  s7    DLL!DOO$DIIr   c                 F   U R                   R                  5       nU R                   R                  5         U R                   R                  5       nU R                   R                  R                  [	        U5      5        U R                   R                  5         U R                   R                  R                  U5        U R                   R                  5         U R                   =R                  S-  sl        U R                  UR                  5        U R                   =R                  S-  sl        U R                   R                  R                  5         U R                   R                  (       a  UR                  (       a5  U R                   R                  5         U R                  UR                  5        U R                   R                  (       a%  U R                   R                  R                  U5        UR                   GH  nX0R                   l        UR                  (       a%  UR                   H  nU R                  U5        M     O U R                   R                  U R                   R                  S9nU R                   R                  5         UR                  (       a  U R!                  UR                  5        U R                  UR                  5        U R                   R                  (       d  M  U R                   R                  R                  U5        GM     U R                   R                  (       a2  UR                  U R                   R                  S   R"                  5        UR$                  (       a  X R                   l        U$ S U R                   l        U$ )Nr   r  r  )r?  ri   rb   r   r   rl   rJ   rK   re   r  r  r   r  except_clausespatternr  r   rc   r2   )r   r   r   rc   r  rG  s         r   visit_TryExceptStatNode+ControlFlowAnalysis.visit_TryExceptStatNode  sK   YY'')
		ii((*		##N;$?@		 			!!+.				!#DII		!#		  " 99??		##%D,,-yy		))*5))F)IIO~~%~~GKK(  . )),,DIIOO,DKII!}}$$V]]3KK$yy		))*5 *  99!!$))"6"6r":"F"FG(IIO  #DIIOr   c                 z   U R                   R                  5       nU R                   R                  5       nX0R                   l        U R	                  UR
                  5        U R                   R                  (       aa  U R                   R                  (       aF  U R                   R                  R                  U R                   R                  S   R                  5        U R                   R                  5       nX@R                   l        U R	                  UR                  5        U R                   R                  n[        X4U5      nU R                   R                  R                  U5        U R                   R                  (       a2  U R                   R                  S   R                  R                  U5        X R                   l        UR                  U5        U R                   R                  5         U R                   =R                  S-  sl        U R	                  UR                  5        U R                   =R                  S-  sl        U R                   R                  R                  5         U R                   R                  (       a1  U R                   R                  S   R                  R                  5         U R                   R                  (       ag  U R                   R                  R                  U5        U(       a*  U R                   R                  US9U R                   l        U$ S U R                   l        U$ )Nr  r   r  )r?  rl   ri   rJ   r  finally_except_clauserb   rK   rc   finally_clauser   r   ra   re   r  r   )r   r   
body_blockrc   r   r   descrs          r   visit_TryFinallyStatNode,ControlFlowAnalysis.visit_TryFinallyStatNode  s   YY((*
 ii((*%		D../99??tyy33IIOO%%dii&:&:2&>&J&JK 		**,'		D''(yy{<H		##E*99??IIOOB**11%8$		[)				!#DII		!#		  "99??IIOOB**..099??IIOO%%m4"&))"5"5\"5"J		  #'		r   c                 r   U R                  U5        U R                  U5        U R                  R                  (       aF  U R                  R                  R                  U R                  R                  S   R                  5        S U R                  l        U R                  R                  (       a  SUl        U$ )Nr  T)r   r  r?  rb   rJ   rK   rc   re   r   s     r   visit_RaiseStatNode'ControlFlowAnalysis.visit_RaiseStatNode	  s{    4 4 99IIOO%%dii&:&:2&>&J&JK		99!! $Dr   c                    U R                  U5        U R                  R                  (       aF  U R                  R                  R	                  U R                  R                  S   R
                  5        S U R                  l        U$ Nr  )r   r?  rb   rJ   rK   rc   r   s     r   visit_ReraiseStatNode)ControlFlowAnalysis.visit_ReraiseStatNode  sX    4 99IIOO%%dii&:&:2&>&J&JK		r   c                    U R                  U5        U R                  U5        [        U R                  R                  S S S2   5      nU H  nUR
                  (       d  M  U R                  R                  R                  UR
                  5        UR                  (       aY  U R                  R                  nU H"  nUR
                  (       d  M  UR
                  n  O   UR                  R                  U5          OV   U R                  R                  (       a9  U R                  R                  R                  U R                  R                  5        S U R                  l        U$ rU  )
r   r  iterr?  rb   r   rJ   rK   r   rd   )r   r   outer_exception_handlershandlerrd   next_handlers         r   visit_ReturnStatNode(ControlFlowAnalysis.visit_ReturnStatNode  s   4 4 #'		(<(<TrT(B#C /G$$$		))'*?*?@''!%!5!5J(@'555)5)C)CJ! )A ((22:> 0 yy		))$))*>*>?		r   c                 6   U R                   R                  (       d  U$ U R                   R                  S   nU R                  U5        UR                  S S S2    H{  nUR                  (       d  M  U R                   R
                  R                  UR                  5        UR                  (       a%  UR                  R                  UR                  5          O1   U R                   R
                  R                  UR                  5        S U R                   l        U$ rU  )	r?  ra   r   rb   r   rJ   rK   r   r   r   r   loopr  s       r   visit_BreakStatNode'ControlFlowAnalysis.visit_BreakStatNode1      yyKyyr"4 2.I&&&		)))*A*AB))**44T__E / IIOO%%doo6		r   c                 6   U R                   R                  (       d  U$ U R                   R                  S   nU R                  U5        UR                  S S S2    H{  nUR                  (       d  M  U R                   R
                  R                  UR                  5        UR                  (       a%  UR                  R                  UR                  5          O1   U R                   R
                  R                  UR                  5        S U R                   l        U$ rU  )	r?  ra   r   rb   r   rJ   rK   r   r   r`  s       r   visit_ContinueStatNode*ControlFlowAnalysis.visit_ContinueStatNodeB  rd  r   c                 H   UR                   (       aB  U R                  R                  U R                  U R                  45        UR                   U l        U R                  UR                  5        UR                   (       a"  U R                  R                  5       u  U l        nU$ r   )r  r  r   r  r?  r  ra  r   r   r   r^  s      r   visit_ComprehensionNode+ControlFlowAnalysis.visit_ComprehensionNodeS  se    ??JJtxx34DHDII??**..*KDHar   c                    [        U[        R                  [        R                  45      (       d   U5       eUR                  (       ab  U R
                  R                  U R                  U R                  45        U R                  UR                  5      U l        UR                  U l        U R                  U5        UR                  (       a'  U R
                  R                  5       u  U l        U l        U$ r   )r   r   IteratorNodeAsyncIteratorNoder  r  r   r  r?  r  r  r   r   s     r   visit_ScopedExprNode(ControlFlowAnalysis.visit_ScopedExprNode]  s     $!7!79T9T UVV\X\\V??JJtxx34**4??;DIDH4 ??"&**.."2DHdir   c                    U R                  US5        U R                  R                  UR                  UR                  U R
                  R                  UR                  R                  5      5        U R                  R                  U R
                  U R                  45        UR                  U l        U R                  R                  5         UR                  (       a?  U R                  R                  UR                  [        UR                  R                  5        U R                  US5        U R                  R                  5         U R                  R                  5       u  U l        nU$ )N)dict	metaclassmkwbasesclass_result)r  )r  r?  r   r  classobjr  r  r1  r  r   r   rl   doc_noder   rw   r   ri  s      r   visit_PyClassDefNode(ControlFlowAnalysis.visit_PyClassDefNodej  s    4 "B 	C		!!$++t}}"&((//$++2B2B"C	E

488TYY/0::		==II%%dmm]DMMDWDWX4+		jjnn&!r   c                     U R                   R                  UR                  U R                  45        U R	                  U5        U R                   R                  5         U$ r   )r  r   r   r?  r  r   r   s     r   visit_CClassDefNode'ControlFlowAnalysis.visit_CClassDefNodey  sB    

4::tyy124 

r   c                     UR                   R                  (       a   U R                  UR                   [        5        U R	                  U5        U$ r   )operandr  r   r   r  r   s     r   visit_AmpersandNode'ControlFlowAnalysis.visit_AmpersandNode  s6    <<  }=4 r   c                 F   [        UR                  5      S:X  d   eU R                  R                  5       nU R                  R                  nU R                  UR                  5        U R                  R                  5         U R                  UR                  5        U R                  R                  (       a%  U R                  R                  R                  U5        UR                  U5        UR                  (       a  X R                  l        U$ S U R                  l        U$ rW  )r	  subexprsr?  ri   rJ   r  operand1rl   operand2rK   r2   r  s       r   visit_BoolBinopNode'ControlFlowAnalysis.visit_BoolBinopNode  s    4==!Q&&&YY'')
DMM"		DMM"99??IIOO%%j1$(IIO  #DIIOr   c                    [        UR                  5      S:X  d   eU R                  UR                  5        U R                  R
                  nU R                  R                  5       nU R                  R                  5         U R                  UR                  5        U R                  R
                  (       a%  U R                  R
                  R                  U5        U R                  R                  US9  U R                  UR                  5        U R                  R
                  (       a%  U R                  R
                  R                  U5        UR                  (       a  X0R                  l        U$ S U R                  l        U$ )N   r  )r	  r  r  testr?  rJ   ri   rl   true_valrK   	false_valr2   )r   r   rD   r   s       r   visit_CondExprNode&ControlFlowAnalysis.visit_CondExprNode  s    4==!Q&&&DIIYY'')
		DMM"99??IIOO%%j1		6*DNN#99??IIOO%%j1(IIO  #DIIOr   )r  r  r?  r  r  r  r  r  r#   r   )6r$   r%   r&   r'   r  r  r  r  r  r  r   r   r  r  rz  r  r  r  r  r  r  r  rw  r  r  r  r  r  r  r  r  r  r%  r.  r1  r7  r:  r?  rC  rH  rO  rR  rV  r]  rb  rf  rj  ro  ry  r|  r  r  r  r(   rN   r   r   r  r    s   20d,""H*
I


4(<3Xj).,\J
&#J?1f%N."",r   r  )+cythondeclareobjectr  r   r   r   r   r   Visitorr   r	   Errorsr   r   r
   ExprNoder   unspecified_typer   r,   rP   rU   r\   r   r   r   r   r   r   r   r   r   r"  r  r  r=  rK  cfuncrr  rp  rr  r  rN   r   r   <module>r     sr    &F&&66#66#6;
      1 1 1*I&& * j99:4  4 n  
K* K*\ ) )" "@~ $~ > * *B B	F 	Ft >&= &=R <) )& H8K H8d H8 H8V5+ 5 x/ xr   