o
    í@ËaÖ  ã                   @   sT   d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	 ddl
ZG dd„ deƒZdS )	z7 ExpandBuiltins replaces builtins by their full paths. é    )ÚGlobalsÚLocals)ÚTransformation)ÚPythranSyntaxError)ÚMODULESNc                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚExpandBuiltinsaj  
    Expands all builtins into full paths.

    >>> import gast as ast
    >>> from pythran import passmanager, backend
    >>> node = ast.parse("def foo(): return list()")
    >>> pm = passmanager.PassManager("test")
    >>> _, node = pm.apply(ExpandBuiltins, node)
    >>> print(pm.dump(backend.Python, node))
    def foo():
        return builtins.list()
    c                 C   s   t  | tt¡ d S )N)r   Ú__init__r   r   )Úself© r
   úI/usr/lib/python3/dist-packages/pythran/transformations/expand_builtins.pyr      s   zExpandBuiltins.__init__c                 C   s.   d| _ t t dt ¡ d d ¡t|jƒt ¡ ¡S )NTÚbuiltins)ÚupdateÚastÚ	AttributeÚNameÚLoadÚstrÚvalue)r	   Únoder
   r
   r   Úvisit_NameConstant   s   ýz!ExpandBuiltins.visit_NameConstantc                 C   st   |j }t|jtjƒr8|| j| vr8|| jvr8|td v r8|dkr%td|ƒ‚d| _	t 
t dt ¡ d d ¡||j¡S |S )Nr   ÚgetattrzYou fool! Trying a getattr?T)ÚidÚ
isinstanceÚctxr   r   ÚlocalsÚglobalsr   r   r   r   r   )r	   r   Úsr
   r
   r   Ú
visit_Name$   s"   ÿþ
ý
ýzExpandBuiltins.visit_NameN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r
   r
   r
   r   r      s
    r   )r!   Zpythran.analysesr   r   Zpythran.passmanagerr   Zpythran.syntaxr   Zpythran.tablesr   Zgastr   r   r
   r
   r
   r   Ú<module>   s    