o
    ߐi                     @   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       || _ |jD ]}| | qd S N)_moduleZ	functionsvisit_Function)selfmodulefunc r   e/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/llvmlite/ir/transforms.pyvisit      
zVisitor.visitc                 C   r   r   )	_functionblocksvisit_BasicBlock)r   r
   bbr   r   r   r   
   r   zVisitor.visit_Functionc                 C   r   r   )_basic_blockZinstructionsvisit_Instruction)r   r   instrr   r   r   r      r   zVisitor.visit_BasicBlockc                 C      t r   NotImplementedErrorr   r   r   r   r   r         zVisitor.visit_Instructionc                 C      | j S r   )r   r   r   r   r   r	         zVisitor.modulec                 C   r   r   )r   r   r   r   r   function   r   zVisitor.functionc                 C   r   r   )r   r   r   r   r   basic_block   r   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 d S r   )
isinstancer   
visit_Callr   r   r   r   r   %   s   
zCallVisitor.visit_Instructionc                 C   r   r   r   r   r   r   r   r&   )   r   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 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   

r3   N)Zllvmlite.irr   objectr   r$   r'   r3   r   r   r   r   <module>   s
     	