
0 4iz                 @   s~  d  d l  Z  d d   Z Gd d   d e  Z Gd d   d e  Z Gd d	   d	 e  Z Gd
 d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z	 Gd d   d e  Z
 Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd  d!   d! e  Z Gd" d#   d# e  Z Gd$ d%   d% e  Z Gd& d'   d' e  Z Gd( d)   d) e  Z Gd* d+   d+ e  Z Gd, d-   d- e  Z Gd. d/   d/ e  Z Gd0 d1   d1 e  Z Gd2 d3   d3 e  Z Gd4 d5   d5 e  Z Gd6 d7   d7 e  Z Gd8 d9   d9 e  Z Gd: d;   d; e  Z Gd< d=   d= e  Z Gd> d?   d? e  Z  Gd@ dA   dA e  Z! GdB dC   dC e  Z" GdD dE   dE e  Z# GdF dG   dG e  Z$ GdH dI   dI e  Z% GdJ dK   dK e  Z& GdL dM   dM e  Z' GdN dO   dO e  Z( GdP dQ   dQ e  Z) GdR dS   dS e  Z* GdT dU   dU e  Z+ GdV dW   dW e  Z, GdX dY   dY e  Z- GdZ d[   d[ e  Z. Gd\ d]   d] e  Z/ Gd^ d_   d_ e  Z0 Gd` da   da e  Z1 Gdb dc   dc e  Z2 Gdd de   de e  Z3 Gdf dg   dg e  Z4 Gdh di   di e  Z5 d S)j    Nc             C   s?   t  |  t  r1 d d j d d   |  D  d St |   Sd S)z[
    Get the representation of an object, with dedicated pprint-like format for lists.
    [z,
 c             s   s'   |  ] } t  |  j d  d  Vq d S)
z
 N)_reprreplace).0e r   ../pycparser/c_ast.py	<genexpr>   s    z_repr.<locals>.<genexpr>z
]N)
isinstancelistjoinrepr)objr   r   r	   r      s    "r   c               @   sO   e  Z d  Z f  Z d d   Z d d   Z e j d d d d d d d	  Z d S)
Nodec          
   C   s   |  j  j d } d } d } x |  j d d  D] } | | 7} | | 7} | | d t t |  |   j d d d t |  t |  j  j   7} d	 } d
 d t |  j  j  } q0 W| | d 7} | S)z? Generates a python representation of the current node
        ( N   =r   z
   ,z
 ))	__class____name__	__slots__r   getattrr   len)selfresultindentZ	separatornamer   r   r	   __repr__"   s    

KzNode.__repr__c             C   s   d S)z3 A sequence of all children that are Nodes
        Nr   )r   r   r   r	   children5   s    zNode.childrenr   FNc                sc  d | } | rB | d k	 rB | j  |   j j d | d  n | j  |   j j d    j r | r   f d d     j D } d j d	 d
   | D  }	 n8   f d d     j D }
 d j d d
   |
 D  }	 | j  |	  | r| j  d   j  | j  d  xI   j   D]; \ } } | j | d | d d | d | d | d | q Wd S)a   Pretty print the Node and all its attributes and
            children (recursively) to a buffer.

            buf:
                Open IO buffer into which the Node is printed.

            offset:
                Initial offset (amount of leading spaces)

            attrnames:
                True if you want to see the attribute names in
                name=value pairs. False to only see the values.

            nodenames:
                True if you want to see the actual node names
                within their parents.

            showcoord:
                Do you want the coordinates of each Node to be
                displayed.
        r   Nz <z>: z: c                s%   g  |  ] } | t    |  f  q Sr   )r   )r   n)r   r   r	   
<listcomp>X   s   	 zNode.show.<locals>.<listcomp>z, c             s   s   |  ] } d  | Vq d S)z%s=%sNr   )r   Znvr   r   r	   r
   Y   s    zNode.show.<locals>.<genexpr>c                s   g  |  ] } t    |   q Sr   )r   )r   r$   )r   r   r	   r%   [   s   	 c             s   s   |  ] } d  | Vq d S)z%sNr   )r   vr   r   r	   r
   \   s    z (at %s)r   offsetr   	attrnames	nodenames	showcoord_my_node_name)writer   r   
