
    2h                        d Z ddlmZ ddlmZ ddlZddlZddlZ	 ddlmZ n#  ddl	Z	 G d de	j                  ZY nxY wddl
Z
dd	lmZ  G d
 de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d  d!e          Z G d" d#e          Z G d$ d%e          Z G d& d'e          Z G d( d)e          Z G d* d+e          Z G d, d-e          Z G d. d/e          Z  G d0 d1e          Z! G d2 d3e!          Z" G d4 d5e          Z# G d6 d7e          Z$ G d8 d9e          Z% G d: d;e          Z& ej'        d<          Z( e d=d>dd?dd@e(A           e dBd>dCd?ddDe(A           e dEd>dFd?ddGe(A           e dHd>dId?ddJe(A          dKZ) e dLd>ddMdNe(O           e dPd>dCdQdRe(O           e dSd>dFdTdUe(O           e dVd>dIdWdXe(O          dYZ*e)+                                D ]
\  Z,Z-e-e*e,<    e dZd[dFe(\           e d]d[dIe(\          d^Z.d_ e d_d>ddde(O          iZ/e*+                                D ]
\  Z,Z0e0e/e,<   e.+                                D ]
\  Z,Z1e1e/e,<   g d`Z2 e3            Z4e2D ]Z5 e"e/e5         de(\          e4e5<    G da dbe          Z6 G dc dde          Z7 G de dfe          Z8 G dg dhe          Z9 G di dje          Z: G dk dle          Z;dS )mz@
CLAD parser AST types
heavily based on c_ast.py in py_c_parser
    )absolute_import)print_functionN)StringIOc                       e Zd ZdZd ZdS )r   z^Override StringIO class with one which wraps output with an encode for python2/3 compatibilityc                 f    t           j                            |                               d          S )NASCII)ior   getvalueencodeselfs    H/home/metal/girl-os-victor/victor-clad/tools/message-buffers/clad/ast.pyr
   zStringIO.getvalue!   s&    ;''--44W===    N)__name__
__module____qualname____doc__r
    r   r   r   r      s)        hh	> 	> 	> 	> 	>r   r      )	plyparserc                   :    e Zd Zed             Zed             ZdS )DefaultQualifiedNamerc                 ,    d                     |          S Nz::)join)clsargss     r   r   zDefaultQualifiedNamer.join*   s    yyr   c                     d|z   S r   r   )r   qualified_names     r   disambiguatez"DefaultQualifiedNamer.disambiguate.   s    n$$r   N)r   r   r   classmethodr   r    r   r   r   r   r   (   sH          [ % % [% % %r   r   c                   <    e Zd ZdZd Zd Zej        dddddfdZdS )Nodez  Base object for AST Nodes.
    c                     || _         d S Ncoord)r   r'   s     r   __init__zNode.__init__5   s    


r   c                     g S )z3 A sequence of all children that are Nodes
        r   r   s    r   childrenzNode.children8   s	     	r   r   FNc                 .    d|z  }|r.|,|                     | j        j        z   dz   |z   dz              n%|                     | j        j        z   dz               j        r||r3 fd j        D             }d                    d |D                       }	n2 fd	 j        D             }
d                    d
 |
D                       }	|                     |	           |r4|                     d j        z             |                     d           dS dS )zb Print the Node and its attributes to a buffer.
        TODO: describe all of the kw_args
         Nz <z>: z: c           	          g | ]I}|t          t          |                    st          |          n t          |                      fJS r   callablegetattr.0nr   s     r   
<listcomp>zNode.show.<locals>.<listcomp>J   sq     N N N89 hwtQ?O?O6P6P 3gdA... 0a 0 0 2 24 N N Nr   z, c              3       K   | ]	}d |z  V  
dS )z%s=%sNr   )r2   nvs     r   	<genexpr>zNode.show.<locals>.<genexpr>L   s&      #B#BRGbL#B#B#B#B#B#Br   c                     g | ]G}t          t          |                    st          |          n t          |                      HS r   r.   r1   s     r   r4   zNode.show.<locals>.<listcomp>N   sj     M M M78 2:'$:J:J1K1K 3q))) 0a 0 0 2 2M M Mr   c              3       K   | ]	}d |z  V  
dS )z%sNr   )r2   vs     r   r7   zNode.show.<locals>.<genexpr>P   s&      #<#<D1H#<#<#<#<#<#<r   z (at %s)
)write	__class__r   
attr_namesr   r'   )r   outputoffset	nodenames	attrnames	showcoord
_node_nameleadnvlistattrstrvlists   `          r   showz	Node.show=   sv   
 V| 	@/LL 77$>KeSTTTTLL 77$>???? 		" =N N N N=A_N N N))#B#B6#B#B#BBBM M M M<@OM M M))#<#<e#<#<#<<<LL!!! 	LLdj0111LL	 	r   )	r   r   r   r   r(   r*   sysstdoutrI   r   r   r   r#   r#   2   sb             
 *Q4     r   r#   c                       e Zd ZdZd Zd ZdS )NodeVisitorz A base Node Visitor class for visiting ast nodes.
        Subclass this and define your own visit_XXX methods,
        where XXX is the class name you want to visit with these methods.
    c                     d|j         j        z   }t          | |d          }| ||g|R i |S |j         j        D ]0}d|j        z   dz   }t          | |d          }| ||g|R i |c S 1 | j        |g|R i |S )z Visit a node.
        visit_N	_subclass)r=   r   r0   	__bases__generic_visit)r   noder   kwargsmethodvisitorbases          r   visitzNodeVisitor.visit\   s     DN33$--741$111&1110 : :!DM1K?!$55&"749$999&99999 '%4%d<T<<<V<<<r   c                 \    |                                 D ]\  }} | j        |g|R i | dS )zy Called if no explicit visitor function exists for a node.
            Implements preorder visiting of the node.
        N)r*   rX   )r   rS   r   rT   c_namecs         r   rR   zNodeVisitor.generic_visitk   sN      	+ 	+IFADJq*4***6****	+ 	+r   N)r   r   r   r   rX   rR   r   r   r   rM   rM   W   s<         = = =+ + + + +r   rM   c                   :     e Zd Z fdZd Zd Zd Zd ZdZ xZ	S )DeclListc                 f    t          t          |                               |           || _        d S r%   )superr]   r(   	decl_list)r   r`   r'   r=   s      r   r(   zDeclList.__init__u   s,    h&&u---"r   c                     g }t          | j        pg           D ]\  }}|                    d|z  |f            t          |          S )Nzdecl[%d])	enumerater`   appendtupler   nodelistichilds       r   r*   zDeclList.childreny   sS    !$."6B77 	5 	5HAuOOZ!^U34444Xr   c                 :    | j                             |           | S r%   )r`   rc   r   decls     r   rc   zDeclList.append   s    d###r   c                 :    | j                             |           d S r%   )r`   removerj   s     r   rm   zDeclList.remove   s    d#####r   c                 *    t          | j                  S r%   )lenr`   r   s    r   lengthzDeclList.length   s    4>"""r   r   )
