σ
¦V]c           @@  s&  d  d l  m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d e	 f d	     YZ
 d
 e f d     YZ d e f d     YZ d e f d     YZ d d d     YZ d e j e f d     YZ e Z d e j e f d     YZ d e j f d     YZ d S(   i    (   t   absolute_importi   (   t   Nodes(   t	   ExprNodes(   t   Node(   t   AtomicExprNode(   t
   c_ptr_typet
   TempHandlec           B@  s)   e  Z d Z e Z d d   Z d   Z RS(   c         C@  s1   | |  _  | d  k r$ | j |  _ n	 | |  _ d  S(   N(   t   typet   Nonet   is_pyobjectt   needs_cleanup(   t   selfR   R
   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   __init__   s    	c         C@  s   t  | d |  d |  j S(   Nt   handleR   (   t   TempRefNodeR   (   R   t   pos(    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   ref   s    N(   t   __name__t
   __module__R   t   tempt   Falset   needs_xdecrefR   R   (    (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR      s   R   c           B@  sA   e  Z d    Z d   Z d   Z d   Z d   Z e d  Z RS(   c         C@  s   |  j  |  j j  k s t  |  S(   N(   R   R   t   AssertionError(   R   t   env(    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   analyse_types#   s    c         C@  s   |  j  |  j j  k s t  |  S(   N(   R   R   R   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   analyse_target_types'   s    c         C@  s   d  S(   N(    (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   analyse_target_declaration+   s    c         C@  s%   |  j  j } | d  k r! d } n  | S(   Ns   <error>(   R   R   R   (   R   t   result(    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   calculate_result_code.   s     	c         C@  s   d  S(   N(    (   R   t   code(    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   generate_result_code3   s    c         C@  s   |  j  j r8 | j |  | j |  j   |  j    n  | j d |  j   | r\ | j   n | j |  j    f  | j |  | j	 |  d  S(   Ns   %s = %s;(
   R   R	   t   make_owned_referencet   put_xdecrefR   t   ctypet   putlnt	   result_ast   generate_post_assignment_codet
   free_temps(   R   t   rhsR   t   overloaded_assignment(    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   generate_assignment_code6   s    		,(	   R   R   R   R   R   R   R   R   R(   (    (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR      s   					t   TempsBlockNodec           B@  sD   e  Z d  Z d g Z d   Z d   Z d   Z d   Z d   Z RS(   s_  
    Creates a block which allocates temporary variables.
    This is used by transforms to output constructs that need
    to make use of a temporary variable. Simply pass the types
    of the needed temporaries to the constructor.

    The variables can be referred to using a TempRefNode
    (which can be constructed by calling get_ref_node).
    t   bodyc         C@  s΄   x2 |  j  D]' } | j j | j d | j | _ q
 W|  j j |  xh |  j  D]] } | j r | j r | j	 | j | j  q | j
 | j | j  n  | j j | j  qO Wd  S(   Nt
   manage_ref(   t   tempst	   funcstatet   allocate_tempR   R
   R   R*   t   generate_execution_codeR   t   put_xdecref_cleart   put_decref_cleart   release_temp(   R   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR/   U   s    			c         C@  s   |  j  j |  d  S(   N(   R*   t   analyse_declarations(   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR3   b   s    c         C@  s   |  j  j |  |  _  |  S(   N(   R*   t   analyse_expressions(   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR4   e   s    c         C@  s   |  j  j | |  d  S(   N(   R*   t   generate_function_definitions(   R   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR5   i   s    c         C@  s   |  j  j |  d  S(   N(   R*   t   annotate(   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR6   l   s    (	   R   R   t   __doc__t   child_attrsR/   R3   R4   R5   R6   (    (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR)   C   s   					t   ResultRefNodec           B@  sΏ   e  Z g  Z e Z d d d e e d   Z d   Z d   Z	 d   Z
 d   Z d   Z d   Z d   Z d   Z d	   Z d
   Z d   Z d   Z e d  Z d   Z d   Z d   Z RS(   c         C@  s―   | |  _  d  |  _ | |  _ | d  k	 rT | j |  _ t | d  rT | j |  _ qT n  | d  k	 rl | |  _ n  | d  k	 r | |  _ n  | r t |  _ n  |  j d  k	 s« t  d  S(   NR   (	   t
   expressionR   R   t   may_hold_nonet   hasattrR   t   Truet   is_tempR   (   R   R:   R   R   R;   R>   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR   w   s    			c         C@  s   |  S(   N(    (   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt
   clone_node   s    c         C@  s!   |  j  r |  j  j |  Sd Sd  S(   N(    (   R:   t   type_dependencies(   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR@      s    	c         C@  s+   | |  _  t | d  r' | j |  _ n  d  S(   NR   (   R:   R<   R   (   R   R:   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   update_expression   s    	c         C@  sI   |  j  d  k	 rE |  j  j s3 |  j  j |  |  _  n  |  j  j |  _ n  |  S(   N(   R:   R   R   R   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR      s
    c         C@  sg   |  j  d  k	 r |  j  S|  j d  k	 rQ |  j j  d  k	 rA |  j j  S|  j j |  St sc t d   d  S(   Ns"   cannot infer type of ResultRefNode(   R   R   R:   t
   infer_typeR   R   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyRB      s    
c         C@  s   |  j  j s t S|  j S(   N(   R   R	   R   R;   (   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   may_be_none¦   s    c         C@  s9   |  j  d  k	 r |  j  j   S|  j d  k	 r5 |  j j St S(   N(   R:   R   RC   R   R	   R=   (   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   _DISABLED_may_be_none«   s
    
c         C@  s   t  S(   N(   R=   (   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt	   is_simple΄   s    c         C@  sJ   y |  j  SWn5 t k
 rB |  j d  k	 rC |  j j   |  _  qC n X|  j  S(   N(   t   result_codet   AttributeErrorR:   R   R   (   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR   ·   s    c         C@  s   d  S(   N(    (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   generate_evaluation_codeΏ   s    c         C@  s   d  S(   N(    (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR   Β   s    c         C@  s   d  S(   N(    (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   generate_disposal_codeΕ   s    c         C@  s    |  j  j rD | j |  |  j sD | j |  j   |  j    qD n  | j d |  j   | rh | j   n | j |  j    f  | j	 |  | j
 |  d  S(   Ns   %s = %s;(   R   R	   R   t   lhs_of_first_assignmentt
   put_decrefR   R!   R"   R#   R$   R%   (   R   R&   R   R'   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR(   Θ   s    	"		,c         C@  s   d  S(   N(    (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   allocate_tempsΤ   s    c         C@  s   d  S(   N(    (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR2   Χ   s    c         C@  s   d  S(   N(    (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR%   Ϊ   s    N(   R   R   t   subexprsR   RJ   R   R=   R   R?   R@   RA   R   RB   RC   RD   RE   R   RH   R   RI   R(   RL   R2   R%   (    (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR9   p   s&   																t   LetNodeMixinc           B@  s#   e  Z d    Z d   Z d   Z RS(   c         C@  s   | |  _  | j |  _ d  S(   N(   t	   lazy_tempR:   t   temp_expression(   R   RO   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   set_temp_exprί   s    	c         C@  sχ   |  j  j |  |  j  j |  _ |  j j rC t |  j j  |  _ n  |  j  j   |  _ |  j rs |  j  j	   |  _
 nq |  j  j |  | j j |  j d t |  _
 | j d |  j
 |  j  j	   f  |  j  j |  |  j  j |  |  j
 |  j _ d  S(   NR+   s   %s = %s;(   RP   RH   R   t	   temp_typet   is_arrayR   t	   base_typet   result_in_tempt   _result_in_tempR   R   R   R-   R.   R=   R"   RI   R%   RO   RF   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   setup_temp_exprγ   s    		#c         C@  sh   |  j  r, |  j j |  |  j j |  n8 |  j j rQ | j |  j |  j  n  | j j	 |  j  d  S(   N(
   RV   RP   RI   R%   RR   R	   R1   R   R-   R2   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   teardown_temp_exprτ   s    	(   R   R   RQ   RW   RX   (    (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyRN   ή   s   		t   EvalWithTempExprNodec           B@  s\   e  Z d  d g Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d	   Z
 RS(
   RP   t   subexpressionc         C@  s5   |  j  |  | j |  _ | |  _ |  j j |  _ d  S(   N(   RQ   R   RZ   R   (   R   RO   RZ   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR     s    	c         C@  s   |  j  j |  S(   N(   RZ   RB   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyRB     s    c         C@  s   |  j  j   S(   N(   RZ   RC   (   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyRC     s    c         C@  s   |  j  j   S(   N(   RZ   R   (   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR     s    c         C@  sP   |  j  j |  |  _  |  j j |  j   |  j j |  |  _ |  j j |  _ |  S(   N(   RP   R   RO   RA   RZ   R   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR     s
    c         C@  s   |  j  j |  d  S(   N(   RZ   R%   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   free_subexpr_temps  s    c         C@  s   |  j  j |  d  S(   N(   RZ   RI   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   generate_subexpr_disposal_code  s    c         C@  s.   |  j  |  |  j j |  |  j |  d  S(   N(   RW   RZ   RH   RX   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyRH   !  s    (   R   R   RM   R   RB   RC   R   R   R[   R\   RH   (    (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyRY   ώ   s   							t   LetNodec           B@  sA   e  Z d  d g Z d   Z d   Z d   Z d   Z d   Z RS(   RP   R*   c         C@  s&   |  j  |  | j |  _ | |  _ d  S(   N(   RQ   R   R*   (   R   RO   R*   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR   6  s    c         C@  s$   |  j  j |  |  j j |  d  S(   N(   RP   R3   R*   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR3   ;  s    c         C@  s.   |  j  j |  |  _  |  j j |  |  _ |  S(   N(   RP   R4   R*   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR4   ?  s    c         C@  s.   |  j  |  |  j j |  |  j |  d  S(   N(   RW   R*   R/   RX   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR/   D  s    c         C@  s*   |  j  j | |  |  j j | |  d  S(   N(   RP   R5   R*   (   R   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR5   I  s    (   R   R   R8   R   R3   R4   R/   R5   (    (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR]   *  s   
				t   TempResultFromStatNodec           B@  s;   e  Z g  Z d  g Z d   Z d   Z d   Z d   Z RS(   R*   c         C@  s7   | |  _  | j |  _ | |  _ | j |  _ d |  _ d  S(   Ni   (   t
   result_refR   R*   R   R>   (   R   R_   R*   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR   W  s
    		c         C@  s   |  j  j |  d  S(   N(   R*   R3   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR3   ^  s    c         C@  s   |  j  j |  |  _  |  S(   N(   R*   R4   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR   a  s    c         C@  s&   |  j    |  j _ |  j j |  d  S(   N(   R   R_   RF   R*   R/   (   R   R   (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR   e  s    (   R   R   RM   R8   R   R3   R   R   (    (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyR^   N  s   				N(    (   t
   __future__R    t    R   R   R   R   t
   PyrexTypesR   t   objectR   R   R)   R9   RN   t   ExprNodeRY   t
   LetRefNodet   StatNodeR]   R^   (    (    (    s8   lib/python2.7/site-packages/Cython/Compiler/UtilNodes.pyt   <module>   s   $-n )$