
    c                     t    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dS )    N)astc                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )	ArgumentszA class for evaluating parameters passed to a function

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

    c                 0    || _         || _        d | _        d S N)argsscopeinstance)selfr   r	   s      3lib/python3.11/site-packages/rope/base/arguments.py__init__zArguments.__init__   s    	
    c                     g }|                      |          D ]A}||                    d            |                    |                                           B|S r   get_pynamesappend
get_objectr   
parametersresultpynames       r   get_argumentszArguments.get_arguments   g    &&z22 	3 	3F 3d####f//112222r   c                    d gt          t          |          t          | j                            z  }t          | j                  D ]v\  }}t	          |t
          j                  r?|j        |v r6|                     |j	                  ||
                    |j                  <   ^|                     |          ||<   w|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*oos49~~>>>#DI.. 	4 	4JE3#s{++ 4:0E 448NN394M4Mz''0011 $s 3 3ur   c                 T    | j         r |                     | j         d                   S d S Nr   )r   r!   r   s    r   get_instance_pynamezArguments.get_instance_pyname$   s.    9 	0>>$)A,///	0 	0r   c                 V    t           j        j                            | j        |          S r   )ropebaseevaluate	eval_noder	   )r   ast_nodes     r   r!   zArguments._evaluate(   s    y!++DJAAAr   N)	__name__
__module____qualname____doc__r   r   r   r'   r!    r   r   r   r      sn           
    0 0 0B B B B Br   r   c                    t          |j                  }|                    |j                   |j        }t          | |          r5t          |t          j                  r|	                    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?   ,   sx    	DKK	"###^Fw
++ %
63=0Q0Q %Av|$$$T5!!!r   c                   &    e Zd Zd Zd Zd Zd ZdS )ObjectArgumentsc                     || _         d S r   pynames)r   rD   s     r   r   zObjectArguments.__init__8   s    r   c                     g }| j         D ]A}||                    d            |                    |                                           B|S r   )rD   r   r   r   s       r   r   zObjectArguments.get_arguments;   s[    l 	3 	3F 3d####f//112222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   sP                  r   rA   c                   &    e Zd Zd Zd Zd Zd ZdS )MixedArgumentsc                 "    || _         || _        dS )z)`arguments` is an instance of `Arguments`N)r   r   )r   r   	argumentsr	   s       r   r   zMixedArguments.__init__L   s    			r   c                 X    | j         g| j                            |dd                    z   S )N   )r   r   r   rG   s     r   r   zMixedArguments.get_pynamesQ   s)    }ty44Z^DDDDr   c                     g }|                      |          D ]A}||                    d            |                    |                                           B|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   sS          
E E E      r   rJ   c                    | dS |                                  }t          |                                t          j        j        j                  rOt          |t          j        j        j                  r+t          |j        t          j        j        j                  rdS t          |                                t          j        j        j	                  r&t          |t          j        j
        j                  rdS dS )NFT)r   r   get_typer)   r*   	pyobjectsPyClass
PyFunctionparentAbstractClassbuiltinsBuiltinFunction)r;   r<   pyobjects      r   r8   r8   a   s     u!!##H8$$&&	(;(CDDz49#6#ABB z($)*=*EFF
 tTY0>  
Z!3!C
D
D t5r   )	rope.base.evaluater)   	rope.baser   r   r?   rA   rJ   r8   r2   r   r   <module>r]      s             $B $B $B $B $B $B $B $BN" " "       (       ,    r   