r   r   r   r(   r*   rc   rm   rp   r>   __classcell__r=   s   @r   r]   r]   t   so        # # # # #    $ $ $# # # JJJJJr   r]   c                        e Zd Zd fd	Z eddg          ZefdZefdZe	d             Z
e
j        d             Z
d	 Zd
 Z xZS )DeclNc                     t          t          |                               |           || _        || _        || _        d| _        d| _        d S )NInvalidF)r_   rt   r(   namer'   
_namespacehash_strpossibly_ambiguous)r   rw   r'   	namespacer=   s       r   r(   zDecl.__init__   sK    dD""5)))	
#!"'r   ry   rz   c                     | j         |k    r| j        S | j         r=| j                             ||          |                    t          | j                  z   S t          d                    |j                            )9The fully-qualified name relative to the given namespace.namerzNode not in namespace {0}.)r{   rw   relative_qualified_namer   	separator
ValueErrorformatr   base_namespacer   s      r   r   zDecl.relative_qualified_name   sy    >^++9^ 	W>99.PU9VVY^YcYcdmosoxYyYyyy9@@ATUUVVVr   c                     | j         }| j        /|                    | j                            |          |          }| j        r|                    |          }|S )z8 List of namespaces, with the most specific being first Nr~   )rw   r{   r   fully_qualified_namerz   r    r   r   results      r   r   zDecl.fully_qualified_name   s[    >%ZZ C C% C P PRXYYF" 	0''//Fr   c                     | j         S r%   rx   r   s    r   r{   zDecl.namespace   s
    r   c                     || _         d S r%   r   r   values     r   r{   zDecl.namespace   s    r   c                 F    | j         r| j                                         S g S r%   )r{   get_hierarchy_listr   s    r   namespace_listzDecl.namespace_list   s%    > 	>44666Ir   c                 *    |                                  S r%   r   r   s    r   __str__zDecl.__str__       ((***r   r%   )r   r   r   r(   rd   r>   r   r   r   propertyr{   setterr   r   rq   rr   s   @r   rt   rt      s        ( ( ( ( ( ( 
$89::J<Q W W W W *?       X        + + + + + + +r   rt   c                   d     e Zd Zd fd	Zd Zd Zd Zd Zd Zd Z	 e
d	d
g          Zd Z xZS )NamespaceDeclNc                 z    t          t          |                               |||           || _        d| _        d S )Nr'   r{   F)r_   r   r(   r`   rz   )r   rw   r`   r'   r{   r=   s        r   r(   zNamespaceDecl.__init__   s=    mT""++D+SSS""'r   c                 ,    |r|j         }| |k    rdS |dS NTF)r{   rj   s     r   __contains__zNamespaceDecl.__contains__   s0     	>Dt||t  	 ur   c                     t          | t          |                    r | j        |j        k    o| j        |j        k    S t          S r%   )
isinstancetyperw   r{   NotImplementedr   others     r   __eq__zNamespaceDecl.__eq__   s=    dDKK(( 	"9
*Pt~/PP!!r   c                 v    t          | t          |                    r|                     |           S t          S r%   )r   r   r   r   r   s     r   __ne__zNamespaceDecl.__ne__   s5    dDKK(( 	"{{5))))!!r   c                 j    g }| j         |                    d| j         f           t          |          S Nmembersr`   rc   rd   r   rf   s     r   r*   zNamespaceDecl.children   3    >%x	4>7R'S'S'SXr   c                     | j         j        S r%   r`   r   r   s    r   r   zNamespaceDecl.members       ~%%r   c                 h    g }| }|r|                     |           |j        }|t          |          S r%   )rc   r{   reversed)r   backwards_listcurrents      r   r   z NamespaceDecl.get_hierarchy_list   sJ     	(!!'***'G  	( '''r   rw   r   c                 *    |                                  S r%   r   r   s    r   r   zNamespaceDecl.__str__   r   r   r%   )r   r   r   r(   r   r   r   r*   r   r   rd   r>   r   rq   rr   s   @r   r   r      s        ( ( ( ( ( (
  " " "" " "  
& & &( ( (  6788J+ + + + + + +r   r   c                   H     e Zd Z fdZd Zd Z edg          Zd Z xZ	S )IncludeDeclc                 t    t          t          |                               |           || _        || _        d S r%   )r_   r   r(   rw   r`   )r   rw   r`   r'   r=   s       r   r(   zIncludeDecl.__init__   s3    k4  ))%000	"r   c                 j    g }| j         |                    d| j         f           t          |          S r   r   r   s     r   r*   zIncludeDecl.children   r   r   c                     | j         j        S r%   r   r   s    r   r   zIncludeDecl.members   r   r   rw   c                     | j         S r%   rw   r   s    r   r   zIncludeDecl.__str__   
    yr   )
r   r   r   r(   r*   r   rd   r>   r   rq   rr   s   @r   r   r      sv        # # # # #
  
& & & xJ      r   r   c                   p     e Zd Zd fd	Zd Zd Zd Zd Zd	 Zd
 Z	d Z
d Zd Z eg d          Z xZS )MessageDeclNFTc                     t          t          |                               |||           || _        || _        || _        d| _        d S Nr   None)r_   r   r(   r`   _is_structuredefault_constructorry   )r   rw   r`   r'   r{   is_structurer   r=   s          r   r(   zMessageDecl.__init__   sJ    k4  ))$ey)QQQ")#6 r   c                 j    g }| j         |                    d| j         f           t          |          S r   r   r   s     r   r*   zMessageDecl.children  r   r   c                     | j         j        S r%   r   r   s    r   r   zMessageDecl.members  r   r   c                     |                                  r+t          d |                                  D                       S dS )@The alignment requirements on the message when it is a C struct.c              3   H   K   | ]}|j                                         V  d S r%   r   	alignmentr2   members     r   r7   z(MessageDecl.alignment.<locals>.<genexpr>  s0      LL6v{,,..LLLLLLr   r   )r   maxr   s    r   r   zMessageDecl.alignment  s<    <<>> 	LLT\\^^LLLLLL1r   c                 6   |                                  rg }d}|                                  D ]?} t          |j        |                      }t          |t                    r||z  }:||z  }@t          |          dk    r|                    |           |S |S dS Nr   )r   r0   r   r   listro   rc   )r   accumulatorsumListsumr   sizes         r   __message_size_helperz!MessageDecl.__message_size_helper  s    <<>> 	GC,,..    8wv{K88::dD))  tOGG4KCC7||as###J1r   c                 ,    |                      d          S )zThe maximum size that the transmitted message can possibly be.
        Returns a number or a list of elements that when summed represent the max message sizemax_message_size!_MessageDecl__message_size_helperr   s    r   r   zMessageDecl.max_message_size$  s     ))*<===r   c                 ,    |                      d          S )a  The minimum size that the transmitted message could possibly be.
        I.e. the number of bytes that must be read in order to know how big the structure will be.
        Returns a number or a list of elements that when summed represent the min message sizemin_message_sizer   r   s    r   r   zMessageDecl.min_message_size)  s     ))*<===r   c                     |                                  r+t          d |                                  D                       S dS )EReturns true if the transmitted message will always be the same size.c              3   H   K   | ]}|j                                         V  d S r%   )r   is_message_size_fixedr   s     r   r7   z4MessageDecl.is_message_size_fixed.<locals>.<genexpr>2  s0      XXvv{88::XXXXXXr   Tr   allr   s    r   r   z!MessageDecl.is_message_size_fixed/  s<    <<>> 	XXXXXXXX4r   c                     |                                  r+t          d |                                  D                       S dS )Nc              3   H   K   | ]}|j                                         V  d S r%   )r   are_all_representations_validr   s     r   r7   z<MessageDecl.are_all_representations_valid.<locals>.<genexpr>8  s0      ``vv{@@BB``````r   Tr   r   s    r   r   z)MessageDecl.are_all_representations_valid6  sA    <<>> 	``QUQ]Q]Q_Q_``````4r   c                     | j         rdndS )N	structuremessage)r   r   s    r   object_typezMessageDecl.object_type<  s    "0?{{i?r   )rw   r   ry   NFT)r   r   r   r(   r*   r   r   r   r   r   r   r   r   rd   r>   rq   rr   s   @r   r   r      s               
