
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    ՗_([                     @   s  d dl 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 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Z1dS )b    Nc                   @   s0   e Zd ZdZdd ZejdddddfddZdS )	Node c                 C   s   dS )z3 A sequence of all children that are Nodes
        Nr   selfr   r   ../pycparser/c_ast.pychildren   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.
         Nz <z>: z: c                    s   g | ]}|t  |fqS r   getattr.0nr   r   r   
<listcomp>=   s     zNode.show.<locals>.<listcomp>z, c                 s   s   | ]}d | V  qdS )z%s=%sNr   )r   Znvr   r   r   	<genexpr>>   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   A   s     z (at %s)
   )offset	attrnames	nodenames	showcoord_my_node_name)write	__class____name__
attr_namesjoin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__	__slots__r   sysstdoutr   r   r   r   r   r      s   r   c                   @   s    e 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)
    c                 C   s"   d|j j }t| || j}||S )z Visit a node.
        Zvisit_)r   r   r
   generic_visit)r   nodemethodZvisitorr   r   r   visits   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)r   r)   )r   r'   Zc_namecr   r   r   r&   z   s    zNodeVisitor.generic_visitN)r   r    r!   __doc__r)   r&   r   r   r   r   r%   R   s    r%   c                   @   s&   e Zd ZdZdddZdd ZdZdS )		ArrayDecl)typedim	dim_qualsr   __weakref__Nc                 C   s   || _ || _|| _|| _d S N)r-   r.   r/   r   )r   r-   r.   r/   r   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 )Nr-   r.   )r-   appendr.   tupler   nodelistr   r   r   r      s    
 
 zArrayDecl.children)r/   )Nr   r    r!   r"   r2   r   r   r   r   r   r   r,      s   
r,   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	ArrayRef)name	subscriptr   r0   Nc                 C   s   || _ || _|| _d S r1   )r9   r:   r   )r   r9   r:   r   r   r   r   r2      s    zArrayRef.__init__c                 C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )Nr9   r:   )r9   r3   r:   r4   r5   r   r   r   r      s    
 
 zArrayRef.childrenr   )Nr7   r   r   r   r   r8      s   
r8   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	
Assignment)oplvaluervaluer   r0   Nc                 C   s   || _ || _|| _|| _d S r1   )r<   r=   r>   r   )r   r<   r=   r>   r   r   r   r   r2      s    zAssignment.__init__c                 C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )Nr=   r>   )r=   r3   r>   r4   r5   r   r   r   r      s    
 
 zAssignment.childrenr<   )Nr7   r   r   r   r   r;      s   
r;   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	BinaryOp)r<   leftrightr   r0   Nc                 C   s   || _ || _|| _|| _d S r1   )r<   rA   rB   r   )r   r<   rA   rB   r   r   r   r   r2      s    zBinaryOp.__init__c                 C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )NrA   rB   )rA   r3   rB   r4   r5   r   r   r   r      s    
 
 zBinaryOp.childrenr?   )Nr7   r   r   r   r   r@      s   
r@   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Breakr   r0   Nc                 C   s
   || _ d S r1   r   r   r   r   r   r   r2      s    zBreak.__init__c                 C   s   dS Nr   r   r   r   r   r   r      s    zBreak.childrenr   )Nr7   r   r   r   r   rC      s   
rC   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Case)exprstmtsr   r0   Nc                 C   s   || _ || _|| _d S r1   )rI   rJ   r   )r   rI   rJ   r   r   r   r   r2      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 )NrI   	stmts[%d])rI   r3   	enumeraterJ   r4   r   r6   ir   r   r   r   r      s    
 zCase.childrenr   )Nr7   r   r   r   r   rH      s   
rH   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Cast)to_typerI   r   r0   Nc                 C   s   || _ || _|| _d S r1   )rP   rI   r   )r   rP   rI   r   r   r   r   r2      s    zCast.__init__c                 C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )NrP   rI   )rP   r3   rI   r4   r5   r   r   r   r      s    
 
 zCast.childrenr   )Nr7   r   r   r   r   rO      s   
rO   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Compound)block_itemsr   r0   Nc                 C   s   || _ || _d S r1   )rR   r   )r   rR   r   r   r   r   r2      s    zCompound.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S )Nzblock_items[%d])rL   rR   r3   r4   rM   r   r   r   r      s    zCompound.childrenr   )Nr7   r   r   r   r   rQ      s   
rQ   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	CompoundLiteral)r-   initr   r0   Nc                 C   s   || _ || _|| _d S r1   )r-   rT   r   )r   r-   rT   r   r   r   r   r2      s    zCompoundLiteral.__init__c                 C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )Nr-   rT   )r-   r3   rT   r4   r5   r   r   r   r      s    
 
 zCompoundLiteral.childrenr   )Nr7   r   r   r   r   rS      s   
