3 \ �@srddlmZddlmZddlmZmZmZdd�Zdd�Z dd �Z d d �Z d d �Z dd�Z Gdd�dej�ZdS)�)� fixer_base)�token)�syms�Node�LeafcCsxxr|jD]h}|jtjkr t|�S|jtjkr|jr|jd}|jtjkr|jr|jd}t|t�r|j dkrdSqWdS)N�� __metaclass__TF) �children�typer�suite� has_metaclass� simple_stmt� expr_stmt� isinstancer�value)�parent�node� expr_nodeZ left_side�r�3/usr/lib64/python3.6/lib2to3/fixes/fix_metaclass.pyr s      r cCs�x|jD]}|jtjkrdSqWx,t|j�D]\}}|jtjkr,Pq,Wtd��ttjg�}x:|j|dd�r�|j|d}|j |j ��|j �q\W|j |�|}dS)NzNo class suite and no ':'!�) r r rr � enumerater�COLON� ValueErrorr� append_child�clone�remove)�cls_noder�ir � move_noderrr�fixup_parse_tree-s      r c Cs�x(t|j�D]\}}|jtjkr Pq WdS|j�ttjg�}ttj |g�}x2|j|d�r~|j|}|j |j ��|j�qNW|j ||�|jdjd}|jdjd} | j |_ dS)Nr)rr r r�SEMIrrrrr rr� insert_child�prefix) rrZ stmt_nodeZsemi_indrZnew_exprZnew_stmtrZ new_leaf1Z old_leaf1rrr�fixup_simple_stmtGs     r$cCs*|jr&|jdjtjkr&|jdj�dS)Nr�����r%)r r r�NEWLINEr)rrrr�remove_trailing_newline_sr'ccs�x$|jD]}|jtjkrPqWtd��x�tt|j��D]t\}}|jtjkr6|jr6|jd}|jtjkr6|jr6|jd}t |t �r6|j dkr6t |||�t |�|||fVq6WdS)NzNo class suite!rr)r r rr r�listrr rrrrr$r')rrrZ simple_noderZ left_noderrr� find_metasds       r)cCs�|jddd�}x|r.|j�}|jtjkrPqWxL|r||j�}t|t�rd|jtjkrd|jr`d|_dS|j |jddd��q2WdS)Nr�r%r%) r �popr r�INDENTrr�DEDENTr#�extend)r Zkidsrrrr� fixup_indent{s r/c@seZdZdZdZdd�ZdS)� FixMetaclassTz classdef cCs<t|�s dSt|�d}x"t|�D]\}}}|}|j�q"W|jdj}t|j�dkr�|jdjtjkrt|jd}n(|jdj �} t tj| g�}|j d|�n�t|j�dkr�t tjg�}|j d|�nZt|j�dk�rt tjg�}|j dt tjd��|j d|�|j dt tjd��ntd ��|jdjd} d | _| j} |j�r^|jt tjd ��d | _nd | _|jd} d | jd_d | jd_|j|�t|�|j�s�|j�t |d�} | | _|j| �|jt tjd��nbt|j�dk�r8|jdjtjk�r8|jdjtjk�r8t |d�} |j d| �|j dt tjd��dS)Nr����r�)�(zUnexpected class definition� metaclass�,� r*r�pass� �����r%r%r%)r r r)rr r �lenr�arglistrrZ set_childr"rr�RPAR�LPARrrr#r�COMMAr/r&r,r-)�selfrZresultsZlast_metaclassr rZstmtZ text_typer>rZmeta_txtZorig_meta_prefixrZ pass_leafrrr� transform�s^              zFixMetaclass.transformN)�__name__� __module__� __qualname__Z BM_compatibleZPATTERNrCrrrrr0�sr0N)r*rZpygramrZ fixer_utilrrrr r r$r'r)r/ZBaseFixr0rrrr�s