B
    7r\                 @   st   d dl mZmZmZ d dlmZ G dd deZeddZeddZ	ed	d
Z
dd ZdddZdd Zdd Zd	S )    )get_flow_branch_keywordis_scopeget_parent_scope)execution_allowedc               @   s0   e Zd Zi Zdd Zdd Zdd Zdd Zd	S )
Statusc             C   s   || _ || _| tj|< d S )N)_value_namer   lookup_table)selfvaluename r   :lib/python3.7/site-packages/jedi/evaluate/flow_analysis.py__init__   s    zStatus.__init__c             C   s    | t krtS | tkrt S tS d S )N)	REACHABLEUNREACHABLEUNSURE)r
   r   r   r   invert   s
    zStatus.invertc             C   s(   t | |fkrt S | jr |jr tS tS d S )N)r   r   r   r   )r
   otherr   r   r   __and__   s    zStatus.__and__c             C   s   dt | j| jf S )Nz<%s: %s>)type__name__r   )r
   r   r   r   __repr__   s    zStatus.__repr__N)r   
__module____qualname__r	   r   r   r   r   r   r   r   r   r      s
   r   T	reachableFZunreachableNZunsurec             c   s0   x*t | dd} | d kst| r"d S | V  qW d S )NT)include_flows)r   r   )noder   r   r   _get_flow_scopes$   s
    r   c             C   s   t |dd}|d k	rtt|}tt|}d}xl|D ]d}||kr6t||}	t||}
|	|
k}|jdkrr|stS n"|jdkr|s|
dkr|	dkrtS |r6P q6W x"|d k	r||kr|rtS |j}qW t| |||S )NT)r   if_stmttry_stmtelseexcept)	r   listr   r   r   r   r   parent_break_check)contextcontext_scoper   Zorigin_scopeZfirst_flow_scopeZorigin_flow_scopesZnode_flow_scopesZbranch_matches
flow_scopeZnode_keywordZorigin_keywordr   r   r   reachability_check,   s0    




	

r)   c             C   s   t }|jdkrj||rLx(| D ]}t| |}|t tfkr"P q"W | }qx||}|d k	rxt| |}n|jdkrxtS |ttfkr|S ||kr||j	krt
|dd}|t| |||@ S |S d S )Nr   )r    Z
while_stmtT)r   )r   r   Zis_node_after_elseZget_test_nodes	_check_ifr   r   Zget_corresponding_test_noder   r$   r   r%   )r&   r'   r(   r   r   Z
check_nodeZ	flow_noder   r   r   r%   Q   s&    





r%   c          	   C   s^   t | j|H}|stS | |}tdd |D }t|dkrLtj|  S tS W d Q R X d S )Nc             s   s   | ]}|  V  qd S )N)Z
py__bool__).0xr   r   r   	<genexpr>r   s    z_check_if.<locals>.<genexpr>   )	r   Z	evaluatorr   Z	eval_nodesetlenr   r	   pop)r&   r   Zallowedtypesvaluesr   r   r   r*   l   s    
r*   )N)Zjedi.parser_utilsr   r   r   Zjedi.evaluate.recursionr   objectr   r   r   r   r   r)   r%   r*   r   r   r   r   <module>   s   



%