attr_namesr   coordr#   show)r   Zbufr'   r(   r)   r*   r+   ZleadZnvlistZattrstrZvlistZ
child_namechildr   )r   r	   r/   :   s,    
&	
z	Node.show)	r   
__module____qualname__r   r"   r#   sysstdoutr/   r   r   r   r	   r      s   r   c               @   s4   e  Z d  Z d Z d Z d d   Z d d   Z d S)NodeVisitora-   A base NodeVisitor class for visiting c_ast nodes.
        Subclass it and define your own visit_XXX methods, where
        XXX is the class name you want to visit with these
        methods.

        For example:

        class ConstantVisitor(NodeVisitor):
            def __init__(self):
                self.values = []

            def visit_Constant(self, node):
                self.values.append(node.value)

        Creates a list of values of all the constant nodes
        encountered below the given node. To use it:

        cv = ConstantVisitor()
        cv.visit(node)

        Notes:

        *   generic_visit() will be called for AST nodes for which
            no visit_XXX method was defined.
        *   The children of nodes for which a visit_XXX was
            defined will not be visited - if you need this, call
            generic_visit() on the node.
            You can use:
                NodeVisitor.generic_visit(self, node)
        *   Modeled after Python's own AST visiting facilities
            (the ast module of Python 3.0)
    Nc             C   s   |  j  d k r i  |  _  |  j  j | j j d  } | d k rw d | j j } t |  | |  j  } | |  j  | j j <| |  S)z Visit a node.
        Nvisit_)_method_cachegetr   r   r   generic_visit)r   nodevisitormethodr   r   r	   visit   s    	zNodeVisitor.visitc             C   s"   x | D] } |  j  |  q Wd S)zy Called if no explicit visitor function exists for a
            node. Implements preorder visiting of the node.
        N)r=   )r   r:   cr   r   r	   r9      s    zNodeVisitor.generic_visit)r   r1   r2   __doc__r7   r=   r9   r   r   r   r	   r5   m   s    r5   c               @   sC   e  Z d  Z d Z d d d  Z d	 d
   Z d d   Z d Z d S)	ArrayDecltypedim	dim_qualsr.   __weakref__Nc             C   s(   | |  _  | |  _ | |  _ | |  _ d  S)N)rA   rB   rC   r.   )r   rA   rB   rC   r.   r   r   r	   __init__   s    			zArrayDecl.__init__c             C   sZ   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  t |  S)NrA   rB   )rA   appendrB   tuple)r   nodelistr   r   r	   r#      s      zArrayDecl.childrenc             c   s2   |  j  d  k	 r |  j  V|  j d  k	 r. |  j Vd  S)N)rA   rB   )r   r   r   r	   __iter__   s    zArrayDecl.__iter__)rA   rB   rC   r.   rD   )rC   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r@      s
   r@   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z f  Z d S)ArrayRefr!   	subscriptr.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)r!   rK   r.   )r   r!   rK   r.   r   r   r	   rE      s    		zArrayRef.__init__c             C   sZ   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  t |  S)Nr!   rK   )r!   rF   rK   rG   )r   rH   r   r   r	   r#      s      zArrayRef.childrenc             c   s2   |  j  d  k	 r |  j  V|  j d  k	 r. |  j Vd  S)N)r!   rK   )r   r   r   r	   rI      s    zArrayRef.__iter__)r!   rK   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   rJ      s
   rJ   c               @   sC   e  Z d  Z d Z d d d  Z d	 d
   Z d d   Z d Z d S)
