B
    hz                 @   sD  d dl Z dd ZG dd deZG dd deZG dd	 d	eZG d
d deZG dd deZG dd deZG dd deZ	G dd deZ
G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG d d! d!eZG d"d# d#eZG d$d% d%eZG d&d' d'eZG d(d) d)eZG d*d+ d+eZG d,d- d-eZG d.d/ d/eZG d0d1 d1eZG d2d3 d3eZG d4d5 d5eZG d6d7 d7eZG d8d9 d9eZG d:d; d;eZG d<d= d=eZG d>d? d?eZ G d@dA dAeZ!G dBdC dCeZ"G dDdE dEeZ#G dFdG dGeZ$G dHdI dIeZ%G dJdK dKeZ&G dLdM dMeZ'G dNdO dOeZ(G dPdQ dQeZ)G dRdS dSeZ*G dTdU dUeZ+G dVdW dWeZ,G dXdY dYeZ-G dZd[ d[eZ.G d\d] d]eZ/G d^d_ d_eZ0G d`da daeZ1G dbdc dceZ2G ddde deeZ3G dfdg dgeZ4G dhdi dieZ5dS )j    Nc             C   s2   t | tr&dddd | D  d S t| S dS )z[
    Get the representation of an object, with dedicated pprint-like format for lists.
    [z,
 c             s   s   | ]}t |d dV  qdS )
z
 N)_reprreplace).0e r   LC:\Users\sanjo\AppData\Local\Qlobot\Launcher\ext_packages\pycparser\c_ast.py	<genexpr>   s    z_repr.<locals>.<genexpr>z
]N)
isinstancelistjoinrepr)objr   r   r	   r      s    
r   c               @   s8   e Zd ZdZdd Zdd Zejdddddfd	d
ZdS )Noder   c             C   s   | j jd }d}d}xx| jdd D ]f}||7 }||7 }||d tt| |dddt|t| j j    7 }d	}d
dt| j j  }q$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indent	separatornamer   r   r	   __repr__"   s    :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          	      s  d| }|r4|dk	r4| | jj d | d  n| | jj d   jr|r~ fdd jD }dd	d
 |D }	n( fdd jD }
ddd
 |
D }	| |	 |r| d j  | d x.  D ]"\}}|j||d ||||d qW d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S r   )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   nvr   r   r	   r
   Y   s    zNode.show.<locals>.<genexpr>c                s   g | ]}t  |qS r   )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      )offset	attrnames	nodenames	showcoord_my_node_name)writer   r   
attr_namesr   coordr#   show)r   bufr)   r*   r+   r,   r-   ZleadZnvlistZattrstrZvlistZ
child_namechildr   )r   r	   r1   :   s,     

z	Node.show)	r   
__module____qualname__r   r"   r#   sysstdoutr1   r   r   r   r	   r      s   r   c               @   s$   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   sZ   | j dkri | _ | j |jjd}|dkrRd|jj }t| || j}|| j |jj< ||S )z Visit a node.
        NZvisit_)_method_cachegetr   r   r   generic_visit)r   nodeZvisitormethodr   r   r	   visit   s    
zNodeVisitor.visitc             C   s   x|D ]}|  | qW d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	   r;      s    
zNodeVisitor.generic_visit)r   r4   r5   __doc__r9   r>   r;   r   r   r   r	   r8   m   s    r8   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )	ArrayDecl)typedim	dim_qualsr0   __weakref__Nc             C   s   || _ || _|| _|| _d S )N)rB   rC   rD   r0   )r   rB   rC   rD   r0   r   r   r	   __init__   s    zArrayDecl.__init__c             C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )NrB   rC   )rB   appendrC   tuple)r   nodelistr   r   r	   r#      s    
 
 zArrayDecl.childrenc             c   s(   | j d k	r| j V  | jd k	r$| jV  d S )N)rB   rC   )r   r   r   r	   __iter__   s    

