U
    ¥½|e  ã                   @   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)Ú_moduleÚ	functionsÚvisit_Function)ÚselfÚmoduleÚfunc© r   úS/var/www/website-v5/atlas_env/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_blockÚ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   )Úcalleer&   Ú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    

r1   N)Úllvmlite.irr   Úobjectr   r    r#   r1   r   r   r   r   Ú<module>   s    	