U
    ^v                     @   s$  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Z3dS )f    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 )

 N)_reprreplace).0e r	   6/tmp/pip-install-v5gamh74/pycparser/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}| 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"||d 7 }|S )z? Generates a python representation of the current node
        ( N=r   z
   ,r   ))	__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   D ]"\}}|j||d ||||d qd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   nr$   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)   [   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/   r0   r1   ZleadZnvlistZattrstrvlistZ
child_namechildr	   r$   r
   r5   :   s.     

z	Node.show)	r   
__module____qualname__r   r#   r%   sysstdoutr5   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   |D ]}|  | qdS )zy Called if no explicit visitor function exists for a
            node. Implements preorder visiting of the node.
        N)rC   )r   rA   cr	   r	   r
   r@      s    zNodeVisitor.generic_visit)r   r9   r:   __doc__r>   rC   r@   r	   r	   r	   r
   r=   m   s   !r=   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_qualsr4   __weakref__Nc                 C   s   || _ || _|| _|| _d S N)rG   rH   rI   r4   )r   rG   rH   rI   r4   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 )NrG   rH   )rG   appendrH   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 rK   )rG   rH   r$   r	   r	   r
   __iter__   s    

zArrayDecl.__iter__)rI   )Nr   r9   r:   r   rL   r%   rQ   r3   r	   r	   r	   r
   rF      s
   
rF   c                   @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )ArrayRef)r"   	subscriptr4   rJ   Nc                 C   s   || _ || _|| _d S rK   )r"   rT   r4   )r   r"   rT   r4   r	   r	   r
   rL      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"   rT   )r"   rM   rT   rN   rO   r	   r	   r
   r%      s    
 
 zArrayRef.childrenc                 c   s(   | j d k	r| j V  | jd k	r$| jV  d S rK   )r"   rT   r$   r	   r	   r
   rQ      s    

zArrayRef.__iter__r	   )NrR   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 )
Assignment)oplvaluervaluer4   rJ   Nc                 C   s   || _ || _|| _|| _d S rK   )rV   rW   rX   r4   )r   rV   rW   rX   r4   r	   r	   r
   rL      s    zAssignment.__init__c                 C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )NrW   rX   )rW   rM   rX   rN   rO   r	   r	   r
   r%      s    
 
 zAssignment.childrenc                 c   s(   | j d k	r| j V  | jd k	r$| jV  d S rK   )rW   rX   r$   r	   r	   r
   rQ      s    

zAssignment.__iter__rV   )NrR   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 )BinaryOp)rV   leftrightr4   rJ   Nc                 C   s   || _ || _|| _|| _d S rK   )rV   r[   r\   r4   )r   rV   r[   r\   r4   r	   r	   r
   rL      s    zBinaryOp.__init__c                 C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )Nr[   r\   )r[   rM   r\   rN   rO   r	   r	   r
   r%      s    
 
 zBinaryOp.childrenc                 c   s(   | j d k	r| j V  | jd k	r$| jV  d S rK   )r[   r\   r$   r	   r	   r
   rQ      s    

zBinaryOp.__iter__rY   )NrR   r	   r	   r	   r
   rZ      s
   
rZ   c                   @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Breakr4   rJ   Nc                 C   s
   || _ d S rK   r4   r   r4   r	   r	   r
   rL      s    zBreak.__init__c                 C   s   dS Nr	   r	   r$   r	   r	   r
   r%     s    zBreak.childrenc                 c   s   d S rK   r	   r$   r	   r	   r
   rQ     s    zBreak.__iter__r	   )NrR   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 )Case)exprstmtsr4   rJ   Nc                 C   s   || _ || _|| _d S rK   )rc   rd   r4   )r   rc   rd   r4   r	   r	   r
   rL     s    zCase.__init__c                 C   sP   g }| j d k	r|d| j f t| jp(g D ]\}}|d| |f q,t|S )Nrc   	stmts[%d])rc   rM   	enumeraterd   rN   r   rP   ir8   r	   r	   r
   r%     s    
 zCase.childrenc                 c   s,   | j d k	r| j V  | jpg D ]
}|V  qd S rK   )rc   rd   r   r8   r	   r	   r
   rQ     s    