& & &    $? ? ?
> > >    @ @ @ CCCDDJJJJJr   r   c                   H     e Zd Z fdZd Zd Zd Z edg          Z xZ	S )MessageMemberDeclListc                 f    t          t          |                               |           || _        d S r%   )r_   r   r(   r   r   r   r'   r=   s      r   r(   zMessageMemberDeclList.__init__B  -    #T**33E:::r   c                     g }t          | j        pg           D ]\  }}|                    d|z  |f            t          |          S Nz
member[%d]rb   r   rc   rd   re   s       r   r*   zMessageMemberDeclList.childrenF  sT    !$,"4"55 	7 	7HAuOO\A-u56666Xr   c                 :    | j                             |           | S r%   r   rc   r   r   s     r   rc   zMessageMemberDeclList.appendL      F###r   c                 *    t          | j                  S r%   )ro   r   r   s    r   rp   zMessageMemberDeclList.lengthP  s    4<   r   rp   )
r   r   r   r(   r*   rc   rp   rd   r>   rq   rr   s   @r   r   r   A  sl                ! ! ! z""JJJJJr   r   c                   .     e Zd Z fdZd ZdZd Z xZS )MessageMemberDeclc                     t          t          |                               |           || _        || _        || _        d | _        d S r%   )r_   r   r(   rw   r   inittag)r   rw   r   r   r'   r=   s        r   r(   zMessageMemberDecl.__init__W  sB    &&//666			r   c                     g }| j         |                    d| j         f           | j        |                    d| j        f           t          |          S )Nr   r   )r   rc   r   rd   r   s     r   r*   zMessageMemberDecl.children^  sS    9 (//6492E"F"F"F9 (//6492E"F"F"FXr   )rw   r   c                     | j         S r%   r   r   s    r   r   zMessageMemberDecl.__str__f  r   r   )r   r   r   r(   r*   r>   r   rq   rr   s   @r   r   r   V  s]               "J      r   r   c                   d     e Zd Zd fd	Zd Zd Zd Zd Zd Zd Z	d	 Z
 eg d
          Z xZS )EnumDeclNc                     t          t          |                               |||           || _        |pg | _        || _        d| _        d S r   )r_   r  r(   storage_typemember_list	cpp_classry   )r   rw   r  r  r  r'   r{   r=   s          r   r(   zEnumDecl.__init__j  sO    h&&t5I&NNN(&,""r   c                 4    d| j         fg}t          |          S Nr  r  rd   r   s     r   r*   zEnumDecl.childrenq      "D$456Xr   c                     | j         j        S r%   r  r   r   s    r   r   zEnumDecl.membersu      ''r   c                 4    | j                                         S r%   )r  r   r   s    r   r   zEnumDecl.alignmentx  s     **,,,r   c                 4    | j                                         S r%   )r  r   r   s    r   r   zEnumDecl.max_message_size{       11333r   c                 4    | j                                         S r%   )r  r   r   s    r   r   zEnumDecl.min_message_size~  r  r   c                 4    | j                                         S r%   )r  r   r   s    r   r   zEnumDecl.is_message_size_fixed  s     66888r   c                 4    | j                                         S r%   )r  r   r   s    r   r   z&EnumDecl.are_all_representations_valid  s     >>@@@r   )rw   r   r  ry   r%   )r   r   r   r(   r*   r   r   r   r   r   r   rd   r>   rq   rr   s   @r   r  r  i  s               ( ( (- - -4 4 44 4 49 9 9A A A SSSTTJJJJJr   r  c                   .     e Zd Z fdZd Zd ZdZ xZS )EnumMemberListc                 f    t          t          |                               |           || _        d S r%   )r_   r  r(   r   r   s      r   r(   zEnumMemberList.__init__  s,    nd##,,U333r   c                     g }t          | j                  D ]\  }}|                    d|z  |f            t          |          S r   r   re   s       r   r*   zEnumMemberList.children  O    !$,// 	7 	7HAuOO\A-u56666Xr   c                 :    | j                             |           | S r%   r   r   s     r   rc   zEnumMemberList.append  r   r   r   r   r   r   r(   r*   rc   r>   rq   rr   s   @r   r  r    Q                 JJJJJr   r  c                   <     e Zd Z fdZd Z edg          Z xZS )
