a XC?h �@srddlmZddlmZddlmZmZmZdd�Zdd�Z dd �Z d d �Z d d �Z dd�Z Gdd�dej�ZdS)�)� fixer_base)�token)�syms�Node�LeafcCsz|jD]n}|jtjkr"t|�S|jtjkr|jr|jd}|jtjkr|jr|jd}t|t�r|j dkrdSqdS)N�� __metaclass__TF) �children�typer�suite� has_metaclass� simple_stmt� expr_stmt� isinstancer�value)�parent�node� expr_nodeZ left_side�r�@/opt/alt/python39/lib64/python3.9/lib2to3/fixes/fix_metaclass.pyr s      �r cCs�|jD]}|jtjkrdSqt|j�D]\}}|jtjkr(qJq(td��ttjg�}|j|dd�r�|j|d}|� |� ��|� �qV|� |�|}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�t|j�D]\}}|jtjkr q(q dS|��ttjg�}ttj |g�}|j|d�rz|j|}|� |� ��|��qJ|� ||�|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&|jd��dS)N�����)r r r�NEWLINEr)rrrr�remove_trailing_newline_sr'ccs�|jD]}|jtjkrq$qtd��tt|j��D]t\}}|jtjkr2|jr2|jd}|jtjkr2|jr2|jd}t |t �r2|j dkr2t |||�t |�|||fVq2dS)NzNo class suite!rr)r r rr r�listrr rrrrr$r')rrrZ simple_noderZ left_noderrr� find_metasds     � r)cCsz|jddd�}|r,|��}|jtjkrq,q|rv|��}t|t�r^|jtjkr^|jrZd|_dS|� |jddd��q,dS)Nr%�) r �popr r�INDENTrr�DEDENTr#�extend)r Zkidsrrrr� fixup_indent{s r/c@seZdZdZdZdd�ZdS)� FixMetaclassTz classdef cCs8t|�s dSt|�d}t|�D]\}}}|}|��q |jdj}t|j�dkr�|jdjtjkrp|jd}n(|jd� �} t tj| g�}|� d|�n�t|j�dkr�t tjg�}|� d|�nZt|j�dk�rt tjg�}|� dt tjd��|� d|�|� dt tjd��ntd ��|jdjd} d | _| j} |j�rZ|�t tjd ��d | _nd | _|jd} d | jd_d | jd_|�|�t|�|j�s�|��t |d�} | | _|�| �|�t tjd��nbt|j�dk�r4|jdjtjk�r4|jdjtjk�r4t |d�} |� d| �|� dt tjd��dS)Nr����r�)�(zUnexpected class definition� metaclass�,� r*r�pass� �����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�sb            ��  zFixMetaclass.transformN)�__name__� __module__� __qualname__Z BM_compatibleZPATTERNrCrrrrr0�sr0N)r*rZpygramrZ fixer_utilrrrr r r$r'r)r/ZBaseFixr0rrrr�s