zCase.__iter__r	   )NrR   r	   r	   r	   r
   rb     s
   
rb   c                   @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Cast)to_typerc   r4   rJ   Nc                 C   s   || _ || _|| _d S rK   )rk   rc   r4   )r   rk   rc   r4   r	   r	   r
   rL   $  s    zCast.__init__c                 C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )Nrk   rc   )rk   rM   rc   rN   rO   r	   r	   r
   r%   )  s    
 
 zCast.childrenc                 c   s(   | j d k	r| j V  | jd k	r$| jV  d S rK   )rk   rc   r$   r	   r	   r
   rQ   /  s    

zCast.__iter__r	   )NrR   r	   r	   r	   r
   rj   "  s
   
rj   c                   @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Compound)block_itemsr4   rJ   Nc                 C   s   || _ || _d S rK   )rm   r4   )r   rm   r4   r	   r	   r
   rL   9  s    zCompound.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S )Nzblock_items[%d])rf   rm   rM   rN   rg   r	   r	   r
   r%   =  s    zCompound.childrenc                 c   s   | j pg D ]
}|V  q
d S rK   )rm   ri   r	   r	   r
   rQ   C  s    zCompound.__iter__r	   )NrR   r	   r	   r	   r
   rl   7  s
   
rl   c                   @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )CompoundLiteral)rG   initr4   rJ   Nc                 C   s   || _ || _|| _d S rK   )rG   ro   r4   )r   rG   ro   r4   r	   r	   r
   rL   K  s    zCompoundLiteral.__init__c                 C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )NrG   ro   )rG   rM   ro   rN   rO   r	   r	   r
   r%   P  s    
 
 zCompoundLiteral.childrenc                 c   s(   | j d k	r| j V  | jd k	r$| jV  d S rK   )rG   ro   r$   r	   r	   r
   rQ   V  s    

zCompoundLiteral.__iter__r	   )NrR   r	   r	   r	   r
   rn   I  s
   
rn   c                   @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Constant)rG   valuer4   rJ   Nc                 C   s   || _ || _|| _d S rK   )rG   rq   r4   )r   rG   rq   r4   r	   r	   r
   rL   `  s    zConstant.__init__c                 C   s   g }t |S rK   rN   rO   r	   r	   r
   r%   e  s    zConstant.childrenc                 c   s   d S rK   r	   r$   r	   r	   r
   rQ   i  s    zConstant.__iter__)rG   rq   )NrR   r	   r	   r	   r
   rp   ^  s
   
rp   c                   @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Continuer^   Nc                 C   s
   || _ d S rK   r_   r`   r	   r	   r
   rL   q  s    zContinue.__init__c                 C   s   dS ra   r	   r$   r	   r	   r
   r%   t  s    zContinue.childrenc                 c   s   d S rK   r	   r$   r	   r	   r
   rQ   w  s    zContinue.__iter__r	   )NrR   r	   r	   r	   r
   rs   o  s
   
rs   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storagefuncspecrG   ro   bitsizer4   rJ   Nc	           	      C   s4   || _ || _|| _|| _|| _|| _|| _|| _d S rK   )r"   ru   rv   rw   rG   ro   rx   r4   )	r   r"   ru   rv   rw   rG   ro   rx   r4   r	   r	   r
   rL     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 )NrG   ro   rx   )rG   rM   ro   rx   rN   rO   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 rK   )rG   ro   rx   r$   r	   r	   r
   rQ     s    


zDecl.__iter__)r"   ru   rv   rw   )NrR   r	   r	   r	   r
   rt   }  s
   

rt   c                   @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )DeclList)declsr4   rJ   Nc                 C   s   || _ || _d S rK   )rz   r4   )r   rz   r4   r	   r	   r
   rL     s    zDeclList.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S Nz	decls[%d]rf   rz   rM   rN   rg   r	   r	   r
   r%     s    zDeclList.childrenc                 c   s   | j pg D ]
}|V  q
d S rK   rz   ri   r	   r	   r
   rQ     s    zDeclList.__iter__r	   )NrR   r	   r	   r	   r
   ry     s
   
