
    Æe5                         d dl mZ d dlmZmZ d dlZd dlZd dlZd dl	m
Z
mZmZmZmZmZmZ ej"                  Zd Zd Zd Zd Zd	 Zd
 Z G d d      Z G d dej2                        Zd Zy)    )
itemgetter)OptionalTupleN)	argumentsast
exceptionsnameanalyze	pyobjectspyobjectsdefworderc                      t        | |      d   S )zFind the pyname at the offset   )eval_location2)pymoduleoffsets     4/usr/lib/python3/dist-packages/rope/base/evaluate.pyeval_locationr      s    (F+A..    c                 :    t        |       }|j                  |      S )z%Find the primary and pyname at offset)ScopeNameFinderget_primary_and_pyname_at)r   r   pyname_finders      r   r   r      s    #H-M226::r   c                      t        | |      d   S )zlEvaluate a `ast.AST` node and return a PyName

    Return `None` if the expression cannot be evaluated.
    r   )
eval_node2)scopenodes     r   	eval_noder      s    
 eT"1%%r   c                 j    t        |       }|j                  |       |j                  |j                  fS N)StatementEvaluatorvisit
old_resultresult)r   r   	evaluators      r   r   r   '   s/    "5)IOOD!1!111r   c                      t        | |      d   S Nr   )	eval_str2)holding_scopenames     r   eval_strr*   -   s    ]D)!,,r   c                 |    	 t        j                  d|z        }t	        | |      S # t        $ r t        d      w xY w)Nz(%s)z,Not a resolvable python identifier selected.)r   parseSyntaxErrorBadIdentifierErrorr   )r(   r)   r   s      r   r'   r'   1   sH    Qyy$' mT**  Q !OPPQs   & ;c                       e Zd Zd Zd Zd Zd Zdedee	e
j                  j                  j                     e	e
j                  j                  j                     f   fdZd Zd	 Zy
)r   c                     |j                         | _        |j                  | _        t        j                  |j
                  d      | _        y )NT)	get_scopemodule_scopelinesr   Wordersource_code)selfr   s     r   __init__zScopeNameFinder.__init__;   s6    $..0^^
mmH$8$8$?r   c                 8   ||j                         k(  rE|j                  9|j                  j                         dk(  r| j                  j	                  |      ry||j                         k7  r/|j                         dk(  r| j                  j                  |      ryy)NClassTF)	get_startparentget_kindr   %is_a_class_or_function_name_in_headeris_name_assigned_in_class_body)r6   r(   r   linenos       r   _is_defined_in_class_bodyz)ScopeNameFinder._is_defined_in_class_body@   s    m--//$$0$$--/7:AA&Im--//&&(G3::6Br   c                     |j                         |cxk  xr |j                         k  nc xr0 |j                         dk(  xr | j                  j	                  |      S )NFunction)r:   get_body_startr<   r   r=   )r6   r   r   r?   s       r   $_is_function_name_in_function_headerz4ScopeNameFinder._is_function_name_in_function_headerP   sQ    OOA5+?+?+AA J J.JAA&I	
r   c                 *    | j                  |      d   S r&   )r   )r6   r   s     r   get_pyname_atzScopeNameFinder.get_pyname_atW   s    --f5a88r   r   returnc                 ^   | j                   j                  |      }| j                  j                  |      }| j                  j                  |      r| j                  j                  |      }| j                  |      }t        |t        j                        r$|j                         j                  |d       }d |fS t        |t        j                        r,t        j                   j"                  j%                         }d |fS | j'                  |||      r\|}||j)                         k(  r|j*                  }| j                  j-                  |      j/                         }	 d |j0                  |   fS | j7                  |||      r:| j                  j-                  |      j/                         }d |j*                  |   fS | j                  j9                  |      s| j                  j;                  |      r0| j                  j-                  |      }	| j=                  |	      }
d |
fS | j                  j?                  |      r| j                  jA                  |      }n| j                  j-                  |      }tC        ||      S # t        j                   j2                  j4                  $ r Y yw xY w)NNN)"r3   get_line_numberr2   get_inner_scope_for_offsetr   is_function_keyword_parameterget_word_atget_enclosing_function
isinstancer   
PyFunctionget_parametersgetr
   AbstractFunctionropebasepynamesParameterNamer@   r:   r;   get_primary_atstrippyobjectr   AttributeNotFoundErrorrD   is_from_statement_module"is_import_statement_aliased_module_find_moduleis_from_aliasedget_from_aliasedr'   )r6   r   r?   r(   keyword_namerZ   parameter_nameclass_scoper)   modulemodule_pynames              r   r   z)ScopeNameFinder.get_primary_and_pyname_atZ   s@    ++F3))DDVL;;44V<;;226:L226:H(L$;$;<!)!8!8!:!>!>|T!Rn--Hi&@&@A!%!2!2!@!@!Bn--))-H'K0022+22;;--f5;;=D$k224899 44]FFS;;--f5;;=D-..t455;;//
