U
    ?h                     @   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
   H/var/www/html/venv/lib/python3.8/site-packages/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    	