Assignmentoplvaluervaluer.   rD   Nc             C   s(   | |  _  | |  _ | |  _ | |  _ d  S)N)rM   rN   rO   r.   )r   rM   rN   rO   r.   r   r   r	   rE      s    			zAssignment.__init__c             C   sZ   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  t |  S)NrN   rO   )rN   rF   rO   rG   )r   rH   r   r   r	   r#      s      zAssignment.childrenc             c   s2   |  j  d  k	 r |  j  V|  j d  k	 r. |  j Vd  S)N)rN   rO   )r   r   r   r	   rI      s    zAssignment.__iter__)rM   rN   rO   r.   rD   )rM   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   rL      s
   rL   c               @   sC   e  Z d  Z d Z d d d  Z d d   Z d	 d
   Z f  Z d S)Alignas	alignmentr.   rD   Nc             C   s   | |  _  | |  _ d  S)N)rQ   r.   )r   rQ   r.   r   r   r	   rE      s    	zAlignas.__init__c             C   s5   g  } |  j  d  k	 r+ | j d |  j  f  t |  S)NrQ   )rQ   rF   rG   )r   rH   r   r   r	   r#      s     zAlignas.childrenc             c   s   |  j  d  k	 r |  j  Vd  S)N)rQ   )r   r   r   r	   rI      s    zAlignas.__iter__)rQ   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   rP      s
   rP   c               @   sC   e  Z d  Z d Z d d d  Z d	 d
   Z d d   Z d Z d S)BinaryOprM   leftrightr.   rD   Nc             C   s(   | |  _  | |  _ | |  _ | |  _ d  S)N)rM   rS   rT   r.   )r   rM   rS   rT   r.   r   r   r	   rE      s    			zBinaryOp.__init__c             C   sZ   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  t |  S)NrS   rT   )rS   rF   rT   rG   )r   rH   r   r   r	   r#     s      zBinaryOp.childrenc             c   s2   |  j  d  k	 r |  j  V|  j d  k	 r. |  j Vd  S)N)rS   rT   )r   r   r   r	   rI     s    zBinaryOp.__iter__)rM   rS   rT   r.   rD   )rM   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   rR      s
   rR   c               @   sC   e  Z d  Z d
 Z d d d  Z d d   Z d d	   Z f  Z d S)Breakr.   rD   Nc             C   s   | |  _  d  S)N)r.   )r   r.   r   r   r	   rE     s    zBreak.__init__c             C   s   f  S)Nr   )r   r   r   r	   r#     s    zBreak.childrenc             c   s	   d  Sd  V)Nr   )r   r   r   r	   rI     s    zBreak.__iter__)r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   rU     s
   rU   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z f  Z d S)Caseexprstmtsr.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)rW   rX   r.   )r   rW   rX   r.   r   r   r	   rE     s    		zCase.__init__c             C   sr   g  } |  j  d  k	 r+ | j d |  j  f  x: t |  j p= g   D]# \ } } | j d | | f  qA Wt |  S)NrW   z	stmts[%d])rW   rF   	enumeraterX   rG   )r   rH   ir0   r   r   r	   r#   $  s     "zCase.childrenc             c   s:   |  j  d  k	 r |  j  Vx |  j p& g  D] } | Vq' Wd  S)N)rW   rX   )r   r0   r   r   r	   rI   +  s    zCase.__iter__)rW   rX   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   rV     s
   rV   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z f  Z d S)Castto_typerW   r.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)r\   rW   r.   )r   r\   rW   r.   r   r   r	   rE   5  s    		zCast.__init__c             C   sZ   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  t |  S)Nr\   rW   )r\   rF   rW   rG   )r   rH   r   r   r	   r#   :  s      zCast.childrenc             c   s2   |  j  d  k	 r |  j  V|  j d  k	 r. |  j Vd  S)N)r\   rW   )r   r   r   r	   rI   @  s    zCast.__iter__)r\   rW   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r[   3  s
   r[   c               @   sC   e  Z d  Z d Z d d d  Z d d   Z d	 d
   Z f  Z d S)Compoundblock_itemsr.   rD   Nc             C   s   | |  _  | |  _ d  S)N)r^   r.   )r   r^   r.   r   r   r	   rE   J  s    	zCompound.__init__c             C   sM   g  } x: t  |  j p g   D]# \ } } | j d | | f  q Wt |  S)Nzblock_items[%d])rY   r^   rF   rG   )r   rH   rZ   r0   r   r   r	   r#   N  s    "zCompound.childrenc             c   s#   x |  j  p g  D] } | Vq Wd  S)N)r^   )r   r0   r   r   r	   rI   T  s    zCompound.__iter__)r^   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r]   H  s
   r]   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z f  Z d S)CompoundLiteralrA   initr.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)rA   r`   r.   )r   rA   r`   r.   r   r   r	   rE   \  s    		zCompoundLiteral.__init__c             C   sZ   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  t |  S)NrA   r`   )rA   rF   r`   rG   )r   rH   r   r   r	   r#   a  s      zCompoundLiteral.childrenc             c   s2   |  j  d  k	 r |  j  V|  j d  k	 r. |  j Vd  S)N)rA   r`   )r   r   r   r	   rI   g  s    zCompoundLiteral.__iter__)rA   r`   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r_   Z  s
   r_   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z d Z d S)ConstantrA   valuer.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)rA   rb   r.   )r   rA   rb   r.   r   r   r	   rE   q  s    		zConstant.__init__c             C   s   g  } t  |  S)N)rG   )r   rH   r   r   r	   r#   v  s    zConstant.childrenc             c   s	   d  Sd  V)Nr   )r   r   r   r	   rI   z  s    zConstant.__iter__)rA   rb   r.   rD   )rA   rb   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   ra   o  s
   ra   c               @   sC   e  Z d  Z d
 Z d d d  Z d d   Z d d	   Z f  Z d S)Continuer.   rD   Nc             C   s   | |  _  d  S)N)r.   )r   r.   r   r   r	   rE     s    zContinue.__init__c             C   s   f  S)Nr   )r   r   r   r	   r#     s    zContinue.childrenc             c   s	   d  Sd  V)Nr   )r   r   r   r	   rI     s    zContinue.__iter__)r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   rc     s
   rc   c            
   @   sC   e  Z d  Z d Z d d d  Z d d   Z d d   Z d Z d S)Declr!   qualsalignstoragefuncspecrA   r`   bitsizer.   rD   Nc
       
      C   sU   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ |	 |  _ d  S)N)	r!   re   rf   rg   rh   rA   r`   ri   r.   )
r   r!   re   rf   rg   rh   rA   r`   ri   r.   r   r   r	   rE     s    								zDecl.__init__c             C   s   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  |  j d  k	 ru | j d |  j f  t |  S)NrA   r`   ri   )rA   rF   r`   ri   rG   )r   rH   r   r   r	   r#     s       zDecl.childrenc             c   sI   |  j  d  k	 r |  j  V|  j d  k	 r. |  j V|  j d  k	 rE |  j Vd  S)N)rA   r`   ri   )r   r   r   r	   rI     s    zDecl.__iter__)
r!   re   rf   rg   rh   rA   r`   ri   r.   rD   )r!   re   rf   rg   rh   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   rd     s
   rd   c               @   sC   e  Z d  Z d Z d d d  Z d d   Z d	 d
   Z f  Z d S)DeclListdeclsr.   rD   Nc             C   s   | |  _  | |  _ d  S)N)rk   r.   )r   rk   r.   r   r   r	   rE     s    	zDeclList.__init__c             C   sM   g  } x: t  |  j p g   D]# \ } } | j d | | f  q Wt |  S)Nz	decls[%d])rY   rk   rF   rG   )r   rH   rZ   r0   r   r   r	   r#     s    "zDeclList.childrenc             c   s#   x |  j  p g  D] } | Vq Wd  S)N)rk   )r   r0   r   r   r	   rI     s    zDeclList.__iter__)rk   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   rj     s
   rj   c               @   sC   e  Z d  Z d Z d d d  Z d d   Z d	 d
   Z f  Z d S)DefaultrX   r.   rD   Nc             C   s   | |  _  | |  _ d  S)N)rX   r.   )r   rX   r.   r   r   r	   rE     s    	zDefault.__init__c             C   sM   g  } x: t  |  j p g   D]# \ } } | j d | | f  q Wt |  S)Nz	stmts[%d])rY   rX   rF   rG   )r   rH   rZ   r0   r   r   r	   r#     s    "zDefault.childrenc             c   s#   x |  j  p g  D] } | Vq Wd  S)N)rX   )r   r0   r   r   r	   rI     s    zDefault.__iter__)rX   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   rl     s
   rl   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z f  Z d S)DoWhilecondstmtr.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)rn   ro   r.   )r   rn   ro   r.   r   r   r	   rE     s    		zDoWhile.__init__c             C   sZ   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  t |  S)Nrn   ro   )rn   rF   ro   rG   )r   rH   r   r   r	   r#     s      zDoWhile.childrenc             c   s2   |  j  d  k	 r |  j  V|  j d  k	 r. |  j Vd  S)N)rn   ro   )r   r   r   r	   rI     s    zDoWhile.__iter__)rn   ro   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   rm     s
   rm   c               @   sC   e  Z d  Z d
 Z d d d  Z d d   Z d d	   Z f  Z d S)EllipsisParamr.   rD   Nc             C   s   | |  _  d  S)N)r.   )r   r.   r   r   r	   rE     s    zEllipsisParam.__init__c             C   s   f  S)Nr   )r   r   r   r	   r#     s    zEllipsisParam.childrenc             c   s	   d  Sd  V)Nr   )r   r   r   r	   rI     s    zEllipsisParam.__iter__)r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   rp     s
   rp   c               @   sC   e  Z d  Z d
 Z d d d  Z d d   Z d d	   Z f  Z d S)EmptyStatementr.   rD   Nc             C   s   | |  _  d  S)N)r.   )r   r.   r   r   r	   rE     s    zEmptyStatement.__init__c             C   s   f  S)Nr   )r   r   r   r	   r#     s    zEmptyStatement.childrenc             c   s	   d  Sd  V)Nr   )r   r   r   r	   rI     s    zEmptyStatement.__iter__)r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   rq     s
   rq   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z d Z d S)Enumr!   valuesr.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)r!   rs   r.   )r   r!   rs   r.   r   r   r	   rE     s    		zEnum.__init__c             C   s5   g  } |  j  d  k	 r+ | j d |  j  f  t |  S)Nrs   )rs   rF   rG   )r   rH   r   r   r	   r#     s     zEnum.childrenc             c   s   |  j  d  k	 r |  j  Vd  S)N)rs   )r   r   r   r	   rI     s    zEnum.__iter__)r!   rs   r.   rD   )r!   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   rr     s
   rr   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z d Z d S)
Enumeratorr!   rb   r.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)r!   rb   r.   )r   r!   rb   r.   r   r   r	   rE     s    		zEnumerator.__init__c             C   s5   g  } |  j  d  k	 r+ | j d |  j  f  t |  S)Nrb   )rb   rF   rG   )r   rH   r   r   r	   r#     s     zEnumerator.childrenc             c   s   |  j  d  k	 r |  j  Vd  S)N)rb   )r   r   r   r	   rI     s    zEnumerator.__iter__)r!   rb   r.   rD   )r!   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   rt     s
   rt   c               @   sC   e  Z d  Z d Z d d d  Z d d   Z d	 d
   Z f  Z d S)EnumeratorListenumeratorsr.   rD   Nc             C   s   | |  _  | |  _ d  S)N)rv   r.   )r   rv   r.   r   r   r	   rE   '  s    	zEnumeratorList.__init__c             C   sM   g  } x: t  |  j p g   D]# \ } } | j d | | f  q Wt |  S)Nzenumerators[%d])rY   rv   rF   rG   )r   rH   rZ   r0   r   r   r	   r#   +  s    "zEnumeratorList.childrenc             c   s#   x |  j  p g  D] } | Vq Wd  S)N)rv   )r   r0   r   r   r	   rI   1  s    zEnumeratorList.__iter__)rv   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   ru   %  s
   ru   c               @   sC   e  Z d  Z d Z d d d  Z d d   Z d	 d
   Z f  Z d S)ExprListexprsr.   rD   Nc             C   s   | |  _  | |  _ d  S)N)rx   r.   )r   rx   r.   r   r   r	   rE   9  s    	zExprList.__init__c             C   sM   g  } x: t  |  j p g   D]# \ } } | j d | | f  q Wt |  S)Nz	exprs[%d])rY   rx   rF   rG   )r   rH   rZ   r0   r   r   r	   r#   =  s    "zExprList.childrenc             c   s#   x |  j  p g  D] } | Vq Wd  S)N)rx   )r   r0   r   r   r	   rI   C  s    zExprList.__iter__)rx   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   rw   7  s
   rw   c               @   sC   e  Z d  Z d Z d d d  Z d d   Z d	 d
   Z f  Z d S)FileASTextr.   rD   Nc             C   s   | |  _  | |  _ d  S)N)rz   r.   )r   rz   r.   r   r   r	   rE   K  s    	zFileAST.__init__c             C   sM   g  } x: t  |  j p g   D]# \ } } | j d | | f  q Wt |  S)Nzext[%d])rY   rz   rF   rG   )r   rH   rZ   r0   r   r   r	   r#   O  s    "zFileAST.childrenc             c   s#   x |  j  p g  D] } | Vq Wd  S)N)rz   )r   r0   r   r   r	   rI   U  s    zFileAST.__iter__)rz   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   ry   I  s
   ry   c               @   sC   e  Z d  Z d Z d d d	  Z d
 d   Z d d   Z f  Z d S)Forr`   rn   nextro   r.   rD   Nc             C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S)N)r`   rn   r|   ro   r.   )r   r`   rn   r|   ro   r.   r   r   r	   rE   ]  s
    				zFor.__init__c             C   s   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  |  j d  k	 ru | j d |  j f  |  j d  k	 r | j d |  j f  t |  S)Nr`   rn   r|   ro   )r`   rF   rn   r|   ro   rG   )r   rH   r   r   r	   r#   d  s        zFor.childrenc             c   s`   |  j  d  k	 r |  j  V|  j d  k	 r. |  j V|  j d  k	 rE |  j V|  j d  k	 r\ |  j Vd  S)N)r`   rn   r|   ro   )r   r   r   r	   rI   l  s    zFor.__iter__)r`   rn   r|   ro   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r{   [  s
   
r{   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z f  Z d S)FuncCallr!   argsr.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)r!   r~   r.   )r   r!   r~   r.   r   r   r	   rE   z  s    		zFuncCall.__init__c             C   sZ   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  t |  S)Nr!   r~   )r!   rF   r~   rG   )r   rH   r   r   r	   r#     s      zFuncCall.childrenc             c   s2   |  j  d  k	 r |  j  V|  j d  k	 r. |  j Vd  S)N)r!   r~   )r   r   r   r	   rI     s    zFuncCall.__iter__)r!   r~   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r}   x  s
   r}   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z f  Z d S)FuncDeclr~   rA   r.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)r~   rA   r.   )r   r~   rA   r.   r   r   r	   rE     s    		zFuncDecl.__init__c             C   sZ   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  t |  S)Nr~   rA   )r~   rF   rA   rG   )r   rH   r   r   r	   r#     s      zFuncDecl.childrenc             c   s2   |  j  d  k	 r |  j  V|  j d  k	 r. |  j Vd  S)N)r~   rA   )r   r   r   r	   rI     s    zFuncDecl.__iter__)r~   rA   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r     s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d	 d
   Z d d   Z f  Z d S)FuncDefdeclparam_declsbodyr.   rD   Nc             C   s(   | |  _  | |  _ | |  _ | |  _ d  S)N)r   r   r   r.   )r   r   r   r   r.   r   r   r	   rE     s    			zFuncDef.__init__c             C   s   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  x: t |  j pb g   D]# \ } } | j d | | f  qf Wt |  S)Nr   r   zparam_decls[%d])r   rF   r   rY   r   rG   )r   rH   rZ   r0   r   r   r	   r#     s      "zFuncDef.childrenc             c   sQ   |  j  d  k	 r |  j  V|  j d  k	 r. |  j Vx |  j p= g  D] } | Vq> Wd  S)N)r   r   r   )r   r0   r   r   r	   rI     s    zFuncDef.__iter__)r   r   r   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r     s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d d   Z d	 d
   Z d Z d S)Gotor!   r.   rD   Nc             C   s   | |  _  | |  _ d  S)N)r!   r.   )r   r!   r.   r   r   r	   rE     s    	zGoto.__init__c             C   s   g  } t  |  S)N)rG   )r   rH   r   r   r	   r#     s    zGoto.childrenc             c   s	   d  Sd  V)Nr   )r   r   r   r	   rI     s    zGoto.__iter__)r!   r.   rD   )r!   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r     s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d d   Z d	 d
   Z d Z d S)IDr!   r.   rD   Nc             C   s   | |  _  | |  _ d  S)N)r!   r.   )r   r!   r.   r   r   r	   rE     s    	zID.__init__c             C   s   g  } t  |  S)N)rG   )r   rH   r   r   r	   r#     s    zID.childrenc             c   s	   d  Sd  V)Nr   )r   r   r   r	   rI     s    zID.__iter__)r!   r.   rD   )r!   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r     s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d d   Z d	 d
   Z d Z d S)IdentifierTypenamesr.   rD   Nc             C   s   | |  _  | |  _ d  S)N)r   r.   )r   r   r.   r   r   r	   rE     s    	zIdentifierType.__init__c             C   s   g  } t  |  S)N)rG   )r   rH   r   r   r	   r#     s    zIdentifierType.childrenc             c   s	   d  Sd  V)Nr   )r   r   r   r	   rI     s    zIdentifierType.__iter__)r   r.   rD   )r   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r     s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d	 d
   Z d d   Z f  Z d S)Ifrn   iftrueiffalser.   rD   Nc             C   s(   | |  _  | |  _ | |  _ | |  _ d  S)N)rn   r   r   r.   )r   rn   r   r   r.   r   r   r	   rE     s    			zIf.__init__c             C   s   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  |  j d  k	 ru | j d |  j f  t |  S)Nrn   r   r   )rn   rF   r   r   rG   )r   rH   r   r   r	   r#     s       zIf.childrenc             c   sI   |  j  d  k	 r |  j  V|  j d  k	 r. |  j V|  j d  k	 rE |  j Vd  S)N)rn   r   r   )r   r   r   r	   rI     s    zIf.__iter__)rn   r   r   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r     s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d d   Z d	 d
   Z f  Z d S)InitListrx   r.   rD   Nc             C   s   | |  _  | |  _ d  S)N)rx   r.   )r   rx   r.   r   r   r	   rE     s    	zInitList.__init__c             C   sM   g  } x: t  |  j p g   D]# \ } } | j d | | f  q Wt |  S)Nz	exprs[%d])rY   rx   rF   rG   )r   rH   rZ   r0   r   r   r	   r#     s    "zInitList.childrenc             c   s#   x |  j  p g  D] } | Vq Wd  S)N)rx   )r   r0   r   r   r	   rI     s    zInitList.__iter__)rx   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r     s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z d Z d S)Labelr!   ro   r.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)r!   ro   r.   )r   r!   ro   r.   r   r   r	   rE     s    		zLabel.__init__c             C   s5   g  } |  j  d  k	 r+ | j d |  j  f  t |  S)Nro   )ro   rF   rG   )r   rH   r   r   r	   r#     s     zLabel.childrenc             c   s   |  j  d  k	 r |  j  Vd  S)N)ro   )r   r   r   r	   rI   #  s    zLabel.__iter__)r!   ro   r.   rD   )r!   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r     s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z f  Z d S)NamedInitializerr!   rW   r.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)r!   rW   r.   )r   r!   rW   r.   r   r   r	   rE   +  s    		zNamedInitializer.__init__c             C   sr   g  } |  j  d  k	 r+ | j d |  j  f  x: t |  j p= g   D]# \ } } | j d | | f  qA Wt |  S)NrW   zname[%d])rW   rF   rY   r!   rG   )r   rH   rZ   r0   r   r   r	   r#   0  s     "zNamedInitializer.childrenc             c   s:   |  j  d  k	 r |  j  Vx |  j p& g  D] } | Vq' Wd  S)N)rW   r!   )r   r0   r   r   r	   rI   7  s    zNamedInitializer.__iter__)r!   rW   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r   )  s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d d   Z d	 d
   Z f  Z d S)	ParamListparamsr.   rD   Nc             C   s   | |  _  | |  _ d  S)N)r   r.   )r   r   r.   r   r   r	   rE   A  s    	zParamList.__init__c             C   sM   g  } x: t  |  j p g   D]# \ } } | j d | | f  q Wt |  S)Nz
params[%d])rY   r   rF   rG   )r   rH   rZ   r0   r   r   r	   r#   E  s    "zParamList.childrenc             c   s#   x |  j  p g  D] } | Vq Wd  S)N)r   )r   r0   r   r   r	   rI   K  s    zParamList.__iter__)r   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r   ?  s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z d Z d S)PtrDeclre   rA   r.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)re   rA   r.   )r   re   rA   r.   r   r   r	   rE   S  s    		zPtrDecl.__init__c             C   s5   g  } |  j  d  k	 r+ | j d |  j  f  t |  S)NrA   )rA   rF   rG   )r   rH   r   r   r	   r#   X  s     zPtrDecl.childrenc             c   s   |  j  d  k	 r |  j  Vd  S)N)rA   )r   r   r   r	   rI   ]  s    zPtrDecl.__iter__)re   rA   r.   rD   )re   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r   Q  s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d d   Z d	 d
   Z f  Z d S)ReturnrW   r.   rD   Nc             C   s   | |  _  | |  _ d  S)N)rW   r.   )r   rW   r.   r   r   r	   rE   e  s    	zReturn.__init__c             C   s5   g  } |  j  d  k	 r+ | j d |  j  f  t |  S)NrW   )rW   rF   rG   )r   rH   r   r   r	   r#   i  s     zReturn.childrenc             c   s   |  j  d  k	 r |  j  Vd  S)N)rW   )r   r   r   r	   rI   n  s    zReturn.__iter__)rW   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r   c  s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z f  Z d S)StaticAssertrn   messager.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)rn   r   r.   )r   rn   r   r.   r   r   r	   rE   v  s    		zStaticAssert.__init__c             C   sZ   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  t |  S)Nrn   r   )rn   rF   r   rG   )r   rH   r   r   r	   r#   {  s      zStaticAssert.childrenc             c   s2   |  j  d  k	 r |  j  V|  j d  k	 r. |  j Vd  S)N)rn   r   )r   r   r   r	   rI     s    zStaticAssert.__iter__)rn   r   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r   t  s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z d Z d S)Structr!   rk   r.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)r!   rk   r.   )r   r!   rk   r.   r   r   r	   rE     s    		zStruct.__init__c             C   sM   g  } x: t  |  j p g   D]# \ } } | j d | | f  q Wt |  S)Nz	decls[%d])rY   rk   rF   rG   )r   rH   rZ   r0   r   r   r	   r#     s    "zStruct.childrenc             c   s#   x |  j  p g  D] } | Vq Wd  S)N)rk   )r   r0   r   r   r	   rI     s    zStruct.__iter__)r!   rk   r.   rD   )r!   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r     s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d	 d
   Z d d   Z d Z d S)	StructRefr!   rA   fieldr.   rD   Nc             C   s(   | |  _  | |  _ | |  _ | |  _ d  S)N)r!   rA   r   r.   )r   r!   rA   r   r.   r   r   r	   rE     s    			zStructRef.__init__c             C   sZ   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  t |  S)Nr!   r   )r!   rF   r   rG   )r   rH   r   r   r	   r#     s      zStructRef.childrenc             c   s2   |  j  d  k	 r |  j  V|  j d  k	 r. |  j Vd  S)N)r!   r   )r   r   r   r	   rI     s    zStructRef.__iter__)r!   rA   r   r.   rD   )rA   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r     s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z f  Z d S)Switchrn   ro   r.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)rn   ro   r.   )r   rn   ro   r.   r   r   r	   rE     s    		zSwitch.__init__c             C   sZ   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  t |  S)Nrn   ro   )rn   rF   ro   rG   )r   rH   r   r   r	   r#     s      zSwitch.childrenc             c   s2   |  j  d  k	 r |  j  V|  j d  k	 r. |  j Vd  S)N)rn   ro   )r   r   r   r	   rI     s    zSwitch.__iter__)rn   ro   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r     s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d	 d
   Z d d   Z f  Z d S)	TernaryOprn   r   r   r.   rD   Nc             C   s(   | |  _  | |  _ | |  _ | |  _ d  S)N)rn   r   r   r.   )r   rn   r   r   r.   r   r   r	   rE     s    			zTernaryOp.__init__c             C   s   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  |  j d  k	 ru | j d |  j f  t |  S)Nrn   r   r   )rn   rF   r   r   rG   )r   rH   r   r   r	   r#     s       zTernaryOp.childrenc             c   sI   |  j  d  k	 r |  j  V|  j d  k	 r. |  j V|  j d  k	 rE |  j Vd  S)N)rn   r   r   )r   r   r   r	   rI     s    zTernaryOp.__iter__)rn   r   r   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r     s
   r   c               @   sC   e  Z d  Z d Z d d d	  Z d
 d   Z d d   Z d Z d S)TypeDecldeclnamere   rf   rA   r.   rD   Nc             C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S)N)r   re   rf   rA   r.   )r   r   re   rf   rA   r.   r   r   r	   rE     s
    				zTypeDecl.__init__c             C   s5   g  } |  j  d  k	 r+ | j d |  j  f  t |  S)NrA   )rA   rF   rG   )r   rH   r   r   r	   r#     s     zTypeDecl.childrenc             c   s   |  j  d  k	 r |  j  Vd  S)N)rA   )r   r   r   r	   rI     s    zTypeDecl.__iter__)r   re   rf   rA   r.   rD   )r   re   rf   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r     s
   r   c               @   sC   e  Z d  Z d Z d d d	  Z d
 d   Z d d   Z d Z d S)Typedefr!   re   rg   rA   r.   rD   Nc             C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S)N)r!   re   rg   rA   r.   )r   r!   re   rg   rA   r.   r   r   r	   rE     s
    				zTypedef.__init__c             C   s5   g  } |  j  d  k	 r+ | j d |  j  f  t |  S)NrA   )rA   rF   rG   )r   rH   r   r   r	   r#     s     zTypedef.childrenc             c   s   |  j  d  k	 r |  j  Vd  S)N)rA   )r   r   r   r	   rI     s    zTypedef.__iter__)r!   re   rg   rA   r.   rD   )r!   re   rg   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r     s
   r   c               @   sC   e  Z d  Z d Z d d d	  Z d
 d   Z d d   Z d Z d S)Typenamer!   re   rf   rA   r.   rD   Nc             C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S)N)r!   re   rf   rA   r.   )r   r!   re   rf   rA   r.   r   r   r	   rE   
  s
    				zTypename.__init__c             C   s5   g  } |  j  d  k	 r+ | j d |  j  f  t |  S)NrA   )rA   rF   rG   )r   rH   r   r   r	   r#     s     zTypename.childrenc             c   s   |  j  d  k	 r |  j  Vd  S)N)rA   )r   r   r   r	   rI     s    zTypename.__iter__)r!   re   rf   rA   r.   rD   )r!   re   rf   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r     s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z d Z d S)UnaryOprM   rW   r.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)rM   rW   r.   )r   rM   rW   r.   r   r   r	   rE     s    		zUnaryOp.__init__c             C   s5   g  } |  j  d  k	 r+ | j d |  j  f  t |  S)NrW   )rW   rF   rG   )r   rH   r   r   r	   r#   #  s     zUnaryOp.childrenc             c   s   |  j  d  k	 r |  j  Vd  S)N)rW   )r   r   r   r	   rI   (  s    zUnaryOp.__iter__)rM   rW   r.   rD   )rM   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r     s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z d Z d S)Unionr!   rk   r.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)r!   rk   r.   )r   r!   rk   r.   r   r   r	   rE   0  s    		zUnion.__init__c             C   sM   g  } x: t  |  j p g   D]# \ } } | j d | | f  q Wt |  S)Nz	decls[%d])rY   rk   rF   rG   )r   rH   rZ   r0   r   r   r	   r#   5  s    "zUnion.childrenc             c   s#   x |  j  p g  D] } | Vq Wd  S)N)rk   )r   r0   r   r   r	   rI   ;  s    zUnion.__iter__)r!   rk   r.   rD   )r!   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r   .  s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d d	   Z d
 d   Z f  Z d S)Whilern   ro   r.   rD   Nc             C   s   | |  _  | |  _ | |  _ d  S)N)rn   ro   r.   )r   rn   ro   r.   r   r   r	   rE   C  s    		zWhile.__init__c             C   sZ   g  } |  j  d  k	 r+ | j d |  j  f  |  j d  k	 rP | j d |  j f  t |  S)Nrn   ro   )rn   rF   ro   rG   )r   rH   r   r   r	   r#   H  s      zWhile.childrenc             c   s2   |  j  d  k	 r |  j  V|  j d  k	 r. |  j Vd  S)N)rn   ro   )r   r   r   r	   rI   N  s    zWhile.__iter__)rn   ro   r.   rD   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r   A  s
   r   c               @   sC   e  Z d  Z d Z d d d  Z d d   Z d	 d
   Z d Z d S)Pragmastringr.   rD   Nc             C   s   | |  _  | |  _ d  S)N)r   r.   )r   r   r.   r   r   r	   rE   X  s    	zPragma.__init__c             C   s   g  } t  |  S)N)rG   )r   rH   r   r   r	   r#   \  s    zPragma.childrenc             c   s	   d  Sd  V)Nr   )r   r   r   r	   rI   `  s    zPragma.__iter__)r   r.   rD   )r   )r   r1   r2   r   rE   r#   rI   r-   r   r   r   r	   r   V  s
   r   )6r3   r   objectr   r5   r@   rJ   rL   rP   rR   rU   rV   r[   r]   r_   ra   rc   rd   rj   rl   rm   rp   rq   rr   rt   ru   rw   ry   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   <module>   sh   	O: