File: //opt/alt/python35/lib64/python3.5/lib2to3/fixes/__pycache__/fix_execfile.cpython-35.pyc
��Yf�  �               @   sy   d  Z  d d l m Z d d l m Z m Z m Z m Z m Z m	 Z	 m
 Z
 m Z m Z m
 Z
 Gd d �  d e j � Z d S)zoFixer for execfile.
This converts usages of the execfile function into calls to the built-in
exec() function.
�   )�
fixer_base)
�Comma�Name�Call�LParen�RParen�Dot�Node�ArgList�String�symsc               @   s(   e  Z d  Z d Z d Z d d �  Z d S)�FixExecfileTz�
    power< 'execfile' trailer< '(' arglist< filename=any [',' globals=any [',' locals=any ] ] > ')' > >
    |
    power< 'execfile' trailer< '(' filename=any ')' > >
    c             C   s�  | s t  � | d } | j d � } | j d � } | j d j d j �  } t | j �  g d | �} t t j t d � | g � } t t j	 t
 �  t d � g � t t j	 t �  t �  g � g }	 | g |	 }
 | j �  } d | _
 t d	 d � } |
 t �  | t �  | g }
 t t d
 � |
 d � } | g } | d  k	 r\| j t �  | j �  g � | d  k	 r�| j t �  | j �  g � t t d � | d
 | j
 �S)N�filename�globals�locals�   Zrparen�open�read� z'exec'�compile� �exec�prefix���r   )�AssertionError�getZchildrenZcloner
   r	   r   Zpowerr   Ztrailerr   r   r   r   r   r   r   �extend)�selfZnodeZresultsr   r   r   Zexecfile_parenZ	open_argsZ	open_callr   Z	open_exprZfilename_argZexec_strZcompile_argsZcompile_call�args� r   �?/opt/alt/python35/lib64/python3.5/lib2to3/fixes/fix_execfile.py�	transform   s*    
!
		zFixExecfile.transformN)�__name__�
__module__�__qualname__Z
BM_compatibleZPATTERNr!   r   r   r   r    r
      s   r
   N)�__doc__r   r   Z
fixer_utilr   r   r   r   r   r   r	   r
   r   r   ZBaseFixr
   r   r   r   r    �<module>   s   F