î
\á[\é  ã               @   s_   d  Z  d d l m Z d d l m Z d d l m Z m Z m Z Gd d „  d e j ƒ Z	 d S)z•Fixer for exec.

This converts usages of the exec statement into calls to a built-in
exec() function.

exec code in ns1, ns2 -> exec(code, ns1, ns2)
é   )Úpytree)Ú
fixer_base)ÚCommaÚNameÚCallc               @   s(   e  Z d  Z d Z d Z d d „  Z d S)ÚFixExecTzx
    exec_stmt< 'exec' a=any 'in' b=any [',' c=any] >
    |
    exec_stmt< 'exec' (not atom<'(' [any] ')'>) a=any >
    c             C   sË   | s t  ‚ |  j } | d } | j d ƒ } | j d ƒ } | j ƒ  g } d | d _ | d  k	 r„ | j t ƒ  | j ƒ  g ƒ n  | d  k	 r¯ | j t ƒ  | j ƒ  g ƒ n  t t d ƒ | d | j ƒS)NÚaÚbÚcÚ é    ÚexecÚprefix)	ÚAssertionErrorÚsymsÚgetZcloner   Úextendr   r   r   )ÚselfZnodeZresultsr   r   r	   r
   Úargs© r   ú,/usr/lib/python3.4/lib2to3/fixes/fix_exec.pyÚ	transform   s    	
zFixExec.transformN)Ú__name__Ú
__module__Ú__qualname__ZBM_compatibleZPATTERNr   r   r   r   r   r      s   r   N)
Ú__doc__r   r   r   Z
fixer_utilr   r   r   ZBaseFixr   r   r   r   r   Ú<module>
   s   