a
    ]9úaê  ã                   @   sX   d dl Zd dlmZ G dd„ deƒZdd„ ZG dd„ deƒZG d	d
„ d
eƒZdd„ Z	dS )é    N)Úastc                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )Ú	Argumentsz—A class for evaluating parameters passed to a function

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

    c                 C   s   || _ || _d | _d S ©N)ÚargsÚscopeÚinstance)Úselfr   r   © r	   ú2lib/python3.9/site-packages/rope/base/arguments.pyÚ__init__   s    zArguments.__init__c                 C   s:   g }|   |¡D ]&}|d u r&| d ¡ q| | ¡ ¡ q|S r   ©Úget_pynamesÚappendÚ
get_object©r   Ú
parametersÚresultÚpynamer	   r	   r
   Úget_arguments   s    zArguments.get_argumentsc                 C   sp   d gt t|ƒt| jƒƒ }t| jƒD ]F\}}t|tjƒr\|j|v r\|  |j	¡|| 
|j¡< q$|  |¡||< q$|S r   )ÚmaxÚlenr   Ú	enumerateÚ
isinstancer   ÚkeywordÚargÚ	_evaluateÚvalueÚindex)r   r   r   r   r   r	   r	   r
   r      s    zArguments.get_pynamesc                 C   s   | j r|  | j d ¡S d S ©Nr   )r   r   ©r   r	   r	   r
   Úget_instance_pyname$   s    zArguments.get_instance_pynamec                 C   s   t jj | j|¡S r   )ÚropeÚbaseZevaluateZ	eval_noder   )r   Zast_noder	   r	   r
   r   (   s    zArguments._evaluateN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r    r   r	   r	   r	   r
   r      s   		r   c                 C   sJ   t |jƒ}| |j¡ |j}t| |ƒr@t|tjƒr@| 	d|j
¡ t||ƒS )z"A factory for creating `Arguments`r   )Úlistr   ÚextendÚkeywordsÚfuncÚ_is_method_callr   r   Z	AttributeÚinsertr   r   )ÚprimaryÚ
pyfunctionZ	call_noder   r   Zcalledr	   r	   r
   Úcreate_arguments,   s    
r/   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚObjectArgumentsc                 C   s
   || _ d S r   ©Úpynames)r   r2   r	   r	   r
   r   8   s    zObjectArguments.__init__c                 C   s6   g }| j D ]&}|d u r"| d ¡ q
| | ¡ ¡ q
|S r   )r2   r   r   r   r	   r	   r
   r   ;   s    
zObjectArguments.get_argumentsc                 C   s   | j S r   r1   ©r   r   r	   r	   r
   r   D   s    zObjectArguments.get_pynamesc                 C   s
   | j d S r   r1   r   r	   r	   r
   r    G   s    z#ObjectArguments.get_instance_pynameN)r#   r$   r%   r   r   r   r    r	   r	   r	   r
   r0   7   s   	r0   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚMixedArgumentsc                 C   s   || _ || _dS )z(`argumens` is an instance of `Arguments`N)r   r   )r   r   Z	argumentsr   r	   r	   r
   r   L   s    zMixedArguments.__init__c                 C   s   | j g| j |dd … ¡ S )Né   )r   r   r   r3   r	   r	   r
   r   Q   s    zMixedArguments.get_pynamesc                 C   s:   g }|   |¡D ]&}|d u r&| d ¡ q| | ¡ ¡ q|S r   r   r   r	   r	   r
   r   T   s    zMixedArguments.get_argumentsc                 C   s   | j S r   )r   r   r	   r	   r
   r    ]   s    z"MixedArguments.get_instance_pynameN)r#   r$   r%   r   r   r   r    r	   r	   r	   r
   r4   K   s   	r4   c                 C   sz   | d u rdS |   ¡ }t| ¡ tjjjƒrNt|tjjjƒrNt|jtjjjƒrNdS t| ¡ tjjj	ƒrvt|tjj
jƒrvdS dS )NFT)r   r   Zget_typer!   r"   Z	pyobjectsZPyClassZ
PyFunctionÚparentZAbstractClassÚbuiltinsZBuiltinFunction)r-   r.   Zpyobjectr	   r	   r
   r+   a   s"    ÿþýÿþr+   )
Zrope.base.evaluater!   Z	rope.baser   Úobjectr   r/   r0   r4   r+   r	   r	   r	   r
   Ú<module>   s   '