zArrayDecl.__iter__)rD   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rA      s
   
rA   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )ArrayRef)r!   	subscriptr0   rE   Nc             C   s   || _ || _|| _d S )N)r!   rL   r0   )r   r!   rL   r0   r   r   r	   rF      s    zArrayRef.__init__c             C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )Nr!   rL   )r!   rG   rL   rH   )r   rI   r   r   r	   r#      s    
 
 zArrayRef.childrenc             c   s(   | j d k	r| j V  | jd k	r$| jV  d S )N)r!   rL   )r   r   r   r	   rJ      s    

zArrayRef.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rK      s
   
rK   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )
Assignment)oplvaluervaluer0   rE   Nc             C   s   || _ || _|| _|| _d S )N)rN   rO   rP   r0   )r   rN   rO   rP   r0   r   r   r	   rF      s    zAssignment.__init__c             C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )NrO   rP   )rO   rG   rP   rH   )r   rI   r   r   r	   r#      s    
 
 zAssignment.childrenc             c   s(   | j d k	r| j V  | jd k	r$| jV  d S )N)rO   rP   )r   r   r   r	   rJ      s    

zAssignment.__iter__)rN   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rM      s
   
rM   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Alignas)	alignmentr0   rE   Nc             C   s   || _ || _d S )N)rR   r0   )r   rR   r0   r   r   r	   rF      s    zAlignas.__init__c             C   s&   g }| j d k	r|d| j f t|S )NrR   )rR   rG   rH   )r   rI   r   r   r	   r#      s    
 zAlignas.childrenc             c   s   | j d k	r| j V  d S )N)rR   )r   r   r   r	   rJ      s    
zAlignas.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rQ      s
   
rQ   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )BinaryOp)rN   leftrightr0   rE   Nc             C   s   || _ || _|| _|| _d S )N)rN   rT   rU   r0   )r   rN   rT   rU   r0   r   r   r	   rF      s    zBinaryOp.__init__c             C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )NrT   rU   )rT   rG   rU   rH   )r   rI   r   r   r	   r#     s    
 
 zBinaryOp.childrenc             c   s(   | j d k	r| j V  | jd k	r$| jV  d S )N)rT   rU   )r   r   r   r	   rJ     s    

zBinaryOp.__iter__)rN   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rS      s
   
rS   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Break)r0   rE   Nc             C   s
   || _ d S )N)r0   )r   r0   r   r   r	   rF     s    zBreak.__init__c             C   s   dS )Nr   r   )r   r   r   r	   r#     s    zBreak.childrenc             c   s   d S )Nr   )r   r   r   r	   rJ     s    zBreak.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rV     s
   
rV   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Case)exprstmtsr0   rE   Nc             C   s   || _ || _|| _d S )N)rX   rY   r0   )r   rX   rY   r0   r   r   r	   rF     s    zCase.__init__c             C   sT   g }| j d k	r|d| j f x,t| jp*g D ]\}}|d| |f q.W t|S )NrX   z	stmts[%d])rX   rG   	enumeraterY   rH   )r   rI   ir3   r   r   r	   r#   $  s    
 zCase.childrenc             c   s0   | j d k	r| j V  x| jpg D ]
}|V  qW d S )N)rX   rY   )r   r3   r   r   r	   rJ   +  s    
zCase.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rW     s
   
rW   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Cast)to_typerX   r0   rE   Nc             C   s   || _ || _|| _d S )N)r]   rX   r0   )r   r]   rX   r0   r   r   r	   rF   5  s    zCast.__init__c             C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )Nr]   rX   )r]   rG   rX   rH   )r   rI   r   r   r	   r#   :  s    
 
 zCast.childrenc             c   s(   | j d k	r| j V  | jd k	r$| jV  d S )N)r]   rX   )r   r   r   r	   rJ   @  s    

zCast.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r\   3  s
   