EnumMemberc                     t          t          |                               |           || _        || _        d | _        d| _        d S NF)r_   r  r(   rw   initializerr   is_duplicate)r   rw   r  r'   r=   s       r   r(   zEnumMember.__init__  sE    j$((///	&
!r   c                 j    g }| j         r|                    d| j         f           t          |          S )Nr  )r  rc   rd   r   s     r   r*   zEnumMember.children  s8     	?OO]D,<=>>>Xr   rw   r   r   r   r(   r*   rd   r>   rq   rr   s   @r   r  r    sL        " " " " "   xJJJJJr   r  c                        e Zd Zd fd	Zd Zd ZdZed             Zd Z	d	 Z
d
 Zd Zd Zd Zed             Z eg d          Z xZS )	UnionDeclNFc                     t          t          |                               |||           || _        t          d         | _        d| _        || _        || _        d S )Nr   uint_8r   )	r_   r$  r(   r  builtin_typestag_storage_typery   _is_explicit_auto_union_dupes_allowed)r   rw   r  r'   r{   is_explicit_auto_uniondupes_allowedr=   s          r   r(   zUnionDecl.__init__  sZ    i''EY'OOO& -h 7'=$+r   c                 4    d| j         fg}t          |          S r  r  r   s     r   r*   zUnionDecl.children  r	  r   c                     | j         j        S r%   r  r   s    r   r   zUnionDecl.members  r  r      c                 X    t          d |                                 D                       S )Nc              3   (   K   | ]}|j         |fV  d S r%   )r   r   s     r   r7   z+UnionDecl.members_by_tag.<locals>.<genexpr>  s)      FFVVZ(FFFFFFr   )dictr   r   s    r   members_by_tagzUnionDecl.members_by_tag  s'    FFt||~~FFFFFFr   c                     |                                  rRt          d |                                  D                       }t          || j                                                  S | j                                        S )r   c              3   H   K   | ]}|j                                         V  d S r%   r   r   s     r   r7   z&UnionDecl.alignment.<locals>.<genexpr>  s0      QQFK1133QQQQQQr   )r   r   r(  r   )r   r   s     r   r   zUnionDecl.alignment  sj    <<>> 	5QQ$,,..QQQQQIy$"7"A"A"C"CDDD(22444r   c                     |                                  rE| j                                        t          d |                                  D                       z   S | j                                        S )z>The maximum size that the transmitted message can possibly be.c              3   H   K   | ]}|j                                         V  d S r%   )r   r   r   s     r   r7   z-UnionDecl.max_message_size.<locals>.<genexpr>  1      A~A~ek&+B^B^B`B`A~A~A~A~A~A~r   )r   r(  r   r   r   s    r   r   zUnionDecl.max_message_size  e    <<>> 	<(99;;cA~A~oso{o{o}o}A~A~A~>~>~~~(99;;;r   c                     |                                  rE| j                                        t          d |                                  D                       z   S | j                                        S )z>The minimum size that the transmitted message can possibly be.c              3   H   K   | ]}|j                                         V  d S r%   )r   r   r   s     r   r7   z-UnionDecl.min_message_size.<locals>.<genexpr>  r8  r   )r   r(  r   minr   s    r   r   zUnionDecl.min_message_size  r9  r   c                 d   |                                  r|                                  d         j                                        }|                                  D ]>}|j                                        s dS |j                                        |k    r dS ?| j                                        S )r   r   F)r   r   r   r   r(  )r   r   r   s      r   r   zUnionDecl.is_message_size_fixed  s    <<>> 	!<<>>!$)::<<D,,.. ! !{88:: ! 55;//11T99 55 :$::<<<r   c                     dS )zDCan always be invalid, because the union tag can be the invalid tag.Fr   r   s    r   r   z'UnionDecl.are_all_representations_valid      ur   c                     | j         S r%   )r)  r   s    r   r+  z UnionDecl.is_explicit_auto_union  s    ++r   c                     | j         S r%   )r*  r   s    r   r,  zUnionDecl.dupes_allowed  s    ""r   )rw   r   r   ry   )NFF)r   r   r   r(   r*   r   invalid_tagr   r3  r   r   r   r   r   r+  r,  rd   r>   rq   rr   s   @r   r$  r$    s        , , , , , ,  ( ( ( KG G XG5 5 5< < << < <	= 	= 	=  , , , # # X# PPPQQJJJJJr   r$  c                   L     e Zd Zd fd	Zd Zd Zd Z eg d          Z xZ	S )EnumConceptDeclNc                     t          t          |                               |||           || _        || _        |pg | _        d| _        d S r   )r_   rD  r(   return_typeenumr  ry   )r   rw   rF  rG  r  r'   r{   r=   s          r   r(   zEnumConceptDecl.__init__  sO    ot$$--d%9-UUU&	&,"r   c                 4    d| j         fg}t          |          S r  r  r   s     r   r*   zEnumConceptDecl.children  r	  r   c                     | j         j        S r%   r  r   s    r   r   zEnumConceptDecl.members  r  r   c                     | j         j        S r%   )rF  r   r   s    r   return_type_as_stringz%EnumConceptDecl.return_type_as_string  s    $$r   )rw   r   rK  rG  ry   r%   )
r   r   r   r(   r*   r   rK  rd   r>   rq   rr   s   @r   rD  rD    sv               ( ( (% % % dddeeJJJJJr   rD  c                   .     e Zd Z fdZd Zd ZdZ xZS )EnumConceptMemberListc                 f    t          t          |                               |           || _        d S r%   )r_   rM  r(   r   r   s      r   r(   zEnumConceptMemberList.__init__  r   r   c                     g }t          | j                  D ]\  }}|                    d|z  |f            t          |          S r   r   re   s       r   r*   zEnumConceptMemberList.children  r  r   c                 :    | j                             |           | S r%   r   r   s     r   rc   zEnumConceptMemberList.append  r   r   r   r  rr   s   @r   rM  rM    r  r   rM  c                   <     e Zd Z fdZd Z edg          Z xZS )EnumConceptMemberc                 t    t          t          |                               |           || _        || _        d S r%   )r_   rR  r(   rw   r   )r   rw   r   r'   r=   s       r   r(   zEnumConceptMember.__init__  s4    &&//666	


r   c                 \    g }|                     d| j        f           t          |          S )Nr   )rc   r   rd   r   s     r   r*   zEnumConceptMember.children  s,    $*-...Xr   rw   r"  rr   s   @r   rR  rR    sL            
  
 xJJJJJr   rR  c                        e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
efd	Zed
             Zej        d             Zd Z xZS )Typec                 t    t          t          |                               |           || _        d| _        d S r  )r_   rV  r(   rw   _possibly_ambiguous)r   rw   r'   r=   s      r   r(   zType.__init__"  s6    dD""5)))	#(   r   c                     d S r%   r   r   s    r   builtin_typezType.builtin_type(      tr   c                      t          g           S r%   rd   r   s    r   r*   zType.children+  s    Ryyr   c                     dS )z,The alignment requirements on the type in C.Nr   r   s    r   r   zType.alignment.      tr   c                     dS )z;The maximum size that the transmitted type can possibly be.Nr   r   s    r   r   zType.max_message_size2  r_  r   c                     dS )z;The minimum size that the transmitted type can possibly be.Nr   r   s    r   r   zType.min_message_size6  r_  r   c                     dS )zBReturns true if the transmitted type will always be the same size.Fr   r   s    r   r   zType.is_message_size_fixed:  r?  r   c                     dS )zPReturns true if all bit representations of this type are considered valid input.Fr   r   s    r   r   z"Type.are_all_representations_valid>  r?  r   c                 L    | j         }| j        r|                    |          }|S r%   )rw   rz   r    r   s      r   r   zType.fully_qualified_nameB  s,    " 	0''//Fr   c                     | j         S r%   rX  r   s    r   rz   zType.possibly_ambiguousH  s    ''r   c                     || _         d S r%   rf  r   s     r   rz   zType.possibly_ambiguousL  s    #(   r   c                     | j         S r%   r   r   s    r   r   zType.__str__P  r   r   )r   r   r   r(   rZ  r*   r   r   r   r   r   r   r   r   rz   r   r   rq   rr   s   @r   rV  rV  !  s       ) ) ) ) )               *?     ( ( X( ) ) )      r   rV  c                   ^     e Zd Zd fd	Zd Zd Zd Zd Zd Zd	 Z	 e
g d
          Z xZS )BuiltinTypeFNc                     t          t          |                               ||           || _        || _        || _        || _        || _        d S r%   )r_   rj  r(   r   r   unsignedr<  r   )	r   rw   r   r   r'   rl  r<  r   r=   s	           r   r(   zBuiltinType.__init__U  sJ    k4  ))$666		 r   c                     | S r%   r   r   s    r   rZ  zBuiltinType.builtin_type]  s    r   c                     | j         S r%   r   r   s    r   r   zBuiltinType.alignment`  r   r   c                     | j         S r%   ro  r   s    r   r   zBuiltinType.max_message_sizec  r   r   c                     | j         S r%   ro  r   s    r   r   zBuiltinType.min_message_sizef  r   r   c                     dS NTr   r   s    r   r   z!BuiltinType.is_message_size_fixedi  r[  r   c                     dS rs  r   r   s    r   r   z)BuiltinType.are_all_representations_validl  r[  r   )rw   r   r   rl  r<  r   )FNN)r   r   r   r(   rZ  r   r   r   r   r   rd   r>   rq   rr   s   @r   rj  rj  S  s                          IIIJJJJJJJr   rj  c                   `     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
 ed	g          Z xZS )
VariableArrayTypec                     t          t          |                               |j        d|j        d|           || _        || _        ||| _        d| _        d S |j        | _        d| _        d S )N[]TF)	r_   rv  r(   rw   member_typelength_type
max_lengthmax_length_is_specifiedr   )r   rz  r{  r|  r'   r=   s        r   r(   zVariableArrayType.__init__r  s~    &&//K<L<L<LkN^N^N^0_afggg&&!(DO+/D((()oDO+0D(((r   c                 4    | j                                         S r%   rz  rZ  r   s    r   rZ  zVariableArrayType.builtin_type}      ,,...r   c                 D    d| j         fd| j        fg}t          |          S )Nrz  r{  )rz  r{  rd   r   s     r   r*   zVariableArrayType.children  s-    D,-D,-
 Xr   c                     | j         dk    r| j                                        S t          | j                                        | j                                                  S r   )r|  r{  r   r   rz  r   s    r   r   zVariableArrayType.alignment  sR    ?a#--///t'1133T5E5O5O5Q5QRRRr   c                 x    | j                                         | j        | j                                        z  z   S r%   )r{  r   r|  rz  r   s    r   r   z"VariableArrayType.max_message_size  s2    0022T_tGWGhGhGjGj5jjjr   c                 4    | j                                         S r%   )r{  r   r   s    r   r   z"VariableArrayType.min_message_size  s    00222r   c                      | j         dk    rdS dS )Nr   TF)r|  r   s    r   r   z'VariableArrayType.is_message_size_fixed  s    ?a45r   c                 ~    | j         j        | j        k    o(| j         j        dk    o| j                                        S )z&Can be invalid if length is above max.r   )r{  r   r|  r<  rz  r   r   s    r   r   z/VariableArrayType.are_all_representations_valid  sA     $7 = A%=::<<	>r   r{  r   r   r   r(   rZ  r*   r   r   r   r   r   rd   r>   rq   rr   s   @r   rv  rv  q  s        	1 	1 	1 	1 	1/ / /  S S Sk k k3 3 3  > > > ''JJJJJr   rv  c                   $     e Zd Z fdZd Z xZS )PascalStringTypec                     t          t          |                               t          d         |||           |j        dk    r	d| _        d S d|j        z  | _        d S )Nr&  stringz
string[%s])r_   r  r(   r'  r   rw   )r   r{  r|  r'   r=   s       r   r(   zPascalStringType.__init__  s[    %%..}X/FU_afgggx'' DIII${'77DIIIr   c                     dS )OIs invalid if there are null bytes or invalid UTF-8, or if length is above max.Fr   r   s    r   r   z.PascalStringType.are_all_representations_valid  r?  r   )r   r   r   r(   r   rq   rr   s   @r   r  r    sG        8 8 8 8 8      r   r  c                   `     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
 ed	g          Z xZS )
FixedArrayTypec                     t          t          |                               |j        d|d|           || _        || _        d S )Nrx  ry  )r_   r  r(   rw   rz  rp   )r   rz  rp   r'   r=   s       r   r(   zFixedArrayType.__init__  sI    nd##,,9I9I9I666-RTYZZZ&r   c                 4    | j                                         S r%   r  r   s    r   rZ  zFixedArrayType.builtin_type  r  r   c                     d| j         fg}|S )Nrz  )rz  r   s     r   r*   zFixedArrayType.children  s    D,-
 r   c                 N    | j         dk    rdS | j                                        S )Nr   r   )rp   rz  r   r   s    r   r   zFixedArrayType.alignment  s)    ;!1#--///r   c                     | j                                         }t          | j        t                    r| j        g|z  S || j        z  S )z]Returns either a number or a list of elements that when summed represent the max message size)rz  r   r   rp   str)r   r   s     r   r   zFixedArrayType.max_message_size  J    +<<>>dk3'' 	4 K=#333$+--r   c                     | j                                         }t          | j        t                    r| j        g|z  S || j        z  S )z]Returns either a number or a list of elements that when summed represent the min message size)rz  r   r   rp   r  )r   r   s     r   r   zFixedArrayType.min_message_size  r  r   c                 N    | j         dk    rdS | j                                        S )Nr   T)rp   rz  r   r   s    r   r   z$FixedArrayType.is_message_size_fixed  s)    ;!4#99;;;r   c                 N    | j         dk    rdS | j                                        S )r  r   T)rp   rz  r   r   s    r   r   z,FixedArrayType.are_all_representations_valid  s)    ;!4#AACCCr   rp   r  rr   s   @r   r  r    s            
/ / /  0 0 0. . .. . .< < <D D D z""JJJJJr   r  c                        e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
efd	Zefd
Zed             Zej        d             Zed             Z edg          Z xZS )DefinedTypec                     t          t          |                               ||           || _        |j        j        | _        d S r%   )r_   r  r(   underlying_typer  r   )r   rw   r  r'   r=   s       r   r(   zDefinedType.__init__  s<    k4  ))$666.#05			r   c                 P    | j         r| j         j                                        S d S r%   )r  r  rZ  r   s    r   rZ  zDefinedType.builtin_type  s+     	D'4AACCCtr   c                 $    g }t          |          S r%   r]  r   s     r   r*   zDefinedType.children      Xr   c                 4    | j                                         S r%   )r  r   r   s    r   r   zDefinedType.alignment  s    #--///r   c                 4    | j                                         S r%   )r  r   r   s    r   r   zDefinedType.max_message_size      #44666r   c                 4    | j                                         S r%   )r  r   r   s    r   r   zDefinedType.min_message_size  r  r   c                 4    | j                                         S r%   )r  r   r   s    r   r   z!DefinedType.is_message_size_fixed  s    #99;;;r   c                 4    | j                                         S r%   )r  r   r   s    r   r   z)DefinedType.are_all_representations_valid   s    #AACCCr   c                 :    | j                             ||          S )r}   r~   )r  r   r   s      r   r   z#DefinedType.relative_qualified_name  s    #;;NRW;XXXr   c                 8    | j                             |          S Nr~   )r  r   r   r   s     r   r   z DefinedType.fully_qualified_name  s    #88u8EEEr   c                     | j         j        S r%   r  rz   r   s    r   rz   zDefinedType.possibly_ambiguous
  s    #66r   c                     || j         _        d S r%   r  r   s     r   rz   zDefinedType.possibly_ambiguous  s    27///r   c                     | j         j        S r%   )r  r{   r   s    r   r{   zDefinedType.namespace  s    #--r   rw   )r   r   r   r(   rZ  r*   r   r   r   r   r   r   r   r   r   rz   r   r{   rd   r>   rq   rr   s   @r   r  r    s9       6 6 6 6 6
  
  0 0 07 7 77 7 7< < <D D D =R Y Y Y Y *? F F F F 7 7 X7 8 8 8 . . X. xJJJJJr   r  c                        e Zd Z fdZd Zd Zd Zd Zd Zd Z	e
fdZe
fd	Zed
             Zej        d             Zed             Z edg          Z xZS )CompoundTypec                 h    t          t          |                               ||           || _        d S r%   )r_   r  r(   	type_decl)r   rw   r  r'   r=   s       r   r(   zCompoundType.__init__  s.    lD!!**4777"r   c                 $    g }t          |          S r%   r]  r   s     r   r*   zCompoundType.children  r  r   c                 4    | j                                         S r%   )r  r   r   s    r   r   zCompoundType.alignment"  s    ~'')))r   c                 4    | j                                         S r%   )r  r   r   s    r   r   zCompoundType.max_message_size%      ~..000r   c                 4    | j                                         S r%   )r  r   r   s    r   r   zCompoundType.min_message_size(  r  r   c                 4    | j                                         S r%   )r  r   r   s    r   r   z"CompoundType.is_message_size_fixed+  s    ~33555r   c                 4    | j                                         S r%   )r  r   r   s    r   r   z*CompoundType.are_all_representations_valid.  s    ~;;===r   c                 :    | j                             ||          S r  )r  r   r   s      r   r   z$CompoundType.relative_qualified_name1  s    ~55nE5RRRr   c                 8    | j                             |          S r  )r  r   r  s     r   r   z!CompoundType.fully_qualified_name4  s    ~222???r   c                     | j         j        S r%   r  rz   r   s    r   rz   zCompoundType.possibly_ambiguous7  s    ~00r   c                     || j         _        d S r%   r  r   s     r   rz   zCompoundType.possibly_ambiguous;  s    ,1)))r   c                     | j         j        S r%   )r  r{   r   s    r   r{   zCompoundType.namespace?  s    ~''r   rw   )r   r   r   r(   r*   r   r   r   r   r   r   r   r   r   rz   r   r{   rd   r>   rq   rr   s   @r   r  r    s'       # # # # #  * * *1 1 11 1 16 6 6> > > =R S S S S *? @ @ @ @ 1 1 X1 2 2 2 ( ( X( xJJJJJr   r  c                   6     e Zd Z fdZ edg          Z xZS )TypeReferencec                 f    t          t          |                               |           || _        d S r%   )r_   r  r(   r   )r   r   r'   r=   s      r   r(   zTypeReference.__init__G  s,    mT""++E222			r   r   )r   r   r   r(   rd   r>   rq   rr   s   @r   r  r  E  s=             xJJJJJr   r  __builtin__r&  intTr/  )rl  r<  r   r'   uint_16   i  uint_32   l    uint_64   l    )r&  r  r  r  int_8i   )r<  r   r'   int_16i i  int_32i   iint_64l         l    )r  r  r  r  float_32floatr&   float_64)r  r  bool)r&  r  r  c                   4    e Zd Zd Zd Z eddg          ZdS )IntConstc                 L    || _         || _        || _        d| _        d| _        d S r   r   r   r'   isIntisFloatr   r   r   r'   s       r   r(   zIntConst.__init__{  s)    
	

r   c                     t                      S r%   r]  r   s    r   r*   zIntConst.children      wwr   r   r   Nr   r   r   r(   r*   rd   r>   r   r   r   r  r  z  B             ())JJJr   r  c                   4    e Zd Zd Zd Z eddg          ZdS )
FloatConstc                 L    || _         || _        || _        d| _        d| _        d S r   r  r  s       r   r(   zFloatConst.__init__  s)    
	

r   c                     t                      S r%   r]  r   s    r   r*   zFloatConst.children  r  r   r   r   Nr  r   r   r   r  r    sB             ())JJJr   r  c                   4    e Zd Zd Zd Z eddg          ZdS )StringConstc                 L    || _         d| _        || _        d| _        d| _        d S )Nr  Fr  )r   r   r'   s      r   r(   zStringConst.__init__  s)    
	

r   c                     t                      S r%   r]  r   s    r   r*   zStringConst.children  r  r   r   r   Nr  r   r   r   r  r    r  r   r  c                        e Zd Zd Zd Zd ZdS )ASTNamespaceWrapperc                 0    || _         d| _        d | _        d S r  )
wrapper_nswrapped_namespaceparent_decl_list)r   r  s     r   r(   zASTNamespaceWrapper.__init__  s    $!& $r   c                     d S r%   r   )r   rS   r   rT   s       r   visit_IncludeDeclz%ASTNamespaceWrapper.visit_IncludeDecl  s    r   c                    |rt          |t                    r|| _        t          |t                    r| j        s}t          g d           }|                    |           t          | j        |d           }||_        d| _        | j                            |           | j                            |           |	                                D ]\  }}| 
                    |           d S d S rs  )r   r]   r  r   r  rc   r  r{   rm   r*   rX   )r   rS   wrapper_decl_listr  rw   rh   s         r   rR   z!ASTNamespaceWrapper.generic_visit  s    	"$)) -(,%$.. =- =(0T(:(:%%,,T222 "/t@QSW!X!XJ &0DN-1D* )00666)00<<<!% " "u

5!!!!1	" 	"." "r   N)r   r   r   r(   r  rR   r   r   r   r  r    sA        % % %
  " " " " "r   r  c                       e Zd Zd Zd ZdS )ASTDebugc                 "    d| _         d | _        d S r   )depth	node_namer   s    r   r(   zASTDebug.__init__  s    
r   c                 "   |r|                     t          j        | j        | j        ddd           | j        dz   | _        |                                D ]!\  }}|| _        |                     |           "d | _        | j        dz
  | _        d S d S )NTr?   r@   rD   rA   rB   rC   r   )rI   rJ   rK   r  r  r*   rX   r   rS   rw   rh   s       r   rR   zASTDebug.generic_visit  s     	(IISZ!Z!% $ $ $  & & & aDJ!% " "u!%

5!!!!!DNaDJJJ	( 	(r   N)r   r   r   r(   rR   r   r   r   r  r    s2          ( ( ( ( (r   r  c                   0    e Zd Zd Zd Zed             ZdS )ASTHashc                 H    d| _         d | _        t                      | _        d S r   )r  r  r   r?   r   s    r   r(   zASTHash.__init__  s    
jjr   c                    |r|                     | j        d| j        ddd           | j        dz   | _        |                                D ]!\  }}|| _        |                     |           "d | _        | j        dz
  | _        d S d S )Nr   TFr  r   )rI   r?   r  r  r*   rX   r  s       r   rR   zASTHash.generic_visit  s     	(IIT[!% $ $ %  ' ' ' aDJ!% " "u!%

5!!!!!DNaDJJJ	( 	(r   c                     t          j                    }|                    | j                                                   |                                S r%   )hashlibmd5updater?   r
   	hexdigest)r   ms     r   ry   zASTHash.hash_str  s;    KMM	%%''((({{}}r   N)r   r   r   r(   rR   r   ry   r   r   r   r  r    sM        ! ! !
( ( (    X  r   r  )<r   
__future__r   r   os.pathosrJ   structr   r	   r   r   objectr   r#   rM   r]   rt   r   r   r   r   r   r  r  r  r$  rD  rM  rR  rV  rj  rv  r  r  r  r  r  Coordbuiltin_coordbuiltin_uint_typesbuiltin_int_typesitemsrw   	uint_typebuiltin_float_typesr'  int_type
float_typestring_length_typesr2  string_typesr{  r  r  r  r  r  r  r   r   r   <module>r     s   
 ' & & & & & % % % % % %  



 >!!!!!!!>III> > > > >2; > > > > >
       % % % % %F % % %# # # # #6 # # #J+ + + + +& + + +:    t   .-+ -+ -+ -+ -+4 -+ -+ -+^,+ ,+ ,+ ,+ ,+D ,+ ,+ ,+\    $   &DE DE DE DE DE$ DE DE DEL# # # # #D # # #*       &U U U U Ut U U U@    T   "! ! ! ! ! ! ! ! BR BR BR BR BR BR BR BRHf f f f fd f f f(    D   "! ! ! ! ! ! ! !0 0 0 0 04 0 0 0dK K K K K$ K K K<.( .( .( .( .( .( .( .(b
 
 
 
 
( 
 
 
4# 4# 4# 4# 4#T 4# 4# 4#l2! 2! 2! 2! 2!$ 2! 2! 2!h+! +! +! +! +!4 +! +! +!Z! ! ! ! !D ! ! !  	.. Hua$A6ZghhhIua$A7ZghhhIua$A7ZghhhIua$A7Zghhh	   {7UA5vm\\\{8UA6wm\\\{8UA6wm\\\{8UA6wm\\\	   *//11 ( (OD)'d  K
GQmLLLK
GQmLLL   {{65!OOO (--// # #ND("M$+1133 % %D*$M$    tvv& h hK 0 0{1KTYf g g gL* * * * *t * * ** * * * * * * ** * * * *$ * * *#" #" #" #" #"+ #" #" #"L( ( ( ( ({ ( ( (*    k     s   # >