U
    +‰d  ã                   @   sH   d dl mZ G dd„ deƒZG dd„ deƒZG dd„ deƒZdd	„ Zd
S )é    )Ú	CallInstrc                   @   sP   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zed	d
„ ƒZedd„ ƒZ	edd„ ƒZ
dS )ÚVisitorc                 C   s    || _ |jD ]}|  |¡ qd S ©N)Ú_moduleZ	functionsÚvisit_Function)ÚselfÚmoduleÚfunc© r
   ú:/tmp/pip-unpacked-wheel-stw2luzp/llvmlite/ir/transforms.pyÚvisit   s    
zVisitor.visitc                 C   s    || _ |jD ]}|  |¡ qd S r   )Ú	_functionÚblocksÚvisit_BasicBlock)r   r	   Úbbr
   r
   r   r   
   s    
zVisitor.visit_Functionc                 C   s    || _ |jD ]}|  |¡ qd S r   )Ú_basic_blockZinstructionsÚvisit_Instruction)r   r   Úinstrr
   r
   r   r      s    
zVisitor.visit_BasicBlockc                 C   s   t ‚d S r   ©ÚNotImplementedError©r   r   r
   r
   r   r      s    zVisitor.visit_Instructionc                 C   s   | j S r   )r   ©r   r
   r
   r   r      s    zVisitor.modulec                 C   s   | j S r   )r   r   r
   r
   r   Úfunction   s    zVisitor.functionc                 C   s   | j S r   )r   r   r
   r
   r   Úbasic_block   s    zVisitor.basic_blockN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   Úpropertyr   r   r   r
   r
   r
   r   r      s   

r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚCallVisitorc                 C   s   t |tƒr|  |¡ d S r   )Ú
isinstancer   Ú
visit_Callr   r
   r
   r   r   %   s    
zCallVisitor.visit_Instructionc                 C   s   t ‚d S r   r   r   r
   r
   r   r    )   s    zCallVisitor.visit_CallN)r   r   r   r   r    r
   r
   r
   r   r   $   s   r   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚReplaceCallsc                    s$   t t| ƒ ¡  || _|| _g | _d S r   )Úsuperr!   Ú__init__ÚorigÚreplÚcalls)r   r$   r%   ©Ú	__class__r
   r   r#   .   s    zReplaceCalls.__init__c                 C   s(   |j | jkr$| | j¡ | j |¡ d S r   )Zcalleer$   Zreplace_calleer%   r&   Úappendr   r
   r
   r   r    4   s    zReplaceCalls.visit_Call)r   r   r   r#   r    Ú__classcell__r
   r
   r'   r   r!   -   s   r!   c                 C   s   t ||ƒ}| | ¡ |jS )zlReplace all calls to `orig` to `repl` in module `mod`.
    Returns the references to the returned calls
    )r!   r   r&   )Úmodr$   r%   Úrcr
   r
   r   Úreplace_all_calls:   s    

r-   N)Zllvmlite.irr   Úobjectr   r   r!   r-   r
   r
   r
   r   Ú<module>   s    	