ry   c                   @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Default)rd   r4   rJ   Nc                 C   s   || _ || _d S rK   )rd   r4   )r   rd   r4   r	   r	   r
   rL     s    zDefault.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S )Nre   )rf   rd   rM   rN   rg   r	   r	   r
   r%     s    zDefault.childrenc                 c   s   | j pg D ]
}|V  q
d S rK   )rd   ri   r	   r	   r
   rQ     s    zDefault.__iter__r	   )NrR   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 )DoWhilecondstmtr4   rJ   Nc                 C   s   || _ || _|| _d S rK   r   r   r4   r   r   r   r4   r	   r	   r
   rL     s    zDoWhile.__init__c                 C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S Nr   r   r   rM   r   rN   rO   r	   r	   r
   r%     s    
 
 zDoWhile.childrenc                 c   s(   | j d k	r| j V  | jd k	r$| jV  d S rK   r   r   r$   r	   r	   r
   rQ     s    

zDoWhile.__iter__r	   )NrR   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 )EllipsisParamr^   Nc                 C   s
   || _ d S rK   r_   r`   r	   r	   r
   rL     s    zEllipsisParam.__init__c                 C   s   dS ra   r	   r$   r	   r	   r
   r%     s    zEllipsisParam.childrenc                 c   s   d S rK   r	   r$   r	   r	   r
   rQ     s    zEllipsisParam.__iter__r	   )NrR   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 )EmptyStatementr^   Nc                 C   s
   || _ d S rK   r_   r`   r	   r	   r
   rL     s    zEmptyStatement.__init__c                 C   s   dS ra   r	   r$   r	   r	   r
   r%     s    zEmptyStatement.childrenc                 c   s   d S rK   r	   r$   r	   r	   r
   rQ     s    zEmptyStatement.__iter__r	   )NrR   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 )Enum)r"   valuesr4   rJ   Nc                 C   s   || _ || _|| _d S rK   )r"   r   r4   )r   r"   r   r4   r	   r	   r
   rL     s    zEnum.__init__c                 C   s&   g }| j d k	r|d| j f t|S )Nr   )r   rM   rN   rO   r	   r	   r
   r%     s    
 zEnum.childrenc                 c   s   | j d k	r| j V  d S rK   )r   r$   r	   r	   r
   rQ     s    
zEnum.__iter__r"   )NrR   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 )
Enumerator)r"   rq   r4   rJ   Nc                 C   s   || _ || _|| _d S rK   )r"   rq   r4   )r   r"   rq   r4   r	   r	   r
   rL     s    zEnumerator.__init__c                 C   s&   g }| j d k	r|d| j f t|S )Nrq   )rq   rM   rN   rO   r	   r	   r
   r%     s    
 zEnumerator.childrenc                 c   s   | j d k	r| j V  d S rK   )rq   r$   r	   r	   r
   rQ     s    
zEnumerator.__iter__r   )NrR   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 )EnumeratorList)enumeratorsr4   rJ   Nc                 C   s   || _ || _d S rK   )r   r4   )r   r   r4   r	   r	   r
   rL     s    zEnumeratorList.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S )Nzenumerators[%d])rf   r   rM   rN   rg   r	   r	   r
   r%     s    zEnumeratorList.childrenc                 c   s   | j pg D ]
}|V  q
d S rK   )r   ri   r	   r	   r
   rQ     s    zEnumeratorList.__iter__r	   )NrR   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 )ExprListexprsr4   rJ   Nc                 C   s   || _ || _d S rK   r   r4   r   r   r4   r	   r	   r
   rL   '  s    zExprList.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S Nz	exprs[%d]rf   r   rM   rN   rg   r	   r	   r
   r%   +  s    zExprList.childrenc                 c   s   | j pg D ]
}|V  q
d S rK   r   ri   r	   r	   r
   rQ   1  s    zExprList.__iter__r	   )NrR   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 )FileAST)extr4   rJ   Nc                 C   s   || _ || _d S rK   )r   r4   )r   r   r4   r	   r	   r
   rL   9  s    zFileAST.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S )Nzext[%d])rf   r   rM   rN   rg   r	   r	   r
   r%   =  s    zFileAST.childrenc                 c   s   | j pg D ]
}|V  q
d S rK   )r   ri   r	   r	   r
   rQ   C  s    zFileAST.__iter__r	   )NrR   r	   r	   r	   r
   r   7  s
   
