3 \�@sVdZddlmZddlmZmZmZmZmZm Z m Z m Z m Z m Z Gdd�dej�ZdS)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@seZdZdZdZdd�ZdS)� FixExecfileTz� power< 'execfile' trailer< '(' arglist< filename=any [',' globals=any [',' locals=any ] ] > ')' > > | power< 'execfile' trailer< '(' filename=any ')' > > cCs0|st�|d}|jd�}|jd�}|jdjdj�}t|j�t�tdd�g|d�}ttj t d�|g�}ttj t �t d �g�ttj t �t�g�g} |g| } |j�} d| _td d�} | t�| t�| g} tt d �| d �}|g}|dk �r�|jt�|j�g�|dk �r|jt�|j�g�tt d �||jd�S)N�filename�globals�locals�z"rb"� )Zrparen�open�readz'exec'�compile��exec)�prefix�����r)�AssertionError�getZchildrenZcloner rr r r ZpowerrZtrailerrrrrr�extend)�selfZnodeZresultsrrrZexecfile_parenZ open_argsZ open_callrZ open_exprZ filename_argZexec_strZ compile_argsZ compile_call�args�r�2/usr/lib64/python3.6/lib2to3/fixes/fix_execfile.py� transforms,      zFixExecfile.transformN)�__name__� __module__� __qualname__Z BM_compatibleZPATTERNr!rrrr r sr N)�__doc__rrZ fixer_utilrrrrrrr r r r ZBaseFixr rrrr �s 0