o
    "Æ&iP  ã                   @   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   úAC:\wamp64\www\opt\env\Lib\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
     	