r   c                   @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )For)ro   r   nextr   r4   rJ   Nc                 C   s"   || _ || _|| _|| _|| _d S rK   )ro   r   r   r   r4   )r   ro   r   r   r   r4   r	   r	   r
   rL   K  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 )Nro   r   r   r   )ro   rM   r   r   r   rN   rO   r	   r	   r
   r%   R  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 rK   )ro   r   r   r   r$   r	   r	   r
   rQ   Z  s    



zFor.__iter__r	   )NrR   r	   r	   r	   r
   r   I  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"   argsr4   rJ   Nc                 C   s   || _ || _|| _d S rK   )r"   r   r4   )r   r"   r   r4   r	   r	   r
   rL   h  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"   rM   r   rN   rO   r	   r	   r
   r%   m  s    
 
 zFuncCall.childrenc                 c   s(   | j d k	r| j V  | jd k	r$| jV  d S rK   )r"   r   r$   r	   r	   r
   rQ   s  s    

zFuncCall.__iter__r	   )NrR   r	   r	   r	   r
   r   f  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   rG   r4   rJ   Nc                 C   s   || _ || _|| _d S rK   )r   rG   r4   )r   r   rG   r4   r	   r	   r
   rL   }  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   rG   )r   rM   rG   rN   rO   r	   r	   r
   r%     s    
 
 zFuncDecl.childrenc                 c   s(   | j d k	r| j V  | jd k	r$| jV  d S rK   )r   rG   r$   r	   r	   r
   rQ     s    

zFuncDecl.__iter__r	   )NrR   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bodyr4   rJ   Nc                 C   s   || _ || _|| _|| _d S rK   )r   r   r   r4   )r   r   r   r   r4   r	   r	   r
   rL     s    zFuncDef.__init__c                 C   sj   g }| j d k	r|d| j f | jd k	r8|d| jf t| jpBg D ]\}}|d| |f qFt|S )Nr   r   zparam_decls[%d])r   rM   r   rf   r   rN   rg   r	   r	   r
   r%     s    
 
 zFuncDef.childrenc                 c   s>   | j d k	r| j V  | jd k	r$| jV  | jp,g D ]
}|V  q.d S rK   )r   r   r   ri   r	   r	   r
   rQ     s    

zFuncDef.__iter__r	   )NrR   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"   r4   rJ   Nc                 C   s   || _ || _d S rK   r"   r4   r   r"   r4   r	   r	   r
   rL     s    zGoto.__init__c                 C   s   g }t |S rK   rr   rO   r	   r	   r
   r%     s    zGoto.childrenc                 c   s   d S rK   r	   r$   r	   r	   r
   rQ     s    zGoto.__iter__r   )NrR   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 )IDr   Nc                 C   s   || _ || _d S rK   r   r   r	   r	   r
   rL     s    zID.__init__c                 C   s   g }t |S rK   rr   rO   r	   r	   r
   r%     s    zID.childrenc                 c   s   d S rK   r	   r$   r	   r	   r
   rQ     s    zID.__iter__r   )NrR   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)namesr4   rJ   Nc                 C   s   || _ || _d S rK   )r   r4   )r   r   r4   r	   r	   r
   rL     s    zIdentifierType.__init__c                 C   s   g }t |S rK   rr   rO   r	   r	   r
   r%     s    zIdentifierType.childrenc                 c   s   d S rK   r	   r$   r	   r	   r
   rQ     s    zIdentifierType.__iter__)r   )NrR   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r   iftrueiffalser4   rJ   Nc                 C   s   || _ || _|| _|| _d S rK   r   r   r   r4   r   r   r   r   r4   r	   r	   r
   rL     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 Nr   r   r   r   rM   r   r   rN   rO   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 rK   r   r   r   r$   r	   r	   r
   rQ     s    


zIf.__iter__r	   )NrR   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 )InitListr   Nc                 C   s   || _ || _d S rK   r   r   r	   r	   r
   rL     s    zInitList.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S r   r   rg   r	   r	   r
   r%     s    zInitList.childrenc                 c   s   | j pg D ]
}|V  q
d S rK   r   ri   r	   r	   r
   rQ     s    zInitList.__iter__r	   )NrR   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"   r   r4   rJ   Nc                 C   s   || _ || _|| _d S rK   )r"   r   r4   )r   r"   r   r4   r	   r	   r
   rL     s    zLabel.__init__c                 C   s&   g }| j d k	r|d| j f t|S )Nr   )r   rM   rN   rO   r	   r	   r
   r%     s    
 zLabel.childrenc                 c   s   | j d k	r| j V  d S rK   )r   r$   r	   r	   r
   rQ     s    
zLabel.__iter__r   )NrR   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"   rc   r4   rJ   Nc                 C   s   || _ || _|| _d S rK   )r"   rc   r4   )r   r"   rc   r4   r	   r	   r
   rL     s    zNamedInitializer.__init__c                 C   sP   g }| j d k	r|d| j f t| jp(g D ]\}}|d| |f q,t|S )Nrc   zname[%d])rc   rM   rf   r"   rN   rg   r	   r	   r
   r%     s    
 zNamedInitializer.childrenc                 c   s,   | j d k	r| j V  | jpg D ]
}|V  qd S rK   )rc   r"   ri   r	   r	   r
   rQ   %  s    
zNamedInitializer.__iter__r	   )NrR   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)paramsr4   rJ   Nc                 C   s   || _ || _d S rK   )r   r4   )r   r   r4   r	   r	   r
   rL   /  s    zParamList.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S )Nz
params[%d])rf   r   rM   rN   rg   r	   r	   r
   r%   3  s    zParamList.childrenc                 c   s   | j pg D ]
}|V  q
d S rK   )r   ri   r	   r	   r
   rQ   9  s    zParamList.__iter__r	   )NrR   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)ru   rG   r4   rJ   Nc                 C   s   || _ || _|| _d S rK   )ru   rG   r4   )r   ru   rG   r4   r	   r	   r
   rL   A  s    zPtrDecl.__init__c                 C   s&   g }| j d k	r|d| j f t|S NrG   rG   rM   rN   rO   r	   r	   r
   r%   F  s    
 zPtrDecl.childrenc                 c   s   | j d k	r| j V  d S rK   rG   r$   r	   r	   r
   rQ   K  s    
zPtrDecl.__iter__)ru   )NrR   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 )Return)rc   r4   rJ   Nc                 C   s   || _ || _d S rK   )rc   r4   )r   rc   r4   r	   r	   r
   rL   S  s    zReturn.__init__c                 C   s&   g }| j d k	r|d| j f t|S Nrc   rc   rM   rN   rO   r	   r	   r
   r%   W  s    
 zReturn.childrenc                 c   s   | j d k	r| j V  d S rK   rc   r$   r	   r	   r
   rQ   \  s    
zReturn.__iter__r	   )NrR   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 )Structr"   rz   r4   rJ   Nc                 C   s   || _ || _|| _d S rK   r"   rz   r4   r   r"   rz   r4   r	   r	   r
   rL   d  s    zStruct.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S r{   r|   rg   r	   r	   r
   r%   i  s    zStruct.childrenc                 c   s   | j pg D ]
}|V  q
d S rK   r}   ri   r	   r	   r
   rQ   o  s    zStruct.__iter__r   )NrR   r	   r	   r	   r
   r   b  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"   rG   fieldr4   rJ   Nc                 C   s   || _ || _|| _|| _d S rK   )r"   rG   r   r4   )r   r"   rG   r   r4   r	   r	   r
   rL   w  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"   rM   r   rN   rO   r	   r	   r
   r%   }  s    
 
 zStructRef.childrenc                 c   s(   | j d k	r| j V  | jd k	r$| jV  d S rK   )r"   r   r$   r	   r	   r
   rQ     s    

zStructRef.__iter__r   )NrR   r	   r	   r	   r
   r   u  s
   
