B
      ›\
  ã               @   sš   d Z ddlmZmZmZ ddlmZ ddlmZm	Z	m
Z
 ddlmZmZ eƒ ZejZedejƒdd„ ƒZedejƒd	d„ ƒZeee ej¡ƒd
d„ ƒZdS )z7
This file implements print functionality for the CPU.
é    )Úprint_functionÚabsolute_importÚdivision)ÚType)ÚtypesÚtypingÚcgutils)ÚRegistryÚimpl_ret_untrackedÚ
print_itemc       	      C   sT   |j \}|j}|  |¡}| | |¡¡}| |¡ | |¡ |  ¡ }t| ||j	|ƒS )z(
    Print a single constant value.
    )
ÚargsZliteral_valueÚget_python_apiZunserializeZserialize_objectÚprint_objectÚdecrefÚget_dummy_valuer
   Úreturn_type)	ÚcontextÚbuilderÚsigr   ÚtyÚvalÚpyapiÚstrobjÚres© r   ú6lib/python3.7/site-packages/numba/targets/printimpl.pyÚprint_item_impl   s    


r   c          
   C   sä   |j \}|\}|  |¡}|  |¡}| jr8| j |||¡ | |||¡}|jt 	||¡ddj\}	}
|	 | 
|¡ | |¡ W dQ R X |
2 |  |jd¡}| |¡}| |¡ | |¡ W dQ R X W dQ R X |  ¡ }t| ||j|ƒS )z~
    Print a single native value by boxing it in a Python object and
    invoking the Python interpreter's print routine.
    T)ZlikelyNzthe print() function)r   r   Zget_env_managerZ
enable_nrtZnrtZincrefZfrom_native_valueZif_elser   Zis_not_nullr   r   Zinsert_const_stringÚmoduleZstring_from_stringZerr_write_unraisabler   r
   r   )r   r   r   r   r   r   r   Zenv_managerÚobjZif_okZif_errorZcstrr   r   r   r   r   r   #   s&    




c             C   s    |   |¡}| ¡ }x`tt|j|ƒƒD ]L\}\}}t tj|¡}	|  	d|	¡}
|
||gƒ |t
|ƒd k r$| d¡ q$W | d¡ | |¡ |  ¡ }t| ||j|ƒS )z 
    A entire print() call.
    r   é   ú Ú
)r   Z
gil_ensureÚ	enumerateÚzipr   r   Ú	signaturer   ZnoneZget_functionÚlenZprint_stringZgil_releaser   r
   r   )r   r   r   r   r   ZgilÚiZargtypeZargvalr$   Úimpr   r   r   r   Úprint_varargs_implB   s    


r(   N)Ú__doc__Z
__future__r   r   r   Zllvmlite.llvmpy.corer   Znumbar   r   r   Znumba.targets.imputilsr	   r
   ÚregistryÚlowerZLiteralr   ZAnyÚprintZVarArgr(   r   r   r   r   Ú<module>   s   