
9Kc           @   s  d  d k  Ty d  d k l Z WnM e j
 oA y d  d k l Z Wn# e j
 o d  d k l Z n Xn Xd  d k l Z d  d k l	 Z	 d  d k
 l Z d e f d     YZ d e f d	     YZ d
 e f d     YZ d e f d     YZ d   Z e d j o e d  n d S(   i(   t   *(   t   ElementTree(   t
   ExpatError(   t   deepcopy(   t	   enumeratet   InvalidXMLErrorc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyR      s    t   ParserErrorc           B   s   e  Z RS(    (   R   R   (    (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyR      s    t   InvalidContextErrorc           B   s   e  Z RS(    (   R   R   (    (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyR	      s    t   GCCXMLParserc           B   s  e  Z d  Z h d d 6d d 6d d 6d d 6Z d   Z d   Z d   Z d	   Z d
   Z d   Z	 d   Z
 d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e d  Z d   Z d   Z d   Z d   Z d   Z h d d 6d d 6Z d   Z d    Z d!   Z d"   Z d#   Z d$   Z  d%   Z! e" d&  Z# d'   Z$ d(   Z% d)   Z& d*   Z' d+   Z( d,   Z) RS(-   s<   Parse a GCC_XML file and extract the top-level declarations.i    t   Classt   Functiont   Variablet   Enumerationc         C   s   |  i  |  |  _ g  |  _ h  |  _ x_ |  i D]T } |  i | \ } } | d  j o. y |  i | |  Wq t j
 o q Xq. q. Wd  S(   N(   t   GetElementsFromXMLt   elementst   declarationst   _namest   Nonet   ParseElementR	   (   t   selft   filenamet   idt   elementt   decl(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   Parse(   s    		
 c         C   s   |  i  S(   N(   R   (   R   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   Declarations8   s    c         C   s   | i    |  i j oG t | _ x; |  i D], } | i    | i    j o t | _ q) q) Wn d |  i | i    <|  i i |  d  S(   Ni    (   t   FullNameR   t   Falset	   is_uniqueR   t   append(   R   R   t   d(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   AddDecl<   s    	
 c         C   sQ   d | i  } t |  |  o  t |  |  } | | |  n |  i | |  d  S(   NR   (   t   tagt   hasattrt   getattrt   ParseUnknown(   R   R   R   t   methodt   func(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyR   F   s
    c         C   s   t    } y | i |  Wn  t j
 o t d |  n X| i   } | i d j o t d  n | i   } h  } x8 | D]0 } | i d  } | o | d f | | <q q W| S(   s8   Extracts a dictionary of elements from the gcc_xml file.s   Not a XML file: %st   GCC_XMLs   Not a valid GCC_XML fileR   N(	   R   t   parseR   R   t   getrootR"   t   getchildrent   getR   (   R   R   t   treet   roott   elementlistR   R   R   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyR   O   s     	 c         C   s   | |  i  j o1 | d j o t d  qA d | } t |  n |  i  | \ } } | d  j oH |  i | |  |  i  | \ } } | d  j o t d | i  q n | S(   Nt   _0s&   Invalid context found in the xml file.s   ID not found in elements: %ss   Could not parse element: %s(   R   R	   R   R   R   R"   (   R   R   t   msgt   elemR   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   GetDeclf   s    
c         C   s   d   } | | d  \ } } | | d  \ } } | | d  \ } } |  i  |  } t | t  oL t |  } | o | | _ n | o | | _ n | o | | _ q n( t | i   |  } | | _ | | _ | S(   Nc         S   sK   |  i  |  } | d j o! |  |  |  | d }  t |  f St |  f Sd  S(   Nii   (   t   findt   TrueR   (   R   t   featuret   pos(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   Checkx   s
    t   ct   vt   r(   R3   t
   isinstancet   TypeR   t   constt   volatilet
   restrictedR   (   R   R   R8   R>   R?   R@   R   t   res(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   GetTypew   s"    			c         C   s4   | i  d  \ } } |  i |  } | t |  f S(   Nt   :(   t   splitR3   t   int(   R   t   locationt   filet   line(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   GetLocation   s    c         C   s*   |  i  | \ } } | | f |  i  | <d  S(   N(   R   (   R   R   R   R   t   _(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   Update   s    c         C   s*   d | } t  |  } |  i | |  d  S(   Ns   __Unknown_Element_%s(   t   UnknownRK   (   R   R   R   t   nameR   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyR%      s    
c         C   s   | i  d  } | i  d  } | o; |  i |  } | i d  p | d 7} n | | } n | i d  o | d } n |  i | |  d  S(   NRM   t   contexts   ::i   (   R,   R3   t   endswitht
   startswithRK   (   R   R   R   t	   namespaceRN   t   outer(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseNamespace   s    c         C   s#   | i  d  } |  i | |  d  S(   NRM   (   R,   RK   (   R   R   R   R   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt	   ParseFile   s    c         C   s   |  i  | i d   } t | t  o0 |  i | |  |  i | \ } } t | _ n~ | } | i d  } |  i | i d   } |  i	 | i d   }	 t
 | | |  }
 |	 |
 _ |  i |
  |  i | |
  d  S(   NRN   RM   t   typeRF   (   R3   R,   R<   R   t
   ParseFieldR   R5   t   staticRB   RI   R   RF   R!   RK   (   R   R   R   RN   R2   R   RQ   RM   t   type_RF   t   variable(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseVariable   s    	c         C   sf   g  } xY | D]Q } | i  d j o; |  i | i d   } | i d  | _ | i |  q q W| S(   Nt   ArgumentRU   t   default(   R"   RB   R,   R\   R   (   R   R   t   argst   childRU   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   GetArguments   s     c         C   sI   | d  j o d  Sg  } x* | i   D] } | i |  i |   q% W| S(   N(   R   RD   R   RB   (   R   t   exception_listt
   exceptionst   t(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   GetExceptions   s     c         C   s   | i  d  } |  i | i  d   } |  i | i  d   } |  i | i  d   } |  i |  } t t | i  d d    }	 |  i | i  d d   }
 | | | | | |
  } | | _	 |  i
 |  |  i | |  d S(	   sz   functionType is used because a Operator is identical to a normal 
        function, only the type of the function changes.RM   t   returnsRN   RF   t
   incompletei    t   throwN(   R,   RB   R3   RI   R_   t   boolRE   Rc   R   RF   R!   RK   (   R   R   R   t   functionTypeRM   Rd   RQ   RF   t   paramsRe   t   throwst   function(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseFunction   s    	c         C   s   |  i  | | t  d  S(   N(   Rl   t   Operator(   R   R   R   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseOperatorFunction   s    c         C   s\  | d j o g  S| i   } g  } g  } x | D] } | i d  } t |  d j o | d } | d } n
 t i } |  i |  } t | t  p q1 n t | i	   |  } | i
 |  xS t | i  D]B \ }	 }
 |	 t |  j  o | |	 |
 | |	 <q | i
 |
  q Wq1 Wg  } | o | i
 t |   n | o | i |  n | S(   s   Parses the string "bases" from the xml into a list of tuples of Base
        instances. The first tuple is the most direct inheritance, and then it
        goes up in the hierarchy. 
        RC   i   i    i   N(   R   RD   t   lent   Scopet   publicR3   R<   R   t   BaseR   R   R   t	   hierarchyt   tuplet   extend(   R   t   basest
   base_namest
   this_levelt   next_levelst   baseRD   t   visibR   t   indext   levelRs   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   GetHierarchy   s8     
	 c         C   sl   | d  j o g  Sg  } xM | i   D]? } |  i |  } t |  t i   j o | i |  q% q% W| S(   N(   R   RD   R3   RU   R   t   ValidMemberTypesR   (   R   t   member_listt   memberst   memberR   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt
   GetMembers  s     c         C   sy  | i  d  } t t | i  d d    } |  i | i  d   } |  i | i  d   } t t | i  d d    } t | t  o t | | g  |  } n4 | i  d t i	  }	 t
 | | i   |	 g  |  } | | _ |  i |  | | _ |  i | |  |  i | i  d	   | _ | i o | i d | _ n |  i | i  d
   }
 x |
 D] } | i |  q^Wd  S(   NRM   t   abstractt   0RF   RN   Re   i    t   accessRv   R   (   R,   Rg   RE   RI   R3   R<   t   strR   Rp   Rq   t   NestedClassR   Re   R!   RF   RK   R~   Rs   Rv   R   t	   AddMember(   R   R   R   RM   R   RF   RN   Re   t   class_R{   R   R   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt
   ParseClass&  s*    		
 c         C   s   |  i  | |  d  S(   N(   R   (   R   R   R   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseStructB  s    s   boost::int64_ts   long long ints   boost::uint64_ts   long long unsigned intc         C   sD   | i  d  } |  i i  | |  } t |  } |  i | |  d  S(   NRM   (   R,   t   FUNDAMENTAL_RENAMEt   FundamentalTypeRK   (   R   R   R   RM   RX   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseFundamentalTypeK  s    c         C   se   |  i  | i d   } | i d  } | i d  } t | i | i | |  } |  i | |  d  S(   NRU   t   mint   max(   RB   R,   t	   ArrayTypeRM   R>   RK   (   R   R   R   RU   R   R   t   array(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseArrayTypeR  s
    c         C   s]   |  i  | i d   } t | t  } t | i | i d  | | i  } |  i	 | |  d  S(   NRU   (
   RB   R,   R<   t   FunctionTypet   ReferenceTypeRM   R>   R   t   suffixRK   (   R   R   R   RU   t   expandt   ref(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseReferenceTypeZ  s    !c         C   s]   |  i  | i d   } t | t  } t | i | i d  | | i  } |  i	 | |  d  S(   NRU   (
   RB   R,   R<   R   t   PointerTypeRM   R>   R   R   RK   (   R   R   R   RU   R   R   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParsePointerTypea  s    !c         C   sJ   |  i  | i d   } |  i |  } t | |  } |  i | |  d  S(   NRd   (   RB   R,   R_   R   RK   (   R   R   R   t   resultR]   R'   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseFunctionTypeh  s    c         C   sk   |  i  | i d   i   } |  i | i d   } |  i |  } t | | |  } |  i | |  d  S(   Nt   basetypeRd   (   R3   R,   R   RB   R_   t
   MethodTypeRK   (   R   R   R   R   R   R]   R&   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseMethodTypeo  s
    c   
      C   s   | i  d  } | i  d t i  } |  i | i  d   i   } |  i | i  d   } t t | i  d d    } |  i | i  d   } t	 | | | | |  }	 | |	 _
 |  i | |	  d  S(   NRM   R   RN   RU   t   externR   RF   (   R,   Rp   Rq   R3   R   RB   Rg   RE   RI   t   ClassVariableRF   RK   (
   R   R   R   RM   R{   t	   classnameRX   RW   RF   t   var(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyRV   w  s    	c         C   sX  | i  d  } |  i | i  d   } |  i | i  d   i   } | i  d t i  } t t | i  d d    } t t | i  d d    }	 t t | i  d d    }
 t t | i  d	 d    } |  i | i  d
   } |  i	 | i  d d    } |  i |  } | | | | | | |	 |
 | | | 
 } | | _ |  i | |  d  S(   NRM   Rd   RN   R   RW   R   t   virtualt   pure_virtualR>   RF   Rf   (   R,   RB   R3   R   Rp   Rq   Rg   RE   RI   Rc   R   R_   RF   RK   (   R   R   R   t
   methodTypeRM   R   R   R{   RW   R   R   R>   RF   Rj   Ri   R&   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseMethod  s    $	c         C   s   |  i  | | t  d  S(   N(   R   t   ClassOperator(   R   R   R   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseOperatorMethod  s    c   
      C   s   | i  d  } | i  d t i  } |  i | i  d   i   } |  i | i  d   } |  i |  } | i  d t  } t | | | |  }	 | |	 _	 |  i
 | |	  d  S(   NRM   R   RN   RF   t
   artificial(   R,   Rp   Rq   R3   R   RI   R_   R   t   ConstructorRF   RK   (
   R   R   R   RM   R{   R   RF   Ri   R   t   ctor(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseConstructor  s    	c   	      C   s   | i  d  } | i  d t i  } |  i | i  d   i   } t t | i  d d    } |  i | i  d   } t | | | |  } | | _	 |  i
 | |  d  S(   NRM   R   RN   R   R   RF   (   R,   Rp   Rq   R3   R   Rg   RE   RI   t
   DestructorRF   RK   (	   R   R   R   RM   R{   R   R   RF   t   des(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseDestructor  s    	c         C   s   |  i  | | t  d  S(   N(   R   t   ConverterOperator(   R   R   R   (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseConverter  s    c         C   s   | i  d  } |  i | i  d   } |  i | i  d   } t | t  o | i   } n t | | |  } |  i | |  |  i |  d  S(   NRM   RU   RN   (	   R,   RB   R3   R<   R   R   t   TypedefRK   R!   (   R   R   R   RM   RU   RN   t   typedef(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseTypedef  s    c         C   s6  | i  d  } |  i | i  d   } |  i | i  d   } t t | i  d d    } t | t  o t | |  } n. | i  d t i	  } t
 | | i   |  } |  i |  | | _ xS | D]K }	 |	 i d j o5 |	 i  d  } t |	 i  d   }
 |
 | i | <q q W| | _ |  i | |  d  S(	   NRM   RF   RN   Re   i    R   t	   EnumValuet   init(   R,   RI   R3   Rg   RE   R<   R   R   Rp   Rq   t   ClassEnumerationR   R!   RF   R"   t   valuesRe   RK   (   R   R   R   RM   RF   RN   Re   t   enumR{   R^   t   value(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseEnumeration  s$    	 	(*   R   R   t   __doc__t   interested_tagsR   R   R!   R   R   R3   RB   RI   RK   R%   RS   RT   RZ   R_   Rc   R   Rl   Rn   R~   R   R   R   R   R   R   R   R   R   R   RV   t   MethodR   R   R   R   R   R   R   (    (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyR
   #   sP   "			
												
			)			
												c         C   s    t    } | i |   | i   S(   sA   Returns a list of the top declarations found in the gcc_xml file.(   R
   R   R   (   R   t   parser(    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   ParseDeclarations  s    	t   __main__sK   D:\Programming\Libraries\boost-cvs\boost\libs\python\pyste\example\test.xmlN(   R   t   xml.etree.cElementTreeR   t   ImportErrort   cElementTreet   elementtree.ElementTreet   xml.parsers.expatR   t   copyR   t   utilsR   t	   ExceptionR   R   R	   t   objectR
   R   R   (    (    (    s2   /usr/lib/pymodules/python2.6/Pyste/GCCXMLParser.pyt   <module>   s$   
 	