r\   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Compound)block_itemsr0   rE   Nc             C   s   || _ || _d S )N)r_   r0   )r   r_   r0   r   r   r	   rF   J  s    zCompound.__init__c             C   s:   g }x,t | jpg D ]\}}|d| |f qW t|S )Nzblock_items[%d])rZ   r_   rG   rH   )r   rI   r[   r3   r   r   r	   r#   N  s    zCompound.childrenc             c   s   x| j p
g D ]
}|V  qW d S )N)r_   )r   r3   r   r   r	   rJ   T  s    zCompound.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r^   H  s
   
r^   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )CompoundLiteral)rB   initr0   rE   Nc             C   s   || _ || _|| _d S )N)rB   ra   r0   )r   rB   ra   r0   r   r   r	   rF   \  s    zCompoundLiteral.__init__c             C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )NrB   ra   )rB   rG   ra   rH   )r   rI   r   r   r	   r#   a  s    
 
 zCompoundLiteral.childrenc             c   s(   | j d k	r| j V  | jd k	r$| jV  d S )N)rB   ra   )r   r   r   r	   rJ   g  s    

zCompoundLiteral.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r`   Z  s
   
r`   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Constant)rB   valuer0   rE   Nc             C   s   || _ || _|| _d S )N)rB   rc   r0   )r   rB   rc   r0   r   r   r	   rF   q  s    zConstant.__init__c             C   s   g }t |S )N)rH   )r   rI   r   r   r	   r#   v  s    zConstant.childrenc             c   s   d S )Nr   )r   r   r   r	   rJ   z  s    zConstant.__iter__)rB   rc   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rb   o  s
   
rb   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Continue)r0   rE   Nc             C   s
   || _ d S )N)r0   )r   r0   r   r   r	   rF     s    zContinue.__init__c             C   s   dS )Nr   r   )r   r   r   r	   r#     s    zContinue.childrenc             c   s   d S )Nr   )r   r   r   r	   rJ     s    zContinue.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rd     s
   
rd   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Decl)
r!   qualsalignstoragefuncspecrB   ra   bitsizer0   rE   Nc
       
      C   s:   || _ || _|| _|| _|| _|| _|| _|| _|	| _d S )N)	r!   rf   rg   rh   ri   rB   ra   rj   r0   )
r   r!   rf   rg   rh   ri   rB   ra   rj   r0   r   r   r	   rF     s    zDecl.__init__c             C   sZ   g }| j d k	r|d| j f | jd k	r8|d| jf | jd k	rR|d| jf t|S )NrB   ra   rj   )rB   rG   ra   rj   rH   )r   rI   r   r   r	   r#     s    
 
 
 zDecl.childrenc             c   s:   | j d k	r| j V  | jd k	r$| jV  | jd k	r6| jV  d S )N)rB   ra   rj   )r   r   r   r	   rJ     s    


zDecl.__iter__)r!   rf   rg   rh   ri   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   re     s
   
re   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )DeclList)declsr0   rE   Nc             C   s   || _ || _d S )N)rl   r0   )r   rl   r0   r   r   r	   rF     s    zDeclList.__init__c             C   s:   g }x,t | jpg D ]\}}|d| |f qW t|S )Nz	decls[%d])rZ   rl   rG   rH   )r   rI   r[   r3   r   r   r	   r#     s    zDeclList.childrenc             c   s   x| j p
g D ]
}|V  qW d S )N)rl   )r   r3   r   r   r	   rJ     s    zDeclList.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rk     s
   
rk   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Default)rY   r0   rE   Nc             C   s   || _ || _d S )N)rY   r0   )r   rY   r0   r   r   r	   rF     s    zDefault.__init__c             C   s:   g }x,t | jpg D ]\}}|d| |f qW t|S )Nz	stmts[%d])rZ   rY   rG   rH   )r   rI   r[   r3   r   r   r	   r#     s    zDefault.childrenc             c   s   x| j p
g D ]
}|V  qW d S )N)rY   )r   r3   r   r   r	   rJ     s    zDefault.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rm     s
   
