o
    í@Ëa°
  ã                   @   s   d Z ddlmZ ddlmZmZmZ ddlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ dd„ Zdd„ Zd	S )
zIThis module turns a python AST into an optimized, pythran compatible ast.é    )ÚExtendedSyntaxCheck)ÚComprehensionPatternsÚListCompToGenexpÚRemoveDeadFunctions)ÚExpandBuiltinsÚExpandImportsÚExpandImportAllÚFalsePolymorphismÚNormalizeCompareÚNormalizeExceptionÚNormalizeMethodCallsÚNormalizeReturnÚNormalizeTuplesÚRemoveComprehensionÚRemoveNestedFunctionsÚRemoveLambdasÚUnshadowParametersÚRemoveNamedArgumentsÚExpandGlobalsÚNormalizeIsNoneÚNormalizeIfElseÚNormalizeStaticIfÚSplitStaticExpressionÚRemoveFStringsc                 C   sn  |   t|¡ |   t|¡ |   t|¡ |   t|¡ |   t|¡ |   t|¡ |   t|¡ |   t|¡ |   t	|¡ |   t
|¡ |   t|¡ |   t|¡ |   t|¡ |   t|¡ |   t|¡ |   t|¡ |   t|¡ |   t|¡ |   t|¡ |  t|¡ |   t|¡ |   t|¡ |   t|¡ |   t|¡ |   t|¡ |   t|¡ d}|rµd}|D ]}||   ||¡d O }q¤|s dS dS )z? Refine node in place until it matches pythran's expectations. TFr   N)Zapplyr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   Zgatherr   r   r   r   r   r   r	   )ZpmÚnodeZoptimizationsZapply_optimisationÚoptimization© r   ú2/usr/lib/python3/dist-packages/pythran/middlend.pyÚrefine   s@   ýr   c                 C   s@   ddl m}m} | jD ]}t|dƒr|j|vr|||ƒ ƒ q| S )Nr   )ÚaddÚLocalÚname)Zpythran.metadatar   r    ÚbodyÚhasattrr!   )ZirZexported_functionsZMDaddZMDLocalr   r   r   r   Úmark_unexported_functions@   s   


€r$   N)Ú__doc__Zpythran.analysesr   Zpythran.optimizationsr   r   r   Zpythran.transformationsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r   r   r   r   Ú<module>   s    X-