ó
CrX[c           @   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 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- „  Z0 d. „  Z1 d/ „  Z2 d0 „  Z3 d1 „  Z4 d2 „  Z5 d3 „  Z6 e d4 „ Z7 d5 „  Z8 g  d6 „ Z9 d7 „  Z: d8 „  Z; d9 „  Z< RS(:   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(    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   __init__   s    c         C   s   d |  j  S(   Nt    (   R   (   R   (    (    s4   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(    (    s4   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   (    s4   lib/python2.7/site-packages/pycparser/c_generator.pys	   <genexpr>#   s    (   t   Nonet   joint   children(   R   R   (    (   R   s4   lib/python2.7/site-packages/pycparser/c_generator.pyR      s    c         C   s   | j  S(   N(   t   value(   R   t   n(    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Constant%   s    c         C   s   | j  S(   N(   t   name(   R   R   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_ID(   s    c         C   s'   d } | j  r# | d | j  7} n  | S(   Ns   #pragmaR   (   t   string(   R   R   t   ret(    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Pragma+   s    	c         C   s.   |  j  | j ƒ } | d |  j | j ƒ d S(   Nt   [t   ](   t   _parenthesize_unless_simpleR   R   t	   subscript(   R   R   t   arrref(    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_ArrayRef1   s    c         C   s-   |  j  | j ƒ } | | j |  j | j ƒ S(   N(   R    R   t   typeR   t   field(   R   R   t   sref(    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_StructRef5   s    c         C   s.   |  j  | j ƒ } | d |  j | j ƒ d S(   Nt   (t   )(   R    R   R   t   args(   R   R   t   fref(    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_FuncCall9   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(    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_UnaryOp=   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   (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   <lambda>L   s    c            s   ˆ  j  |  ƒ S(   N(   R2   (   R3   (   R   (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyR4   N   s    s   %s %s %s(   t   _parenthesize_ift   leftt   rightR/   (   R   R   t   lval_strt   rval_str(    (   R   s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_BinaryOpJ   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   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyR4   T   s    s   %s %s %s(   R5   t   rvalueR   t   lvalueR/   (   R   R   R9   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_AssignmentQ   s    c         C   s   d j  | j ƒ S(   NR   (   R   t   names(   R   R   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_IdentifierTypeW   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)   (   R;   R    t   InitListR   t   ExprList(   R   R   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   _visit_exprZ   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   initRF   (   R   R   t   no_typet   s(    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt
   visit_Declb   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(   RJ   N(   RL   t   True(   R   t   decl(   R   (    s4   lib/python2.7/site-packages/pycparser/c_generator.pys	   <genexpr>o   s   (   R   t   declst   lenR   (   R   R   RK   (    (   R   s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_DeclListl   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   RK   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Typedefs   s
    	 c         C   s2   d |  j  | j ƒ d } | d |  j | j ƒ S(   NR(   R)   R   (   RS   t   to_typeR    R.   (   R   R   RK   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt
   visit_Casty   s    c         C   s=   g  } x' | j  D] } | j |  j | ƒ ƒ q Wd j | ƒ S(   Ns   , (   t   exprst   appendRF   R   (   R   R   t   visited_subexprsR.   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_ExprList}   s    c         C   s=   g  } x' | j  D] } | j |  j | ƒ ƒ q Wd j | ƒ S(   Ns   , (   RW   RX   RF   R   (   R   R   RY   R.   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_InitListƒ   s    c         C   s   |  j  | d d ƒS(   NR   t   enum(   t   _generate_struct_union_enum(   R   R   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt
   visit_Enum‰   s    c         C   s]   | j  s( d j d |  j ƒ  d | j ƒ Sd j d |  j ƒ  d | j d |  j | j  ƒ ƒ Sd  S(   Ns   {indent}{name},
t   indentR   s   {indent}{name} = {value},
R   (   R   t   formatR   R   R   (   R   R   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_EnumeratorŒ   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   (    s4   lib/python2.7/site-packages/pycparser/c_generator.pys	   <genexpr>ž   s    s   
(   R   RN   R   t   bodyt   param_declsR   (   R   R   RN   Rc   t   knrdecls(    (   R   s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_FuncDef™   s    		"c         C   s‰   d } x| | j  D]q } t | t j ƒ r> | |  j | ƒ 7} q t | t j ƒ rj | |  j | ƒ d 7} q | |  j | ƒ d 7} q W| S(   NR   s   
s   ;
(   t   extR;   R    t   FuncDefR   t   Pragma(   R   R   RK   Rg   (    (    s4   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   (    s4   lib/python2.7/site-packages/pycparser/c_generator.pys	   <genexpr>²   s    s   }
(   R   R   t   block_itemsR   (   R   R   RK   (    (   R   s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Compound®   s    	)c         C   s,   d |  j  | j ƒ d |  j  | j ƒ d S(   NR(   s   ){RC   (   R   R$   RI   (   R   R   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_CompoundLiteral·   s    c         C   s   d S(   Nt   ;(    (   R   R   (    (    s4   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   (    s4   lib/python2.7/site-packages/pycparser/c_generator.pys	   <genexpr>¿   s    (   R   t   params(   R   R   (    (   R   s4   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   Rp   (   R.   R   (   R   R   RK   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_ReturnÁ   s    	 c         C   s   d S(   Ns   break;(    (   R   R   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_BreakÆ   s    c         C   s   d S(   Ns	   continue;(    (   R   R   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_ContinueÉ   s    c         C   sZ   d |  j  | j ƒ d } | d |  j  | j ƒ d 7} | d |  j  | j ƒ d 7} | S(   NR(   s   ) ? s   ) : R)   (   RF   t   condt   iftruet   iffalse(   R   R   RK   (    (    s4   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
(   Ry   R   Rk   Rz   RM   R{   R   (   R   R   RK   (    (    s4   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 (Rp   R   s   )
R}   (   RI   R   Ry   t   nextRk   Rl   RM   (   R   R   RK   (    (    s4   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   )
R}   (   Ry   R   Rk   Rl   RM   (   R   R   RK   (    (    s4   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
R}   s   while (s   );(   Rk   Rl   RM   R   Ry   R   (   R   R   RK   (    (    s4   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   )
R}   (   R   Ry   Rk   Rl   RM   (   R   R   RK   (    (    s4   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   :
R}   (   R   R.   t   stmtsRk   RM   (   R   R   RK   Rl   (    (    s4   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:
R}   (   R„   Rk   RM   (   R   R   RK   Rl   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Default  s    c         C   s   | j  d |  j | j ƒ S(   Ns   :
(   R   Rk   Rl   (   R   R   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Label  s    c         C   s   d | j  d S(   Ns   goto Rp   (   R   (   R   R   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt
   visit_Goto
  s    c         C   s   d S(   Ns   ...(    (   R   R   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_EllipsisParam  s    c         C   s   |  j  | d ƒ S(   Nt   struct(   R]   (   R   R   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Struct  s    c         C   s   |  j  | j ƒ S(   N(   RS   R$   (   R   R   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Typename  s    c         C   s   |  j  | d ƒ S(   Nt   union(   R]   (   R   R   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_Union  s    c         C   sy   d } xR | j  D]G } t | t j ƒ r< | d | j  7} q | d |  j | ƒ d 7} q W| d |  j | j ƒ 7} | S(   NR   t   .R   R   s    = (   R   R;   R    t   IDR   RF   R.   (   R   R   RK   R   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_NamedInitializer  s    c         C   s   |  j  | ƒ S(   N(   RS   (   R   R   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   visit_FuncDecl#  s    c         C   sí   | d
 k r! | j  } |  j } n< | d k s3 t ‚ | j d k rH d n	 | j j } |  j } | d | j pp d } | d k	 ré | d 7} | |  j ƒ  7} |  j	 d 7_	 | d 7} | | | ƒ 7} |  j	 d 8_	 | |  j ƒ  d	 7} n  | S(   sq    Generates code for structs, unions, and enums. name should be
            'struct', 'union', or 'enum'.
        RŠ   R   R\   R   R   s   
i   s   {
RC   (   RŠ   R   N(
   RO   t   _generate_struct_union_bodyt   AssertionErrort   valuesR   t   enumeratorst   _generate_enum_bodyR   R   R   (   R   R   R   t   memberst   body_functionRK   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyR]   &  s     	!	

c            s   d j  ‡  f d †  | Dƒ ƒ S(   NR   c         3   s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   Rk   (   R   RN   (   R   (    s4   lib/python2.7/site-packages/pycparser/c_generator.pys	   <genexpr>?  s    (   R   (   R   R˜   (    (   R   s4   lib/python2.7/site-packages/pycparser/c_generator.pyR“   >  s    c            s%   d j  ‡  f d †  | Dƒ ƒ d  d S(   NR   c         3   s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   R   (   R   R   (   R   (    s4   lib/python2.7/site-packages/pycparser/c_generator.pys	   <genexpr>C  s    iþÿÿÿs   
(   R   (   R   R˜   (    (   R   s4   lib/python2.7/site-packages/pycparser/c_generator.pyR—   A  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   DeclR<   t   Castt   UnaryOpt   BinaryOpt	   TernaryOpt   FuncCallt   ArrayReft	   StructReft   ConstantR   t   TypedefRE   R   t   Compound(   R   R   R}   t   typR_   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyRk   E  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   RR   RS   R$   (   R   R   RK   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyRG   a  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   declnamet	   enumerateR;   t	   ArrayDeclt   PtrDeclt   dimt   FuncDeclR*   Rš   RG   t   TypenameRS   t   IdentifierTypeR@   (   R   R   t	   modifiersR¥   RK   t   nstrt   it   modifier(    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyRS   j  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(   RF   (   R   R   t	   conditionRK   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyR5   ˜  s    c            s   ˆ  j  | ‡  f d †  ƒ S(   s.    Common use case for _parenthesize_if
        c            s   ˆ  j  |  ƒ S(   N(   R2   (   R3   (   R   (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyR4   ¥  s    (   R5   (   R   R   (    (   R   s4   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.
        (   R;   R    R¢   R   R    R¡   RŸ   (   R   R   (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyR2   §  s    (=   R	   t
   __module__t   __doc__R   R   R   R   R   R   R   R#   R'   R,   R1   R:   R?   RA   RF   t   FalseRL   RQ   RT   RV   RZ   R[   R^   Ra   Rf   Rj   Rn   Ro   Rq   Rt   Rv   Rw   Rx   R|   R~   R€   R   R‚   Rƒ   R…   R†   R‡   Rˆ   R‰   R‹   RŒ   RŽ   R‘   R’   R]   R“   R—   Rk   RG   RS   R5   R    R2   (    (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyR      st   															
								
											
													
						.	
	N(   R   R    t   objectR   (    (    (    s4   lib/python2.7/site-packages/pycparser/c_generator.pyt   <module>	   s   