ó
g¨wUc           @   s*   d  d l  m Z d e f d „  ƒ  YZ d S(   i   (   t   c_astt
   CGeneratorc           B   së  e  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 d „  Z d „  Z d „  Z 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 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+ d) „  Z, d* „  Z- d+ „  Z. d, „  Z/ d- „  Z0 d. „  Z1 e d/ „ Z2 d0 „  Z3 g  d1 „ Z4 d2 „  Z5 d3 „  Z6 d4 „  Z7 RS(5   s¬    Uses the same visitor pattern as c_ast.NodeVisitor, but modified to
        return a value from each visit method, using string accumulation in
        generic_visit.
    c         C   s   d |  _  d  S(   Ni    (   t   indent_level(   t   self(    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   __init__   s    c         C   s   d |  j  S(   Nt    (   R   (   R   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   _make_indent   s    c         C   s)   d | j  j } t |  | |  j ƒ | ƒ S(   Nt   visit_(   t	   __class__t   __name__t   getattrt   generic_visit(   R   t   nodet   method(    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit   s    c            s7   | d  k r d Sd j ‡  f d †  | j ƒ  Dƒ ƒ Sd  S(   Nt    c         3   s$   |  ] \ } } ˆ  j  | ƒ Vq d  S(   N(   R   (   t   .0t   c_namet   c(   R   (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pys	   <genexpr>#   s    (   t   Nonet   joint   children(   R   R   (    (   R   s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyR      s    c         C   s   | j  S(   N(   t   value(   R   t   n(    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Constant%   s    c         C   s   | j  S(   N(   t   name(   R   R   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_ID(   s    c         C   s.   |  j  | j ƒ } | d |  j | j ƒ d S(   Nt   [t   ](   t   _parenthesize_unless_simpleR   R   t	   subscript(   R   R   t   arrref(    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_ArrayRef+   s    c         C   s-   |  j  | j ƒ } | | j |  j | j ƒ S(   N(   R   R   t   typeR   t   field(   R   R   t   sref(    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_StructRef/   s    c         C   s.   |  j  | j ƒ } | d |  j | j ƒ d S(   Nt   (t   )(   R   R   R   t   args(   R   R   t   fref(    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_FuncCall3   s    c         C   sx   |  j  | j ƒ } | j d k r) d | S| j d k r@ d | S| j d k rc d |  j | j ƒ Sd | j | f Sd  S(   Ns   p++s   %s++s   p--s   %s--t   sizeofs
   sizeof(%s)s   %s%s(   R   t   exprt   opR   (   R   R   t   operand(    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_UnaryOp7   s    c            sP   ˆ  j  | j ‡  f d †  ƒ } ˆ  j  | j ‡  f d †  ƒ } d | | j | f S(   Nc            s   ˆ  j  |  ƒ S(   N(   t   _is_simple_node(   t   d(   R   (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   <lambda>F   s    c            s   ˆ  j  |  ƒ S(   N(   R/   (   R0   (   R   (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyR1   H   s    s   %s %s %s(   t   _parenthesize_ift   leftt   rightR,   (   R   R   t   lval_strt   rval_str(    (   R   s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_BinaryOpD   s
    c         C   s8   |  j  | j d „  ƒ } d |  j | j ƒ | j | f S(   Nc         S   s   t  |  t j ƒ S(   N(   t
   isinstanceR    t
   Assignment(   R   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyR1   N   s    s   %s %s %s(   R2   t   rvalueR   t   lvalueR,   (   R   R   R6   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_AssignmentK   s    c         C   s   d j  | j ƒ S(   NR   (   R   t   names(   R   R   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_IdentifierTypeQ   s    c         C   s_   t  | t j ƒ r' d |  j | ƒ d St  | t j ƒ rN d |  j | ƒ d S|  j | ƒ Sd  S(   Nt   {t   }R%   R&   (   R8   R    t   InitListR   t   ExprList(   R   R   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   _visit_exprT   s
    c         C   sn   | r | j  n |  j | ƒ } | j rD | d |  j | j ƒ 7} n  | j rj | d |  j | j ƒ 7} n  | S(   Ns    : s    = (   R   t   _generate_declt   bitsizeR   t   initRC   (   R   R   t   no_typet   s(    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt
   visit_Decl\   s    	 	c            s`   ˆ  j  | j d ƒ } t | j ƒ d k r\ | d d j ‡  f d †  | j d Dƒ ƒ 7} n  | S(   Ni    i   s   , c         3   s$   |  ] } ˆ  j  | d  t ƒVq d S(   RG   N(   RI   t   True(   R   t   decl(   R   (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pys	   <genexpr>i   s   (   R   t   declst   lenR   (   R   R   RH   (    (   R   s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_DeclListf   s
    c         C   sF   d } | j  r, | d j | j  ƒ d 7} n  | |  j | j ƒ 7} | S(   NR   R   (   t   storageR   t   _generate_typeR!   (   R   R   RH   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Typedefm   s
    	 c         C   s2   d |  j  | j ƒ d } | d |  j | j ƒ S(   NR%   R&   R   (   RP   t   to_typeR   R+   (   R   R   RH   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt
   visit_Casts   s    c         C   s=   g  } x' | j  D] } | j |  j | ƒ ƒ q Wd j | ƒ S(   Ns   , (   t   exprst   appendRC   R   (   R   R   t   visited_subexprsR+   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_ExprListw   s    c         C   s=   g  } x' | j  D] } | j |  j | ƒ ƒ q Wd j | ƒ S(   Ns   , (   RT   RU   RC   R   (   R   R   RV   R+   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_InitList}   s    c         C   sÆ   d } | j  r# | d | j  7} n  | j rÂ | d 7} x| t | j j ƒ D]h \ } } | | j  7} | j rˆ | d |  j | j ƒ 7} n  | t | j j ƒ d k rI | d 7} qI qI W| d 7} n  | S(   Nt   enumR   s    {s    = i   s   , R@   (   R   t   valuest	   enumeratet   enumeratorsR   R   RM   (   R   R   RH   t   it
   enumerator(    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt
   visit_Enumƒ   s    	 	
	c            s„   ˆ  j  | j ƒ } d ˆ  _ ˆ  j  | j ƒ } | j rp d j ‡  f d †  | j Dƒ ƒ } | d | d | d S| d | d Sd  S(   Ni    s   ;
c         3   s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   R   (   R   t   p(   R   (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pys	   <genexpr>–   s    s   
(   R   RK   R   t   bodyt   param_declsR   (   R   R   RK   Ra   t   knrdecls(    (   R   s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_FuncDef‘   s    		"c         C   s]   d } xP | j  D]E } t | t j ƒ r> | |  j | ƒ 7} q | |  j | ƒ d 7} q W| S(   NR   s   ;
(   t   extR8   R    t   FuncDefR   (   R   R   RH   Re   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_FileAST›   s    c            sx   ˆ  j  ƒ  d } ˆ  j d 7_ | j rQ | d j ‡  f d †  | j Dƒ ƒ 7} n  ˆ  j d 8_ | ˆ  j  ƒ  d 7} | S(   Ns   {
i   R   c         3   s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   t   _generate_stmt(   R   t   stmt(   R   (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pys	   <genexpr>¨   s    s   }
(   R   R   t   block_itemsR   (   R   R   RH   (    (   R   s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Compound¤   s    	)c         C   s   d S(   Nt   ;(    (   R   R   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_EmptyStatement­   s    c            s    d j  ‡  f d †  | j Dƒ ƒ S(   Ns   , c         3   s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   R   (   R   t   param(   R   (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pys	   <genexpr>±   s    (   R   t   params(   R   R   (    (   R   s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_ParamList°   s    c         C   s4   d } | j  r, | d |  j | j  ƒ 7} n  | d S(   Nt   returnR   Rl   (   R+   R   (   R   R   RH   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Return³   s    	 c         C   s   d S(   Ns   break;(    (   R   R   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Break¸   s    c         C   s   d S(   Ns	   continue;(    (   R   R   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Continue»   s    c         C   sJ   |  j  | j ƒ d } | |  j  | j ƒ d 7} | |  j  | j ƒ 7} | S(   Ns    ? s    : (   RC   t   condt   iftruet   iffalse(   R   R   RH   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_TernaryOp¾   s    c         C   sŽ   d } | j  r( | |  j | j  ƒ 7} n  | d 7} | |  j | j d t ƒ7} | j rŠ | |  j ƒ  d 7} | |  j | j d t ƒ7} n  | S(   Ns   if (s   )
t
   add_indents   else
(   Ru   R   Rh   Rv   RJ   Rw   R   (   R   R   RH   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_IfÄ   s    	 
	c         C   s²   d } | j  r( | |  j | j  ƒ 7} n  | d 7} | j rX | d |  j | j ƒ 7} n  | d 7} | j rˆ | d |  j | j ƒ 7} n  | d 7} | |  j | j d t ƒ7} | S(   Ns   for (Rl   R   s   )
Ry   (   RF   R   Ru   t   nextRh   Ri   RJ   (   R   R   RH   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt	   visit_ForÎ   s    	 
	 
	 
c         C   sR   d } | j  r( | |  j | j  ƒ 7} n  | d 7} | |  j | j d t ƒ7} | S(   Ns   while (s   )
Ry   (   Ru   R   Rh   Ri   RJ   (   R   R   RH   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_WhileÙ   s    	 
c         C   sf   d } | |  j  | j d t ƒ7} | |  j ƒ  d 7} | j rX | |  j | j ƒ 7} n  | d 7} | S(   Ns   do
Ry   s   while (s   );(   Rh   Ri   RJ   R   Ru   R   (   R   R   RH   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_DoWhileà   s    	 
c         C   s:   d |  j  | j ƒ d } | |  j | j d t ƒ7} | S(   Ns   switch (s   )
Ry   (   R   Ru   Rh   Ri   RJ   (   R   R   RH   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Switchè   s    c         C   sK   d |  j  | j ƒ d } x* | j D] } | |  j | d t ƒ7} q$ W| S(   Ns   case s   :
Ry   (   R   R+   t   stmtsRh   RJ   (   R   R   RH   Ri   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt
   visit_Caseí   s    c         C   s7   d } x* | j  D] } | |  j | d t ƒ7} q W| S(   Ns	   default:
Ry   (   R€   Rh   RJ   (   R   R   RH   Ri   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Defaultó   s    c         C   s   | j  d |  j | j ƒ S(   Ns   :
(   R   Rh   Ri   (   R   R   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Labelù   s    c         C   s   d | j  d S(   Ns   goto Rl   (   R   (   R   R   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt
   visit_Gotoü   s    c         C   s   d S(   Ns   ...(    (   R   R   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_EllipsisParamÿ   s    c         C   s   |  j  | d ƒ S(   Nt   struct(   t   _generate_struct_union(   R   R   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Struct  s    c         C   s   |  j  | j ƒ S(   N(   RP   R!   (   R   R   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Typename  s    c         C   s   |  j  | d ƒ S(   Nt   union(   R‡   (   R   R   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Union  s    c         C   sˆ   d } xa | j  D]V } t | t j ƒ r< | d | j  7} q t | t j ƒ r | d | j d 7} q q W| d |  j | j ƒ 7} | S(   NR   t   .R   R   s    = (   R   R8   R    t   IDt   ConstantR   R   R+   (   R   R   RH   R   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_NamedInitializer  s    c         C   s   |  j  | ƒ S(   N(   RP   (   R   R   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_FuncDecl  s    c         C   s¤   | d | j  p d } | j r  | d 7} | |  j ƒ  7} |  j d 7_ | d 7} x$ | j D] } | |  j | ƒ 7} q] W|  j d 8_ | |  j ƒ  d 7} n  | S(   se    Generates code for structs and unions. name should be either
            'struct' or union.
        R   R   s   
i   s   {
R@   (   R   RL   R   R   Rh   (   R   R   R   RH   RK   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyR‡     s    	

c         C   sï   t  | ƒ } | r$ |  j d 7_ n  |  j ƒ  } | rH |  j d 8_ n  | t j t j t j t j t j t j	 t j
 t j t j t j t j t j t j f k r· | |  j | ƒ d S| t j f k rÖ |  j | ƒ S| |  j | ƒ d Sd S(   sÄ    Generation from a statement node. This method exists as a wrapper
            for individual visit_* methods to handle different treatment of
            some statements in this context.
        i   s   ;
s   
N(   R!   R   R   R    t   DeclR9   t   Castt   UnaryOpt   BinaryOpt	   TernaryOpt   FuncCallt   ArrayReft	   StructRefRŽ   R   t   TypedefRB   R   t   Compound(   R   R   Ry   t   typt   indent(    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyRh   (  s      c         C   sh   d } | j  r( d j | j  ƒ d } n  | j rN | d j | j ƒ d 7} n  | |  j | j ƒ 7} | S(   s&    Generation from a Decl node.
        R   R   (   t   funcspecR   RO   RP   R!   (   R   R   RH   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyRD   D  s    	 	 c         C   sr  t  | ƒ } | t j k rÈd } | j rG | d j | j ƒ d 7} n  | |  j | j  ƒ 7} | j ro | j n d } x5t | ƒ D]'\ } } t | t j	 ƒ rø | d k r× t | | d t j
 ƒ r× d | d } n  | d |  j | j ƒ d 7} q‚ t | t j ƒ rb| d k rAt | | d t j
 ƒ rAd | d } n  | d |  j | j ƒ d 7} q‚ t | t j
 ƒ r‚ | j rœd	 d j | j ƒ | f } q©d
 | } q‚ q‚ W| rÄ| d | 7} n  | S| t j k rç|  j | j  ƒ S| t j k r|  j | j  ƒ S| t j k r)d j | j ƒ d S| t j	 t j
 t j f k ra|  j | j  | | g ƒ S|  j | ƒ Sd S(   sø    Recursive generation from a type node. n is the type node.
            modifiers collects the PtrDecl, ArrayDecl and FuncDecl modifiers
            encountered on the way down to a TypeDecl, to allow proper
            generation from it.
        R   R   i    i   R%   R&   R   R   s   * %s %st   *N(   R!   R    t   TypeDeclt   qualsR   R   t   declnameR[   R8   t	   ArrayDeclt   PtrDeclt   dimt   FuncDeclR'   R‘   RD   t   TypenameRP   t   IdentifierTypeR=   (   R   R   t	   modifiersR›   RH   t   nstrR]   t   modifier(    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyRP   M  s@    	 &!&!	 c         C   s/   |  j  | ƒ } | | ƒ r' d | d S| Sd S(   s‘    Visits 'n' and returns its string representation, parenthesized
            if the condition function applied to the node returns True.
        R%   R&   N(   RC   (   R   R   t	   conditionRH   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyR2   {  s    c            s   ˆ  j  | ‡  f d †  ƒ S(   s.    Common use case for _parenthesize_if
        c            s   ˆ  j  |  ƒ S(   N(   R/   (   R0   (   R   (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyR1   ˆ  s    (   R2   (   R   R   (    (   R   s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyR   …  s    c         C   s+   t  | t j t j t j t j t j f ƒ S(   s~    Returns True for nodes that are "simple" - i.e. nodes that always
            have higher precedence than operators.
        (   R8   R    RŽ   R   R—   R˜   R–   (   R   R   (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyR/   Š  s    (8   R	   t
   __module__t   __doc__R   R   R   R   R   R   R    R$   R)   R.   R7   R<   R>   RC   t   FalseRI   RN   RQ   RS   RW   RX   R_   Rd   Rg   Rk   Rm   Rp   Rr   Rs   Rt   Rx   Rz   R|   R}   R~   R   R   R‚   Rƒ   R„   R…   Rˆ   R‰   R‹   R   R   R‡   Rh   RD   RP   R2   R   R/   (    (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyR      sj   														
							
											
													
				.	
	N(   R   R    t   objectR   (    (    (    s9   /usr/lib/python2.7/site-packages/pycparser/c_generator.pyt   <module>	   s   