[[;;FC[[//7F --f5M-((;;&&v.;;//7D;;--f5D--# 99''>> $#$s    J 'J,+J,c                 r   | j                   j                  |      }	 | j                  |dz
        }|t|j	                         }t        |t        j                        r|S t        |t        j                        rd|v r|d   j	                         S d|v r|d   j	                         S y # t        $ r d }Y w xY w)Nr   r7   __call__)	r   find_parens_start_from_insiderF   r.   
get_objectrO   r
   rS   AbstractClass)r6   r   function_parensfunction_pynamerZ   s        r   rN   z&ScopeNameFinder.get_enclosing_function   s    ++CCFK	#"0011DEO &&113H(I$>$>?8Y%<%<=*PXBX
+6688x'
+6688 " 	#"O	#s   B( (B65B6c                     d}||   dk(  r|dz  }||   dk(  rt         j                  j                  j                  | j                  j
                  ||d  |      S )Nr   .r   )rT   rU   rV   ImportedModuler2   rZ   )r6   module_namedotss      r   r^   zScopeNameFinder._find_module   sc    $3&AID $3&yy  //&&DE(:D
 	
r   N)__name__
__module____qualname__r7   r@   rD   rF   intr   r   rT   rU   rV   PyNamer   rN   r^    r   r   r   r   :   sm    @
 
9).). 
x		))0018DII<M<M<T<T3UU	V).V$
r   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZd Zy)r    c                 .    || _         d | _        d | _        y r   )r   r#   r"   )r6   r   s     r   r7   zStatementEvaluator.__init__   s    
r   c                 X    | j                   j                  |j                        | _        y r   )r   lookupidr#   r6   r   s     r   _NamezStatementEvaluator._Name   s    jj''0r   c                    t        | j                  |j                        }|(t        j                  j
                  j                         }|| _        |j                         t        j                  j                  j                         k7  r$	 |j                         |j                     | _        y y # t        j                  $ r
 d | _        Y y w xY wr   )r   r   valuerT   rU   rV   UnboundNamer"   ri   r
   get_unknownattrr#   r   r[   )r6   r   pynames      r   
_AttributezStatementEvaluator._Attribute   s    4::tzz2>YY&&224F $))"5"5"A"A"CC#$//1$))< D 44 #"#s   "B0 0CCc                      j                  j                        \  }|y  fd}t        |t        j                  j
                  j                        rd }d|v r|d   j                         } ||      }|+|t        j                  j
                  j                         k(  r)t        j                  j
                  j                  |      }t        j                  j                  j                  |       _        y d }t        |t        j                  j
                  j                        r|}nd|v r|d   j                         }|6t        j                  j                  j                   ||             _        y y )Nc                 j    t        j                  | j                        }| j                  |      S r   )r   create_argumentsr   get_returned_object)rZ   argsr   primaryr6   s     r   _get_returnedz/StatementEvaluator._Call.<locals>._get_returned   s.    --gxtzzRD//55r   __new__rZ   rg   ) _get_primary_and_object_for_nodefuncrO   rT   rU   r
   rj   ri   r   PyObjectrV   r   r#   rS   )r6   r   rZ   r   r#   new_function
pyfunctionr   s   ``     @r   _CallzStatementEvaluator._Call   s>    AA$))L	6 h		 3 3 A ABFH$'	2==?&|4~499+>+>+J+J+L!L,,55h?))++777HDK
h		 3 3 D DE!J8#!*-88:J!))++77&z2 8 DK "r   c                     t         j                  j                  j                  t         j                  j                  j                               | _        y Nr   )rT   rU   rV   r   builtinsget_strr#   r}   s     r   _StrzStatementEvaluator._Str   s9    ii''33YY''//1 4 
r   c                 n    t        |j                        j                  }| j                  |      | _        y r   )typenrr   _get_builtin_namer#   r6   r   	type_names      r   _NumzStatementEvaluator._Num   s'    L))	,,Y7r   c                     t        |j                        j                  }	 | j                  |      | _        y # t
        j                  $ r Y y w xY wr   )r   r   rr   r   r#   r   r[   r   s      r   	_ConstantzStatementEvaluator._Constant   sE    $--		00;DK00 		s   8 AAc                    t         j                  j                  j                  |   j                         }t         j                  j                  j                  t         j                  j                  j                  |            S r   )rT   rU   r   ri   rV   r   r
   r   )r6   r   pytypes      r   r   z$StatementEvaluator._get_builtin_name   sU    ##,,Y7BBDyy  ,,TYY-@-@-I-I&-QRRr   c                     t         j                  j                  j                  | j	                  |j
                              | _        y r   )rT   rU   rV   r   _get_object_for_nodeleftr#   r}   s     r   _BinOpzStatementEvaluator._BinOp   s0    ii''33%%dii0
r   c                     | j                  |j                  d         }|| j                  |j                  d         }t        j                  j                  j                  |      | _        y )Nr   r   )r   valuesrT   rU   rV   r   r#   r6   r   rZ   s      r   _BoolOpzStatementEvaluator._BoolOp   sT    ,,T[[^<00Q@Hii''33H=r   c                 0    | j                  d      | _        y )Nstrr   r#   r}   s     r   _ReprzStatementEvaluator._Repr   s    ,,U3r   c                     t         j                  j                  j                  | j	                  |j
                              | _        y r   )rT   rU   rV   r   r   operandr#   r}   s     r   _UnaryOpzStatementEvaluator._UnaryOp   s0    ii''33%%dll3
r   c                 0    | j                  d      | _        y )Nboolr   r}   s     r   _ComparezStatementEvaluator._Compare   s    ,,V4r   c                    d }d }|j                   r~|j                   d   rot        t        t        t	        d      t        |j                   |j                                    d      \  }}|r| j                  |      }|r| j                  |      }t        j                  j                  j                  t        j                  j                  j                  ||            | _        y )Nr   rI   r   )keysnextiterfilterr   zipr   r   rT   rU   rV   r   r   get_dictr#   )r6   r   r   r   s       r   _DictzStatementEvaluator._Dict   s    991VJqM3tyy$+++FGH,LD& 006226:ii''33YY''00v> 4 
r   c                    d }|j                   r| j                  |j                   d         }t        j                  j                  j                  t        j                  j                  j                  |            | _        y )Nr   r   )	eltsr   rT   rU   rV   r   r   get_listr#   )r6   r   holdings      r   _ListzStatementEvaluator._List  s_    99//		!=Gii''33YY''009 4 
r   c                     | j                  |      }t        j                  j                  j	                  t        j                  j
                  j                  |            | _        y r   )_what_does_comprehension_holdrT   rU   rV   r   r   r   r#   r   s      r   	_ListCompzStatementEvaluator._ListComp  sK    55d;ii''33YY''00: 4 
r   c                     | j                  |      }t        j                  j                  j	                  t        j                  j
                  j                  |            | _        y r   )r   rT   rU   rV   r   r   get_iteratorr#   r   s      r   _GeneratorExpz StatementEvaluator._GeneratorExp  sK    55d;ii''33YY''44X> 4 