rm   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )DoWhile)condstmtr0   rE   Nc             C   s   || _ || _|| _d S )N)ro   rp   r0   )r   ro   rp   r0   r   r   r	   rF     s    zDoWhile.__init__c             C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )Nro   rp   )ro   rG   rp   rH   )r   rI   r   r   r	   r#     s    
 
 zDoWhile.childrenc             c   s(   | j d k	r| j V  | jd k	r$| jV  d S )N)ro   rp   )r   r   r   r	   rJ     s    

zDoWhile.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rn     s
   
rn   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )EllipsisParam)r0   rE   Nc             C   s
   || _ d S )N)r0   )r   r0   r   r   r	   rF     s    zEllipsisParam.__init__c             C   s   dS )Nr   r   )r   r   r   r	   r#     s    zEllipsisParam.childrenc             c   s   d S )Nr   )r   r   r   r	   rJ     s    zEllipsisParam.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rq     s
   
rq   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )EmptyStatement)r0   rE   Nc             C   s
   || _ d S )N)r0   )r   r0   r   r   r	   rF     s    zEmptyStatement.__init__c             C   s   dS )Nr   r   )r   r   r   r	   r#     s    zEmptyStatement.childrenc             c   s   d S )Nr   )r   r   r   r	   rJ     s    zEmptyStatement.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rr     s
   
rr   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Enum)r!   valuesr0   rE   Nc             C   s   || _ || _|| _d S )N)r!   rt   r0   )r   r!   rt   r0   r   r   r	   rF     s    zEnum.__init__c             C   s&   g }| j d k	r|d| j f t|S )Nrt   )rt   rG   rH   )r   rI   r   r   r	   r#     s    
 zEnum.childrenc             c   s   | j d k	r| j V  d S )N)rt   )r   r   r   r	   rJ     s    
zEnum.__iter__)r!   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rs     s
   
rs   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )
Enumerator)r!   rc   r0   rE   Nc             C   s   || _ || _|| _d S )N)r!   rc   r0   )r   r!   rc   r0   r   r   r	   rF     s    zEnumerator.__init__c             C   s&   g }| j d k	r|d| j f t|S )Nrc   )rc   rG   rH   )r   rI   r   r   r	   r#     s    
 zEnumerator.childrenc             c   s   | j d k	r| j V  d S )N)rc   )r   r   r   r	   rJ     s    
zEnumerator.__iter__)r!   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   ru     s
   
ru   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )EnumeratorList)enumeratorsr0   rE   Nc             C   s   || _ || _d S )N)rw   r0   )r   rw   r0   r   r   r	   rF   '  s    zEnumeratorList.__init__c             C   s:   g }x,t | jpg D ]\}}|d| |f qW t|S )Nzenumerators[%d])rZ   rw   rG   rH   )r   rI   r[   r3   r   r   r	   r#   +  s    zEnumeratorList.childrenc             c   s   x| j p
g D ]
}|V  qW d S )N)rw   )r   r3   r   r   r	   rJ   1  s    zEnumeratorList.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rv   %  s
   
rv   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )ExprList)exprsr0   rE   Nc             C   s   || _ || _d S )N)ry   r0   )r   ry   r0   r   r   r	   rF   9  s    zExprList.__init__c             C   s:   g }x,t | jpg D ]\}}|d| |f qW t|S )Nz	exprs[%d])rZ   ry   rG   rH   )r   rI   r[   r3   r   r   r	   r#   =  s    zExprList.childrenc             c   s   x| j p
g D ]
}|V  qW d S )N)ry   )r   r3   r   r   r	   rJ   C  s    zExprList.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rx   7  s
   
