B
    Ꮚ\                 @   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$   || _ x|jD ]}| | qW d S )N)_moduleZ	functionsvisit_Function)selfmodulefunc r	   5lib/python3.7/site-packages/llvmlite/ir/transforms.pyvisit   s    zVisitor.visitc             C   s$   || _ x|jD ]}| | qW d S )N)	_functionZblocksvisit_BasicBlock)r   r   bbr	   r	   r
   r   
   s    zVisitor.visit_Functionc             C   s$   || _ x|jD ]}| | qW d S )N)_basic_blockZinstructionsvisit_Instruction)r   r   instrr	   r	   r
   r      s    zVisitor.visit_BasicBlockc             C   s   t d S )N)NotImplementedError)r   r   r	   r	   r
   r      s    zVisitor.visit_Instructionc             C   s   | j S )N)r   )r   r	   r	   r
   r      s    zVisitor.modulec             C   s   | j S )N)r   )r   r	   r	   r
   function   s    zVisitor.functionc             C   s   | j S )N)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 )N)
isinstancer   
visit_Call)r   r   r	   r	   r
   r   %   s    
zCallVisitor.visit_Instructionc             C   s   t d S )N)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 )N)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 )N)Zcalleer   Zreplace_calleer    r!   append)r   r   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    Zrcr	   r	   r
   replace_all_calls:   s    

r&   N) r   objectr   r   r   r&   r	   r	   r	   r
   <module>   s    	