r   c                 x    | j                  |      }t        ||j                        }||j                         S d S r   )_make_comprehension_scoper   eltri   )r6   r   r   r   s       r   r   z0StatementEvaluator._what_does_comprehension_hold  s;    ..t45$((+&,&8v  "BdBr   c                 Z   | j                   }|j                  j                         }i }|j                  D ]@  }t	        |j
                  |j                  |d|j                        }|j                  |       B t        j                  j                  j                  |j                  ||      S )Nz.__iter__().next())r   rZ   
get_module
generators_get_evaluated_namestargetr   r?   updaterT   rU   pyscopesTemporaryScopepycore)r6   r   r   rd   namescomp	new_namess          r   r   z,StatementEvaluator._make_comprehension_scope$  s    

**,OO 	$D,TYY0DdkkI LL#		$
 yy!!00ueLLr   c                    g }t        |j                        dk  r4|j                  D ]$  }| j                  |      }|j                  |       & n-|j                  | j                  |j                  d                t        j
                  j                  j                  t	        j
                  j                  j                  |       | _
        y )N   r   r   )lenr   r   appendrT   rU   rV   r   r   	get_tupler#   )r6   r   objectsstmtrZ   s        r   _TuplezStatementEvaluator._Tuple/  s    tyy>A		 )44T:x() NN444TYYq\BCii''33YY''117; 4 
r   c                 Z    t        | j                  |      }d }||j                         }|S r   )r   r   ri   )r6   r   r   rZ   s       r   r   z'StatementEvaluator._get_object_for_node;  s0    4::t,((*Hr   c                 d    t        | j                  |      \  }}d }||j                         }||fS r   )r   r   ri   )r6   r   r   r   rZ   s        r   r   z3StatementEvaluator._get_primary_and_object_for_nodeB  s:    $TZZ6((*H  r   c                    t        |j                  t        j                        r3| j	                  |j
                  d|j                  j
                  g       y t        |j                  t        j                        r)| j	                  |j
                  d|j                  g       y t        |j                  t        j                        r)| j	                  |j
                  d|j
                  g       y y )N__getitem__)rO   slicer   Index_call_functionr   Sliceexprr}   s     r   
_SubscriptzStatementEvaluator._SubscriptI  s    djj#)),

MDJJ<L<L;MN

CII.

MDJJ<H

CHH-

MDJJ<H .r   c                 0    | j                  d      | _        y )Nr   r   r}   s     r   _SlicezStatementEvaluator._SliceQ  s    ,,W5r   Nc                    t        | j                  |      }||j                         }ny ||v r||   j                         }|rt        |t        j
                        sy |g}|r||z  }t        j                  || j                        }t        j                  j                  j                  |j                  |            | _        y y r   )r   r   ri   rO   r
   rS   r   	ArgumentsrT   rU   rV   r   r   r#   )	r6   r   function_name
other_argsr   rZ   calledr   
arguments_s	            r   r   z!StatementEvaluator._call_functionT  s    4::t,((*HH$m,779FFI4N4N!O6D
"",,T4::>J))++7733J? 8 DK %r   c                     t         j                  j                  j                  t         j                  j                  j                  || j                              | _        y r   )rT   rU   rV   r   r   Lambdar   r#   r}   s     r   _LambdazStatementEvaluator._Lambdaf  sA    ii''33YY''..tTZZ@ 4 
r   r   )rr   rs   rt   r7   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rw   r   r   r    r       s    
1	#:

8S

>4

5



C
	M

!I6$
r   r    c                 .   i }t        j                  |       D ]z  \  }}t        j                  j                  j                  |||      }t        j                  j                  j                  ||      }	|	j                  j                  |       |	||<   | |S r   )
r	   get_name_levelsrT   rU   rV   AssignmentValue
pynamesdefAssignedNameassignmentsr   )
targetsassignedrd   
evaluationr?   r#   r)   levels
assignmentr   s
             r   r   r   l  s    F#33G< fYY&&66xT
%%2266B!!*-t Mr   )operatorr   typingr   r   rope.base.builtinsrT   rope.base.pynamesrope.base.pyobjects	rope.baser   r   r   r	   r
   r   r   r.   r   r   r   r   r*   r'   r   RopeNodeVisitorr    r   rw   r   r   <module>r     sv     "       22 /
;&2-+c
 c
LI
,, I
Xr   