r   c                   @   s.   e Zd ZdZd
ddZdd Zdd Zd	ZdS )Switchr   Nc                 C   s   || _ || _|| _d S rK   r   r   r	   r	   r
   rL     s    zSwitch.__init__c                 C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S r   r   rO   r	   r	   r
   r%     s    
 
 zSwitch.childrenc                 c   s(   | j d k	r| j V  | jd k	r$| jV  d S rK   r   r$   r	   r	   r
   rQ     s    

zSwitch.__iter__r	   )NrR   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 )	TernaryOpr   Nc                 C   s   || _ || _|| _|| _d S rK   r   r   r	   r	   r
   rL     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 r   r   rO   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 rK   r   r$   r	   r	   r
   rQ     s    


zTernaryOp.__iter__r	   )NrR   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)declnameru   rG   r4   rJ   Nc                 C   s   || _ || _|| _|| _d S rK   )r   ru   rG   r4   )r   r   ru   rG   r4   r	   r	   r
   rL     s    zTypeDecl.__init__c                 C   s&   g }| j d k	r|d| j f t|S r   r   rO   r	   r	   r
   r%     s    
 zTypeDecl.childrenc                 c   s   | j d k	r| j V  d S rK   r   r$   r	   r	   r
   rQ     s    
zTypeDecl.__iter__)r   ru   )NrR   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"   ru   rv   rG   r4   rJ   Nc                 C   s"   || _ || _|| _|| _|| _d S rK   )r"   ru   rv   rG   r4   )r   r"   ru   rv   rG   r4   r	   r	   r
   rL     s
    zTypedef.__init__c                 C   s&   g }| j d k	r|d| j f t|S r   r   rO   r	   r	   r
   r%     s    
 zTypedef.childrenc                 c   s   | j d k	r| j V  d S rK   r   r$   r	   r	   r
   rQ     s    
zTypedef.__iter__)r"   ru   rv   )NrR   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"   ru   rG   r4   rJ   Nc                 C   s   || _ || _|| _|| _d S rK   )r"   ru   rG   r4   )r   r"   ru   rG   r4   r	   r	   r
   rL     s    zTypename.__init__c                 C   s&   g }| j d k	r|d| j f t|S r   r   rO   r	   r	   r
   r%     s    
 zTypename.childrenc                 c   s   | j d k	r| j V  d S rK   r   r$   r	   r	   r
   rQ     s    
zTypename.__iter__)r"   ru   )NrR   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)rV   rc   r4   rJ   Nc                 C   s   || _ || _|| _d S rK   )rV   rc   r4   )r   rV   rc   r4   r	   r	   r
   rL     s    zUnaryOp.__init__c                 C   s&   g }| j d k	r|d| j f t|S r   r   rO   r	   r	   r
   r%     s    
 zUnaryOp.childrenc                 c   s   | j d k	r| j V  d S rK   r   r$   r	   r	   r
   rQ     s    
zUnaryOp.__iter__rY   )NrR   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 )Unionr   Nc                 C   s   || _ || _|| _d S rK   r   r   r	   r	   r
   rL     s    zUnion.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S r{   r|   rg   r	   r	   r
   r%     s    zUnion.childrenc                 c   s   | j pg D ]
}|V  q
d S rK   r}   ri   r	   r	   r
   rQ     s    zUnion.__iter__r   )NrR   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 )Whiler   Nc                 C   s   || _ || _|| _d S rK   r   r   r	   r	   r
   rL     s    zWhile.__init__c                 C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S r   r   rO   r	   r	   r
   r%     s    
 
 zWhile.childrenc                 c   s(   | j d k	r| j V  | jd k	r$| jV  d S rK   r   r$   r	   r	   r
   rQ   %  s    

zWhile.__iter__r	   )NrR   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 )Pragma)stringr4   rJ   Nc                 C   s   || _ || _d S rK   )r   r4   )r   r   r4   r	   r	   r
   rL   /  s    zPragma.__init__c                 C   s   g }t |S rK   rr   rO   r	   r	   r
   r%   3  s    zPragma.childrenc                 c   s   d S rK   r	   r$   r	   r	   r
   rQ   7  s    zPragma.__iter__)r   )NrR   r	   r	   r	   r
   r   -  s
   
r   )4r;   r   objectr   r=   rF   rS   rU   rZ   r]   rb   rj   rl   rn   rp   rs   rt   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   r   r   r   r   r	   r	   r	   r
   <module>   sd   	O: