
    Æe                     `    d dl Zd dlmZ  G d d      Zd Z G d d      Z G d d	      Zd
 Zy)    N)astc                   .    e Zd ZdZd Zd Zd Zd Zd Zy)	ArgumentszA class for evaluating parameters passed to a function

    You can use the `create_arguments` factory.  It handles implicit
    first arguments.

    c                 .    || _         || _        d | _        y N)argsscopeinstance)selfr   r	   s      5/usr/lib/python3/dist-packages/rope/base/arguments.py__init__zArguments.__init__   s    	
    c                     g }| j                  |      D ]5  }||j                  d        |j                  |j                                7 |S r   get_pynamesappend
get_objectr   
parametersresultpynames       r   get_argumentszArguments.get_arguments   N    &&z2 	3F~d#f//12		3
 r   c                    d gt        t        |      t        | j                              z  }t        | j                        D ]y  \  }}t	        |t
        j                        rF|j                  |v r8| j                  |j                        ||j                  |j                        <   f| j                  |      ||<   { |S r   )maxlenr   	enumerate
isinstancer   keywordarg	_evaluatevalueindex)r   r   r   r#   r    s        r   r   zArguments.get_pynames   s    #c*os499~>>#DII. 	4JE3#s{{+:0E48NN3994Mz''01 $s 3u		4
 r   c                 X    | j                   r| j                  | j                   d         S y Nr   )r   r!   r   s    r   get_instance_pynamezArguments.get_instance_pyname$   s%    99>>$))A,// r   c                 j    t         j                  j                  j                  | j                  |      S r   )ropebaseevaluate	eval_noder	   )r   ast_nodes     r   r!   zArguments._evaluate(   s#    yy!!++DJJAAr   N)	__name__
__module____qualname____doc__r   r   r   r'   r!    r   r   r   r      s!    
0Br   r   c                    t        |j                        }|j                  |j                         |j                  }t        | |      r6t        |t        j                        r|j                  d|j                         t        ||      S )z"A factory for creating `Arguments`r   )listr   extendkeywordsfunc_is_method_callr   r   	Attributeinsertr"   r   )primary
pyfunction	call_noder	   r   calleds         r   create_argumentsr?   ,   sa    	DKK	""#^^Fw
+
63==0QAv||$T5!!r   c                   $    e Zd Zd Zd Zd Zd Zy)ObjectArgumentsc                     || _         y r   pynames)r   rD   s     r   r   zObjectArguments.__init__8   s	    r   c                     g }| j                   D ]5  }||j                  d        |j                  |j                                7 |S r   )rD   r   r   r   s       r   r   zObjectArguments.get_arguments;   sG    ll 	3F~d#f//12		3
 r   c                     | j                   S r   rC   r   r   s     r   r   zObjectArguments.get_pynamesD   s    ||r   c                      | j                   d   S r%   rC   r&   s    r   r'   z#ObjectArguments.get_instance_pynameG   s    ||Ar   N)r.   r/   r0   r   r   r   r'   r2   r   r   rA   rA   7   s    r   rA   c                   $    e Zd Zd Zd Zd Zd Zy)MixedArgumentsc                      || _         || _        y)z)`arguments` is an instance of `Arguments`N)r   r   )r   r   	argumentsr	   s       r   r   zMixedArguments.__init__L   s    	r   c                 Z    | j                   g| j                  j                  |dd        z   S )N   )r   r   r   rG   s     r   r   zMixedArguments.get_pynamesQ   s(    }tyy44Z^DDDr   c                     g }| j                  |      D ]5  }||j                  d        |j                  |j                                7 |S r   r   r   s       r   r   zMixedArguments.get_argumentsT   r   r   c                     | j                   S r   )r   r&   s    r   r'   z"MixedArguments.get_instance_pyname]   s    {{r   N)r.   r/   r0   r   r   r   r'   r2   r   r   rJ   rJ   K   s    
Er   rJ   c                 F   | y| j                         }t        |j                         t        j                  j
                  j                        rgt        |t        j                  j
                  j                        r9t        |j                  t        j                  j
                  j                        ryt        |j                         t        j                  j
                  j                        r/t        |t        j                  j                  j                        ryy)NFT)r   r   get_typer)   r*   	pyobjectsPyClass
PyFunctionparentAbstractClassbuiltinsBuiltinFunction)r;   r<   pyobjects      r   r8   r8   a   s    !!#H8$$&		(;(;(C(CDz499#6#6#A#ABz(($))*=*=*E*EFTYY00>>
Z!3!3!C!C
Dr   )	rope.base.evaluater)   	rope.baser   r   r?   rA   rJ   r8   r2   r   r   <module>r]      s6     $B $BN" ( ,r   