rS   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Constant)r-   valuer   r0   Nc                 C   s   || _ || _|| _d S r1   )r-   rV   r   )r   r-   rV   r   r   r   r   r2   	  s    zConstant.__init__c                 C   s   g }t |S r1   r4   r5   r   r   r   r     s    zConstant.children)r-   rV   )Nr7   r   r   r   r   rU     s   
rU   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	ContinuerD   Nc                 C   s
   || _ d S r1   rE   rF   r   r   r   r2     s    zContinue.__init__c                 C   s   dS rG   r   r   r   r   r   r     s    zContinue.childrenr   )Nr7   r   r   r   r   rX     s   
rX   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Decl)	r9   qualsstoragefuncspecr-   rT   bitsizer   r0   Nc	           	      C   s4   || _ || _|| _|| _|| _|| _|| _|| _d S r1   )r9   rZ   r[   r\   r-   rT   r]   r   )	r   r9   rZ   r[   r\   r-   rT   r]   r   r   r   r   r2      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 )Nr-   rT   r]   )r-   r3   rT   r]   r4   r5   r   r   r   r   *  s    
 
 
 zDecl.children)r9   rZ   r[   r\   )Nr7   r   r   r   r   rY     s   

rY   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	DeclList)declsr   r0   Nc                 C   s   || _ || _d S r1   )r_   r   )r   r_   r   r   r   r   r2   5  s    zDeclList.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S Nz	decls[%d]rL   r_   r3   r4   rM   r   r   r   r   9  s    zDeclList.childrenr   )Nr7   r   r   r   r   r^   3  s   
r^   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Default)rJ   r   r0   Nc                 C   s   || _ || _d S r1   )rJ   r   )r   rJ   r   r   r   r   r2   C  s    zDefault.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S )NrK   )rL   rJ   r3   r4   rM   r   r   r   r   G  s    zDefault.childrenr   )Nr7   r   r   r   r   rb   A  s   
rb   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	DoWhilecondstmtr   r0   Nc                 C   s   || _ || _|| _d S r1   re   rf   r   r   re   rf   r   r   r   r   r2   Q  s    zDoWhile.__init__c                 C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S Nre   rf   re   r3   rf   r4   r5   r   r   r   r   V  s    
 
 zDoWhile.childrenr   )Nr7   r   r   r   r   rc   O  s   
rc   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	EllipsisParamrD   Nc                 C   s
   || _ d S r1   rE   rF   r   r   r   r2   `  s    zEllipsisParam.__init__c                 C   s   dS rG   r   r   r   r   r   r   c  s    zEllipsisParam.childrenr   )Nr7   r   r   r   r   rk   ^  s   
rk   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	EmptyStatementrD   Nc                 C   s
   || _ d S r1   rE   rF   r   r   r   r2   j  s    zEmptyStatement.__init__c                 C   s   dS rG   r   r   r   r   r   r   m  s    zEmptyStatement.childrenr   )Nr7   r   r   r   r   rl   h  s   
rl   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Enum)r9   valuesr   r0   Nc                 C   s   || _ || _|| _d S r1   )r9   rn   r   )r   r9   rn   r   r   r   r   r2   t  s    zEnum.__init__c                 C   s&   g }| j d k	r|d| j f t|S )Nrn   )rn   r3   r4   r5   r   r   r   r   y  s    
 zEnum.childrenr9   )Nr7   r   r   r   r   rm   r  s   
rm   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	
Enumerator)r9   rV   r   r0   Nc                 C   s   || _ || _|| _d S r1   )r9   rV   r   )r   r9   rV   r   r   r   r   r2     s    zEnumerator.__init__c                 C   s&   g }| j d k	r|d| j f t|S )NrV   )rV   r3   r4   r5   r   r   r   r     s    
 zEnumerator.childrenro   )Nr7   r   r   r   r   rp     s   
rp   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	EnumeratorList)enumeratorsr   r0   Nc                 C   s   || _ || _d S r1   )rr   r   )r   rr   r   r   r   r   r2     s    zEnumeratorList.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S )Nzenumerators[%d])rL   rr   r3   r4   rM   r   r   r   r     s    zEnumeratorList.childrenr   )Nr7   r   r   r   r   rq     s   
rq   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	ExprListexprsr   r0   Nc                 C   s   || _ || _d S r1   ru   r   r   ru   r   r   r   r   r2     s    zExprList.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S Nz	exprs[%d]rL   ru   r3   r4   rM   r   r   r   r     s    zExprList.childrenr   )Nr7   r   r   r   r   rs     s   
rs   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	FileAST)extr   r0   Nc                 C   s   || _ || _d S r1   )r{   r   )r   r{   r   r   r   r   r2     s    zFileAST.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S )Nzext[%d])rL   r{   r3   r4   rM   r   r   r   r     s    zFileAST.childrenr   )Nr7   r   r   r   r   rz     s   
rz   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	For)rT   re   nextrf   r   r0   Nc                 C   s"   || _ || _|| _|| _|| _d S r1   )rT   re   r}   rf   r   )r   rT   re   r}   rf   r   r   r   r   r2     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 )NrT   re   r}   rf   )rT   r3   re   r}   rf   r4   r5   r   r   r   r     s    
 
 
 
 zFor.childrenr   )Nr7   r   r   r   r   r|     s   
r|   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	FuncCall)r9   argsr   r0   Nc                 C   s   || _ || _|| _d S r1   )r9   r   r   )r   r9   r   r   r   r   r   r2     s    zFuncCall.__init__c                 C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )Nr9   r   )r9   r3   r   r4   r5   r   r   r   r     s    
 
 zFuncCall.childrenr   )Nr7   r   r   r   r   r~     s   
r~   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	FuncDecl)r   r-   r   r0   Nc                 C   s   || _ || _|| _d S r1   )r   r-   r   )r   r   r-   r   r   r   r   r2     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   r-   )r   r3   r-   r4   r5   r   r   r   r     s    
 
 zFuncDecl.childrenr   )Nr7   r   r   r   r   r     s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	FuncDef)declparam_declsbodyr   r0   Nc                 C   s   || _ || _|| _|| _d S r1   )r   r   r   r   )r   r   r   r   r   r   r   r   r2     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   r3   r   rL   r   r4   rM   r   r   r   r     s    
 
 zFuncDef.childrenr   )Nr7   r   r   r   r   r     s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Gotor9   r   r0   Nc                 C   s   || _ || _d S r1   r9   r   r   r9   r   r   r   r   r2     s    zGoto.__init__c                 C   s   g }t |S r1   rW   r5   r   r   r   r     s    zGoto.childrenro   )Nr7   r   r   r   r   r     s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	IDr   Nc                 C   s   || _ || _d S r1   r   r   r   r   r   r2   	  s    zID.__init__c                 C   s   g }t |S r1   rW   r5   r   r   r   r     s    zID.childrenro   )Nr7   r   r   r   r   r     s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	IdentifierType)namesr   r0   Nc                 C   s   || _ || _d S r1   )r   r   )r   r   r   r   r   r   r2     s    zIdentifierType.__init__c                 C   s   g }t |S r1   rW   r5   r   r   r   r     s    zIdentifierType.children)r   )Nr7   r   r   r   r   r     s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Ifre   iftrueiffalser   r0   Nc                 C   s   || _ || _|| _|| _d S r1   re   r   r   r   r   re   r   r   r   r   r   r   r2   !  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 Nre   r   r   re   r3   r   r   r4   r5   r   r   r   r   '  s    
 
 
 zIf.childrenr   )Nr7   r   r   r   r   r     s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	InitListrt   Nc                 C   s   || _ || _d S r1   rv   rw   r   r   r   r2   2  s    zInitList.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S rx   ry   rM   r   r   r   r   6  s    zInitList.childrenr   )Nr7   r   r   r   r   r   0  s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Label)r9   rf   r   r0   Nc                 C   s   || _ || _|| _d S r1   )r9   rf   r   )r   r9   rf   r   r   r   r   r2   @  s    zLabel.__init__c                 C   s&   g }| j d k	r|d| j f t|S )Nrf   )rf   r3   r4   r5   r   r   r   r   E  s    
 zLabel.childrenro   )Nr7   r   r   r   r   r   >  s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	NamedInitializer)r9   rI   r   r0   Nc                 C   s   || _ || _|| _d S r1   )r9   rI   r   )r   r9   rI   r   r   r   r   r2   N  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 )NrI   zname[%d])rI   r3   rL   r9   r4   rM   r   r   r   r   S  s    
 zNamedInitializer.childrenr   )Nr7   r   r   r   r   r   L  s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )		ParamList)paramsr   r0   Nc                 C   s   || _ || _d S r1   )r   r   )r   r   r   r   r   r   r2   ^  s    zParamList.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S )Nz
params[%d])rL   r   r3   r4   rM   r   r   r   r   b  s    zParamList.childrenr   )Nr7   r   r   r   r   r   \  s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	PtrDecl)rZ   r-   r   r0   Nc                 C   s   || _ || _|| _d S r1   )rZ   r-   r   )r   rZ   r-   r   r   r   r   r2   l  s    zPtrDecl.__init__c                 C   s&   g }| j d k	r|d| j f t|S Nr-   r-   r3   r4   r5   r   r   r   r   q  s    
 zPtrDecl.children)rZ   )Nr7   r   r   r   r   r   j  s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Return)rI   r   r0   Nc                 C   s   || _ || _d S r1   )rI   r   )r   rI   r   r   r   r   r2   z  s    zReturn.__init__c                 C   s&   g }| j d k	r|d| j f t|S NrI   rI   r3   r4   r5   r   r   r   r   ~  s    
 zReturn.childrenr   )Nr7   r   r   r   r   r   x  s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Structr9   r_   r   r0   Nc                 C   s   || _ || _|| _d S r1   r9   r_   r   r   r9   r_   r   r   r   r   r2     s    zStruct.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S r`   ra   rM   r   r   r   r     s    zStruct.childrenro   )Nr7   r   r   r   r   r     s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )		StructRef)r9   r-   fieldr   r0   Nc                 C   s   || _ || _|| _|| _d S r1   )r9   r-   r   r   )r   r9   r-   r   r   r   r   r   r2     s    zStructRef.__init__c                 C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S )Nr9   r   )r9   r3   r   r4   r5   r   r   r   r     s    
 
 zStructRef.children)r-   )Nr7   r   r   r   r   r     s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Switchrd   Nc                 C   s   || _ || _|| _d S r1   rg   rh   r   r   r   r2     s    zSwitch.__init__c                 C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S ri   rj   r5   r   r   r   r     s    
 
 zSwitch.childrenr   )Nr7   r   r   r   r   r     s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )		TernaryOpr   Nc                 C   s   || _ || _|| _|| _d S r1   r   r   r   r   r   r2     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   r5   r   r   r   r     s    
 
 
 zTernaryOp.childrenr   )Nr7   r   r   r   r   r     s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	TypeDecl)declnamerZ   r-   r   r0   Nc                 C   s   || _ || _|| _|| _d S r1   )r   rZ   r-   r   )r   r   rZ   r-   r   r   r   r   r2     s    zTypeDecl.__init__c                 C   s&   g }| j d k	r|d| j f t|S r   r   r5   r   r   r   r     s    
 zTypeDecl.children)r   rZ   )Nr7   r   r   r   r   r     s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Typedef)r9   rZ   r[   r-   r   r0   Nc                 C   s"   || _ || _|| _|| _|| _d S r1   )r9   rZ   r[   r-   r   )r   r9   rZ   r[   r-   r   r   r   r   r2     s
    zTypedef.__init__c                 C   s&   g }| j d k	r|d| j f t|S r   r   r5   r   r   r   r     s    
 zTypedef.children)r9   rZ   r[   )Nr7   r   r   r   r   r     s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Typename)r9   rZ   r-   r   r0   Nc                 C   s   || _ || _|| _|| _d S r1   )r9   rZ   r-   r   )r   r9   rZ   r-   r   r   r   r   r2     s    zTypename.__init__c                 C   s&   g }| j d k	r|d| j f t|S r   r   r5   r   r   r   r     s    
 zTypename.children)r9   rZ   )Nr7   r   r   r   r   r     s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	UnaryOp)r<   rI   r   r0   Nc                 C   s   || _ || _|| _d S r1   )r<   rI   r   )r   r<   rI   r   r   r   r   r2     s    zUnaryOp.__init__c                 C   s&   g }| j d k	r|d| j f t|S r   r   r5   r   r   r   r     s    
 zUnaryOp.childrenr?   )Nr7   r   r   r   r   r     s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Unionr   Nc                 C   s   || _ || _|| _d S r1   r   r   r   r   r   r2     s    zUnion.__init__c                 C   s6   g }t | jpg D ]\}}|d| |f qt|S r`   ra   rM   r   r   r   r     s    zUnion.childrenro   )Nr7   r   r   r   r   r      s   
r   c                   @   s&   e Zd ZdZdddZdd ZdZdS )	Whilerd   Nc                 C   s   || _ || _|| _d S r1   rg   rh   r   r   r   r2     s    zWhile.__init__c                 C   s@   g }| j d k	r|d| j f | jd k	r8|d| jf t|S ri   rj   r5   r   r   r   r     s    
 
 zWhile.childrenr   )Nr7   r   r   r   r   r     s   
r   )2r#   objectr   r%   r,   r8   r;   r@   rC   rH   rO   rQ   rS   rU   rX   rY   r^   rb   rc   rk   rl   rm   rp   rq   rs   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   <module>   s`   <0