rx   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )FileAST)extr0   rE   Nc             C   s   || _ || _d S )N)r{   r0   )r   r{   r0   r   r   r	   rF   K  s    zFileAST.__init__c             C   s:   g }x,t | jpg D ]\}}|d| |f qW t|S )Nzext[%d])rZ   r{   rG   rH   )r   rI   r[   r3   r   r   r	   r#   O  s    zFileAST.childrenc             c   s   x| j p
g D ]
}|V  qW d S )N)r{   )r   r3   r   r   r	   rJ   U  s    zFileAST.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   rz   I  s
   
rz   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )For)ra   ro   nextrp   r0   rE   Nc             C   s"   || _ || _|| _|| _|| _d S )N)ra   ro   r}   rp   r0   )r   ra   ro   r}   rp   r0   r   r   r	   rF   ]  s
    zFor.__init__c             C   st   g }| j d k	r|d| j f | jd k	r8|d| jf | jd k	rR|d| jf | jd k	rl|d| jf t|S )Nra   ro   r}   rp   )ra   rG   ro   r}   rp   rH   )r   rI   r   r   r	   r#   d  s    
 
 
 
 zFor.childrenc             c   sL   | j d k	r| j V  | jd k	r$| jV  | jd k	r6| jV  | jd k	rH| jV  d S )N)ra   ro   r}   rp   )r   r   r   r	   rJ   l  s    



zFor.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r|   [  s
   

r|   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )FuncCall)r!   argsr0   rE   Nc             C   s   || _ || _|| _d S )N)r!   r   r0   )r   r!   r   r0   r   r   r	   rF   z  s    zFuncCall.__init__c             C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )Nr!   r   )r!   rG   r   rH   )r   rI   r   r   r	   r#     s    
 
 zFuncCall.childrenc             c   s(   | j d k	r| j V  | jd k	r$| jV  d S )N)r!   r   )r   r   r   r	   rJ     s    

zFuncCall.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r~   x  s
   
r~   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )FuncDecl)r   rB   r0   rE   Nc             C   s   || _ || _|| _d S )N)r   rB   r0   )r   r   rB   r0   r   r   r	   rF     s    zFuncDecl.__init__c             C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )Nr   rB   )r   rG   rB   rH   )r   rI   r   r   r	   r#     s    
 
 zFuncDecl.childrenc             c   s(   | j d k	r| j V  | jd k	r$| jV  d S )N)r   rB   )r   r   r   r	   rJ     s    

zFuncDecl.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r     s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )FuncDef)declparam_declsbodyr0   rE   Nc             C   s   || _ || _|| _|| _d S )N)r   r   r   r0   )r   r   r   r   r0   r   r   r	   rF     s    zFuncDef.__init__c             C   sn   g }| j d k	r|d| j f | jd k	r8|d| jf x,t| jpDg D ]\}}|d| |f qHW t|S )Nr   r   zparam_decls[%d])r   rG   r   rZ   r   rH   )r   rI   r[   r3   r   r   r	   r#     s    
 
 zFuncDef.childrenc             c   sB   | j d k	r| j V  | jd k	r$| jV  x| jp.g D ]
}|V  q0W d S )N)r   r   r   )r   r3   r   r   r	   rJ     s    

zFuncDef.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r     s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Goto)r!   r0   rE   Nc             C   s   || _ || _d S )N)r!   r0   )r   r!   r0   r   r   r	   rF     s    zGoto.__init__c             C   s   g }t |S )N)rH   )r   rI   r   r   r	   r#     s    zGoto.childrenc             c   s   d S )Nr   )r   r   r   r	   rJ     s    zGoto.__iter__)r!   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r     s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )ID)r!   r0   rE   Nc             C   s   || _ || _d S )N)r!   r0   )r   r!   r0   r   r   r	   rF     s    zID.__init__c             C   s   g }t |S )N)rH   )r   rI   r   r   r	   r#     s    zID.childrenc             c   s   d S )Nr   )r   r   r   r	   rJ     s    zID.__iter__)r!   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r     s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )IdentifierType)namesr0   rE   Nc             C   s   || _ || _d S )N)r   r0   )r   r   r0   r   r   r	   rF     s    zIdentifierType.__init__c             C   s   g }t |S )N)rH   )r   rI   r   r   r	   r#     s    zIdentifierType.childrenc             c   s   d S )Nr   )r   r   r   r	   rJ     s    zIdentifierType.__iter__)r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r     s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )If)ro   iftrueiffalser0   rE   Nc             C   s   || _ || _|| _|| _d S )N)ro   r   r   r0   )r   ro   r   r   r0   r   r   r	   rF     s    zIf.__init__c             C   sZ   g }| j d k	r|d| j f | jd k	r8|d| jf | jd k	rR|d| jf t|S )Nro   r   r   )ro   rG   r   r   rH   )r   rI   r   r   r	   r#     s    
 
 
 zIf.childrenc             c   s:   | j d k	r| j V  | jd k	r$| jV  | jd k	r6| jV  d S )N)ro   r   r   )r   r   r   r	   rJ     s    


zIf.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r     s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )InitList)ry   r0   rE   Nc             C   s   || _ || _d S )N)ry   r0   )r   ry   r0   r   r   r	   rF     s    zInitList.__init__c             C   s:   g }x,t | jpg D ]\}}|d| |f qW t|S )Nz	exprs[%d])rZ   ry   rG   rH   )r   rI   r[   r3   r   r   r	   r#     s    zInitList.childrenc             c   s   x| j p
g D ]
}|V  qW d S )N)ry   )r   r3   r   r   r	   rJ     s    zInitList.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r     s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Label)r!   rp   r0   rE   Nc             C   s   || _ || _|| _d S )N)r!   rp   r0   )r   r!   rp   r0   r   r   r	   rF     s    zLabel.__init__c             C   s&   g }| j d k	r|d| j f t|S )Nrp   )rp   rG   rH   )r   rI   r   r   r	   r#     s    
 zLabel.childrenc             c   s   | j d k	r| j V  d S )N)rp   )r   r   r   r	   rJ   #  s    
zLabel.__iter__)r!   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r     s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )NamedInitializer)r!   rX   r0   rE   Nc             C   s   || _ || _|| _d S )N)r!   rX   r0   )r   r!   rX   r0   r   r   r	   rF   +  s    zNamedInitializer.__init__c             C   sT   g }| j d k	r|d| j f x,t| jp*g D ]\}}|d| |f q.W t|S )NrX   zname[%d])rX   rG   rZ   r!   rH   )r   rI   r[   r3   r   r   r	   r#   0  s    
 zNamedInitializer.childrenc             c   s0   | j d k	r| j V  x| jpg D ]
}|V  qW d S )N)rX   r!   )r   r3   r   r   r	   rJ   7  s    
zNamedInitializer.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r   )  s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )	ParamList)paramsr0   rE   Nc             C   s   || _ || _d S )N)r   r0   )r   r   r0   r   r   r	   rF   A  s    zParamList.__init__c             C   s:   g }x,t | jpg D ]\}}|d| |f qW t|S )Nz
params[%d])rZ   r   rG   rH   )r   rI   r[   r3   r   r   r	   r#   E  s    zParamList.childrenc             c   s   x| j p
g D ]
}|V  qW d S )N)r   )r   r3   r   r   r	   rJ   K  s    zParamList.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r   ?  s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )PtrDecl)rf   rB   r0   rE   Nc             C   s   || _ || _|| _d S )N)rf   rB   r0   )r   rf   rB   r0   r   r   r	   rF   S  s    zPtrDecl.__init__c             C   s&   g }| j d k	r|d| j f t|S )NrB   )rB   rG   rH   )r   rI   r   r   r	   r#   X  s    
 zPtrDecl.childrenc             c   s   | j d k	r| j V  d S )N)rB   )r   r   r   r	   rJ   ]  s    
zPtrDecl.__iter__)rf   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r   Q  s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Return)rX   r0   rE   Nc             C   s   || _ || _d S )N)rX   r0   )r   rX   r0   r   r   r	   rF   e  s    zReturn.__init__c             C   s&   g }| j d k	r|d| j f t|S )NrX   )rX   rG   rH   )r   rI   r   r   r	   r#   i  s    
 zReturn.childrenc             c   s   | j d k	r| j V  d S )N)rX   )r   r   r   r	   rJ   n  s    
zReturn.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r   c  s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )StaticAssert)ro   messager0   rE   Nc             C   s   || _ || _|| _d S )N)ro   r   r0   )r   ro   r   r0   r   r   r	   rF   v  s    zStaticAssert.__init__c             C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )Nro   r   )ro   rG   r   rH   )r   rI   r   r   r	   r#   {  s    
 
 zStaticAssert.childrenc             c   s(   | j d k	r| j V  | jd k	r$| jV  d S )N)ro   r   )r   r   r   r	   rJ     s    

zStaticAssert.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r   t  s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Struct)r!   rl   r0   rE   Nc             C   s   || _ || _|| _d S )N)r!   rl   r0   )r   r!   rl   r0   r   r   r	   rF     s    zStruct.__init__c             C   s:   g }x,t | jpg D ]\}}|d| |f qW t|S )Nz	decls[%d])rZ   rl   rG   rH   )r   rI   r[   r3   r   r   r	   r#     s    zStruct.childrenc             c   s   x| j p
g D ]
}|V  qW d S )N)rl   )r   r3   r   r   r	   rJ     s    zStruct.__iter__)r!   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r     s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )	StructRef)r!   rB   fieldr0   rE   Nc             C   s   || _ || _|| _|| _d S )N)r!   rB   r   r0   )r   r!   rB   r   r0   r   r   r	   rF     s    zStructRef.__init__c             C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )Nr!   r   )r!   rG   r   rH   )r   rI   r   r   r	   r#     s    
 
 zStructRef.childrenc             c   s(   | j d k	r| j V  | jd k	r$| jV  d S )N)r!   r   )r   r   r   r	   rJ     s    

zStructRef.__iter__)rB   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r     s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Switch)ro   rp   r0   rE   Nc             C   s   || _ || _|| _d S )N)ro   rp   r0   )r   ro   rp   r0   r   r   r	   rF     s    zSwitch.__init__c             C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )Nro   rp   )ro   rG   rp   rH   )r   rI   r   r   r	   r#     s    
 
 zSwitch.childrenc             c   s(   | j d k	r| j V  | jd k	r$| jV  d S )N)ro   rp   )r   r   r   r	   rJ     s    

zSwitch.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r     s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )	TernaryOp)ro   r   r   r0   rE   Nc             C   s   || _ || _|| _|| _d S )N)ro   r   r   r0   )r   ro   r   r   r0   r   r   r	   rF     s    zTernaryOp.__init__c             C   sZ   g }| j d k	r|d| j f | jd k	r8|d| jf | jd k	rR|d| jf t|S )Nro   r   r   )ro   rG   r   r   rH   )r   rI   r   r   r	   r#     s    
 
 
 zTernaryOp.childrenc             c   s:   | j d k	r| j V  | jd k	r$| jV  | jd k	r6| jV  d S )N)ro   r   r   )r   r   r   r	   rJ     s    


zTernaryOp.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r     s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )TypeDecl)declnamerf   rg   rB   r0   rE   Nc             C   s"   || _ || _|| _|| _|| _d S )N)r   rf   rg   rB   r0   )r   r   rf   rg   rB   r0   r   r   r	   rF     s
    zTypeDecl.__init__c             C   s&   g }| j d k	r|d| j f t|S )NrB   )rB   rG   rH   )r   rI   r   r   r	   r#     s    
 zTypeDecl.childrenc             c   s   | j d k	r| j V  d S )N)rB   )r   r   r   r	   rJ     s    
zTypeDecl.__iter__)r   rf   rg   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r     s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Typedef)r!   rf   rh   rB   r0   rE   Nc             C   s"   || _ || _|| _|| _|| _d S )N)r!   rf   rh   rB   r0   )r   r!   rf   rh   rB   r0   r   r   r	   rF     s
    zTypedef.__init__c             C   s&   g }| j d k	r|d| j f t|S )NrB   )rB   rG   rH   )r   rI   r   r   r	   r#     s    
 zTypedef.childrenc             c   s   | j d k	r| j V  d S )N)rB   )r   r   r   r	   rJ     s    
zTypedef.__iter__)r!   rf   rh   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r     s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Typename)r!   rf   rg   rB   r0   rE   Nc             C   s"   || _ || _|| _|| _|| _d S )N)r!   rf   rg   rB   r0   )r   r!   rf   rg   rB   r0   r   r   r	   rF   
  s
    zTypename.__init__c             C   s&   g }| j d k	r|d| j f t|S )NrB   )rB   rG   rH   )r   rI   r   r   r	   r#     s    
 zTypename.childrenc             c   s   | j d k	r| j V  d S )N)rB   )r   r   r   r	   rJ     s    
zTypename.__iter__)r!   rf   rg   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r     s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )UnaryOp)rN   rX   r0   rE   Nc             C   s   || _ || _|| _d S )N)rN   rX   r0   )r   rN   rX   r0   r   r   r	   rF     s    zUnaryOp.__init__c             C   s&   g }| j d k	r|d| j f t|S )NrX   )rX   rG   rH   )r   rI   r   r   r	   r#   #  s    
 zUnaryOp.childrenc             c   s   | j d k	r| j V  d S )N)rX   )r   r   r   r	   rJ   (  s    
zUnaryOp.__iter__)rN   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r     s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Union)r!   rl   r0   rE   Nc             C   s   || _ || _|| _d S )N)r!   rl   r0   )r   r!   rl   r0   r   r   r	   rF   0  s    zUnion.__init__c             C   s:   g }x,t | jpg D ]\}}|d| |f qW t|S )Nz	decls[%d])rZ   rl   rG   rH   )r   rI   r[   r3   r   r   r	   r#   5  s    zUnion.childrenc             c   s   x| j p
g D ]
}|V  qW d S )N)rl   )r   r3   r   r   r	   rJ   ;  s    zUnion.__iter__)r!   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r   .  s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )While)ro   rp   r0   rE   Nc             C   s   || _ || _|| _d S )N)ro   rp   r0   )r   ro   rp   r0   r   r   r	   rF   C  s    zWhile.__init__c             C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )Nro   rp   )ro   rG   rp   rH   )r   rI   r   r   r	   r#   H  s    
 
 zWhile.childrenc             c   s(   | j d k	r| j V  | jd k	r$| jV  d S )N)ro   rp   )r   r   r   r	   rJ   N  s    

zWhile.__iter__r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r   A  s
   
r   c               @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Pragma)stringr0   rE   Nc             C   s   || _ || _d S )N)r   r0   )r   r   r0   r   r   r	   rF   X  s    zPragma.__init__c             C   s   g }t |S )N)rH   )r   rI   r   r   r	   r#   \  s    zPragma.childrenc             c   s   d S )Nr   )r   r   r   r	   rJ   `  s    zPragma.__iter__)r   )N)r   r4   r5   r   rF   r#   rJ   r/   r   r   r   r	   r   V  s
   
r   )6r6   r   objectr   r8   rA   rK   rM   rQ   rS   rV   rW   r\   r^   r`   rb   rd   re   rk   rm   rn   rq   rr   rs   ru   rv   rx   rz   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: