3
‡Œði¼  ã               @   sj   d Z ddlmZ ddlmZmZmZmZmZm	Z	 ddl
mZ ddlmZmZ dd„ ZG dd	„ d	ejƒZd
S )zn
Fixer for (metaclass=X) -> __metaclass__ = X
Some semantics (see PEP 3115) may be altered in the translation.é    )Ú
fixer_base)ÚNameÚsymsÚNodeÚLeafÚNewlineÚ	find_root)Útoken)ÚindentationÚsuitifyc       
      C   s  d }�x| j D � ]ú}|j }|jtjkrd|d ttjdƒkrb|d ttjdƒkrb|d rb|g| }P q|jtjkrx˜|j D ]Ž}|r‚P |jtj	kr”|}qxt|ƒt
krxd  } }}xX|j D ]N}	|	ttjdƒkrÎ|	}q´|rè|	ttjdƒkrè|	}q´|oî|r´|	}||||f}P q´W qxW qW |S )Nr   Ú	metaclassé   ú=é   )ÚchildrenÚtyper   Úargumentr   r	   ÚNAMEÚEQUALZarglistÚCOMMAr   )
ÚparentÚresultsÚnodeZkidsÚchildÚcommaÚmetaÚequalÚnameÚarg© r   úC/tmp/pip-build-6m2fasei/future/libpasteurize/fixes/fix_metaclass.pyÚhas_metaclass   s6    
 r!   c               @   s   e Zd ZdZdd„ ZdS )ÚFixMetaclassz
    classdef<any*>
    c             C   sè   t |ƒ}|sd S x|D ]}|jƒ  qW ttjdƒ}ttjddd�}|}d|_ttj	|||gƒ}t
|ƒ x||jD ]r}	|	jtjkrnx`|	jD ]V}
|
jtjkr†|	jj|
ƒd }ttj|
jƒ}|	j||ƒ |	j|tƒ ƒ |	j||ƒ P q†W qnW d S )NZ__metaclass__r   ú )Úprefixr   )r!   Úremover   r	   r   r   r$   r   r   Zatomr   r   r   ZsuiteÚINDENTÚindexÚvalueZinsert_childr   )Úselfr   r   Zmeta_resultsr   Útargetr   r   Z	stmt_nodeÚitemÚstmtÚlocÚidentr   r   r    Ú	transform5   s*     
zFixMetaclass.transformN)Ú__name__Ú
__module__Ú__qualname__ZPATTERNr/   r   r   r   r    r"   /   s   r"   N)Ú__doc__Zlib2to3r   Zlib2to3.fixer_utilr   r   r   r   r   r   Zlib2to3.pygramr	   Zlibfuturize.fixer_utilr
   r   r!   ZBaseFixr"   r   r   r   r    Ú<module>   s    $