
\c           @   s?  d  d l  m Z d  d l m Z m Z d  d l m Z m Z y d  d l  m Z	 Wn e
 k
 ro d d l	 Z	 n Xd d l Z d d l Z d d l Z y: e j d  k  r d d l Z n d d l Z e j   Z Wn e
 k
 r d Z n Xd   Z d	 Z e j d
 e j e j B Z e j d e j e j B Z e j d  Z e j d  Z e j d  Z e j d  Z d a e j d e j   Z! e j d  Z" e j d  Z# e j d  Z$ e j d  Z% e j d  Z& e j d  Z' e j d  Z( d   Z) d   Z* d   Z+ d   Z, d   Z- d   Z. d e/ f d     YZ0 d S(!   i   (   t   model(   t   COMMON_TYPESt   resolve_common_type(   t   FFIErrort	   CDefError(   t
   _pycparseriNi   c          C   s   d d  l  }  d d  l }  d  S(   Ni(   t   pycparser.yacctabt   pycparser.lextab(   t	   pycparser(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyt%   _workaround_for_static_import_finders   s    s   <cdef source string>s   /\*.*?\*/|//([^\n\\]|\\.)*?$s?   ^\s*#\s*define\s+([A-Za-z_][A-Za-z_0-9]*)\b((?:[^\n\\]|\\.)*?)$s   =\s*\.\.\.\s*[,}]|\.\.\.\s*\}s   __dotdotdot\d+__$s   \[\s*\.\.\.\s*\]s   \w+|\Ss   -?0?x?[0-9a-f]+[lu]*$s   \b(__stdcall|WINAPI)\bs   [(]\s*(__stdcall|WINAPI)\bs   \b__cdecl\bs9   \bextern\s*"(Python|Python\s*\+\s*C|C\s*\+\s*Python)"\s*.s'   [*]\s*((const|volatile|restrict)\b\s*)+s3   (\b(int|long|short|signed|unsigned|char)\s*)+\.\.\.s   \b(double|float)\s*\.\.\.c           C   s   t  d  k r t j   a  n  t  S(   N(   t   _parser_cachet   NoneR   t   CParser(    (    (    s+   lib/python2.7/site-packages/cffi/cparser.pyt   _get_parser1   s    c         C   sn  g  } xKt  rSt j |   } | s( Pn  | j |  | j     | j d  d } | j | j    | j   } |  j d |  r | j d  | d 7} n  d } | } x | t |   k  r6|  | } | d k r | d 7} nH | d k r
| d k r Pn  | d 8} n | d k r)| d k r)Pq)n  | d 7} q W|  | | !| |  | }  q	 W| j |   d j	 |  S(   Nt   (t   )t   *i    i   s   ,;=t    (
   t   Truet   _r_star_const_spacet   searcht   appendt   startt   groupt   endt
   startswitht   lent   join(   t   csourcet   partst   matcht   closingt   endpost   levelt   it   c(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyt   _workaround_for_old_pycparser7   s<    	  
c         C   s  g  } xpt  rxt j |   } | s( Pn  | j   d } | j |  | j     d | j d  k rt | j d  n | j d  |  | d k r|  j d |  } | d k  r t d   n  |  j d | d |  d k r t	 d	   n  | j |  | d | ! |  | d }  nS |  j d
 |  } | d k  rBt d   n  | j |  | | d ! |  | d }  | j d  q	 W| j |   d j
 |  S(   Ni   t   Cs(   void __cffi_extern_python_plus_c_start; s!   void __cffi_extern_python_start; t   {t   }i    s!   'extern "Python" {': no '}' founds7   cannot use { } inside a block 'extern "Python" { ... }'t   ;s   'extern "Python": no ';' founds     void __cffi_extern_python_stop;R   (   R   t   _r_extern_pythonR   R   R   R   R   t   findR   t   NotImplementedErrorR   (   R   R   R   R    R   t	   semicolon(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyt   _preprocess_extern_pythona   s4    	c         C   s,   d |  k r( d d  l  } | j d  n  d  S(   Nt   "is   String literal found in cdef() or type source. String literals are ignored here, but you should remove them anyway because some character sequences confuse pre-parsing.(   t   warningst   warn(   R   R/   (    (    s+   lib/python2.7/site-packages/cffi/cparser.pyt   _warn_for_string_literal   s    c   	      C   s  t  j d |   }  i  } xK t j |   D]: } | j   \ } } | j d d  j   } | | | <q( Wt j d |   }  t j d k  r t	 |   }  n  t
 j d |   }  t j d |   }  t j d |   }  t |   }  t |   t j d |   }  t t j |    } x t t |   D] \ } } | j   } |  | d k r|  j d	 | | j    } | | k sqt  d
 |  |  | |  | d f }  q|  | | d !d	 k st  d |  |  | |  | d f }  qWt j d |   }  t j d |   }  |  j d	 d  | f S(   Nt    s   \
R   s   2.14s    volatile volatile const(s    volatile volatile const s   [__dotdotdotarray__]t   =s   ...s   %s,__dotdotdot%d__ %si   s   %s __dotdotdot%d__ %ss    __dotdotdotint__ s    __dotdotdotfloat__ s    __dotdotdot__ (   t
   _r_commentt   subt	   _r_definet   finditert   groupst   replacet   stripR   t   __version__R$   t   _r_stdcall2t   _r_stdcall1t   _r_cdeclR-   R1   t   _r_partial_arrayt   listt   _r_partial_enumt	   enumeratet   reversedR   R*   R   t   AssertionErrort   _r_int_dotdotdott   _r_float_dotdotdot(	   R   t   macrosR   t	   macronamet
   macrovaluet   matchest   numbert   pt   p2(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyt   _preprocess   s:    
c         C   sk  t  t  } | j d  | j d  | j d  | j d  | j d  t    } t } d } d } x t j |   D] } | | k r]| d k r | rZ| j |  | j |  t } qZq]| d k r t } d } q]| d k r | d 7} q]| d k r| d 8} q]| d k rM| rZ| d k rZ| j |  | j |  qZq]| j |  n  | } qx W| S(	   NR(   t   ,R   R   t   typedefi    R   i   (   t   setR   t   addt   Falset   _r_wordst   findallt   discardR   (   R   t   look_for_wordst
   words_usedt
   is_typedeft   parent   previous_wordt   word(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyt   _common_type_names   s>    		
t   Parserc           B   s  e  Z d    Z d   Z d   Z d   Z e e d e d  Z d   Z	 d   Z
 d   Z d   Z d	   Z d
   Z d   Z d   Z e d d  Z d   Z d d  Z d e d  Z d d  Z d   Z d e d  Z d   Z e d  Z d   Z d   Z d   Z d   Z RS(   c         C   sU   i  |  _  t   |  _ d |  _ t j   |  _ i  |  _ i  |  _ g  |  _	 d  |  _ d  S(   Ni    (   t   _declarationsRQ   t   _included_declarationst   _anonymous_countert   weakreft   WeakKeyDictionaryt   _structnode2typet   _optionst   _int_constantst   _recompleteR   t   _uses_new_feature(   t   self(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyt   __init__   s    					c         C   s  t  |  \ } } t |  } g  } xM t |  j  D]< } | j d  r4 | d } | j |  | j |  q4 q4 W| t |  7} g  } | j d  x | D] } | j d |  q W| j d  | j d t f  | j |  d j |  } t	 d  k	 rt	 j   n  zF y t   j |  }	 Wn) t j j k
 rS}
 |  j |
 |  n XWd  t	 d  k	 rqt	 j   n  X|	 | | f S(   Ns   typedef i   s*   # 1 "<cdef automatic initialization code>"s   typedef int %s;s@   typedef int __dotdotdotint__, __dotdotdotfloat__, __dotdotdot__;s   # 1 "%s"s   
(   RN   R]   t   sortedR_   R   R   RV   t   CDEF_SOURCE_STRINGR   t   lockR   t   acquireR   t   parseR   t   c_parsert
   ParseErrort   convert_pycparser_errort   release(   Ri   R   RG   t   ctnt	   typenamest   namet   csourcelinest   typenamet   fullcsourcet   astt   e(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyt   _parse	  s6    
 c         C   s   d  } t |  } t j d t f |  } | r t | j d  d  } | j   } d | k or t |  k n r | | d } q n  | S(   Ns	   %s:(\d+):i   i
   (	   R   t   strt   reR   Rl   t   intR   t
   splitlinesR   (   Ri   R{   R   t   linet   msgR   t   linenumRw   (    (    s+   lib/python2.7/site-packages/cffi/cparser.pyt   _convert_pycparser_error/  s    "c         C   sZ   |  j  | |  } t |  } | r= d | j   | f } n d | f } t |   d  S(   Ns   cannot parse "%s"
%ss   parse error
%s(   R   R}   R:   R   (   Ri   R{   R   R   R   (    (    s+   lib/python2.7/site-packages/cffi/cparser.pyRr   =  s    c         C   s   | r? | t  k r! t d   n  | r6 t d   n  d } n3 | rl | | d @rr t d | f   qr n d } |  j } z/ i | d 6| d 6| d 6|  _ |  j |  Wd  | |  _ Xd  S(	   NsB   'packed' should be False or True; use 'pack' to give another values$   cannot give both 'pack' and 'packed'i   s%   'pack' must be a power of two, not %ri    t   overridet   packedt	   dllexport(   R   t
   ValueErrorRe   t   _internal_parse(   Ri   R   R   R   t   packR   t   prev_options(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyRo   G  s$    		
c         C   s  |  j  |  \ } } } |  j |  t | j  } x- | D] } | j d k r; Pq; q; Wd sd t  d  } yd |  _ x| D]} | } t | t	 j
 j  r |  j |  q} t | t	 j
 j  r| j s t d |   n  d } t | j j t	 j
 j  r-| j j j d j d  r-|  j |  } n t | j t	 j
 j  rt | j j t	 j
 j  rt | j j j t	 j
 j  r| j j j j d j d  r|  j |  } n' |  j | j d | j d t \ } } |  j d	 | j | d
 | q} | j j d k rq} t d | j j |   q} WWn t k
 rl}	 t |	 j  d k rf|	 j | f |	 _ n    nL t k
 r}	 |  j |	 |  }
 |
 r|	 j d d |
 f |	 _ n    n Xd  S(   Nt   __dotdotdot__i    t   __cffi_extern_python_stops!   typedef does not declare any nameit   __dotdotdotRv   t   partial_length_oks   typedef t   qualst   PragmasB   unexpected <%s>: this construct is valid C but not valid in cdef()i   s   
    *** Err: %s(    R|   t   _process_macrost   itert   extRv   RD   R   t   _inside_extern_pythont
   isinstanceR   t   c_astt   Declt   _parse_declt   TypedefR   t   typet   IdentifierTypet   namesR   t   _get_unknown_typet   PtrDeclt   TypeDeclt   _get_unknown_ptr_typet   _get_type_and_qualsR   t   _declaret	   __class__t   __name__R   t   argsR   R   (   Ri   R   Rz   RG   t   iteratort   declt   current_declR   t   realtypeR{   R   (    (    s+   lib/python2.7/site-packages/cffi/cparser.pyR   _  sX    		! c         C   sM   | |  j  k r< |  j  | | k r& d  St d | f   n  | |  j  | <d  S(   Ns%   multiple declarations of constant: %s(   Rf   R   (   Ri   t   keyt   val(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyt   _add_constants  s    c         C   s   | j    j d  } | j d  } | r7 | d } n  | j d  rs | d k rs | j d  rs d | d } n  t | d  } | r | } n  |  j | |  |  j d | |  d  S(	   Nt   ult   -i   t   0t   0xt   0oi    s   macro (   t   lowert   rstripR   R   R   R   (   Ri   Rv   t   int_strt   negt   pyvalue(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyt   _add_integer_constant  s    
c         C   s   x | j    D]y \ } } | j   } t j |  rG |  j | |  q | d k rj |  j d | |  q t d | | | | f   q Wd  S(   Ns   ...s   macro s   only supports one of the following syntax:
  #define %s ...     (literally dot-dot-dot)
  #define %s NUMBER  (with NUMBER an integer constant, decimal/hex/octal)
got:
  #define %s %s(   t   itemsR:   t   _r_int_literalR   R   R   R   (   Ri   RG   R   t   value(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyR     s    c         C   s~   |  j  | |  } |  j j d  r- d } n6 |  j d k rE d } n |  j d k r] d } n d } |  j | | j |  d  S(   NR   s   dllexport_python t   __cffi_extern_python_starts   extern_python t!   __cffi_extern_python_plus_c_starts   extern_python_plus_c s	   function (   t   _get_type_pointerRe   t   getR   R   Rv   (   Ri   t   tpR   R   t   tag(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyt   _declare_function  s    			c         C   s  | j  } t | t j j  rj |  j | d | j \ } } t | t j  sT t	  |  j
 | | |  n_t | t j j  r |  j d |  nk t | t j j  r |  j d |  nC t | t j j  r |  j d |  n | j s t d |   n  | j r|  j | d t \ } } | j r@|  j
 | | |  q| j   rt | d  rt | j d  rt j | j j  r|  j | j | j j  q| j   r$t | j t j j  r$| j j d	 k r$t | j j d  r$t j | j j j  r$|  j | j d	 | j j j  q| t j k rT| j j d
  rT| j |  _ q|  j d k rrt d   n  | t j @r| j  r|  j! d | j | d | q|  j! d | j | d | n  d  S(   NRv   t   structt   uniont   enums'   construct does not declare any variableR   t   initR   R   t   __cffi_extern_python_R   s<   cannot declare constants or variables with 'extern "Python"'s	   constant R   s	   variable ("   R   R   R   R   t   FuncDeclR   Rv   R    t   RawFunctionTypeRD   R   t   Structt   _get_struct_union_enum_typet   Uniont   EnumR   R   t   is_raw_functiont   is_integer_typet   hasattrR   R   R   R   R   t   UnaryOpt   opt   exprt	   void_typeR   R   t   Q_CONSTt   is_array_typeR   (   Ri   R   t   nodeR   R   (    (    s+   lib/python2.7/site-packages/cffi/cparser.pyR     sP    				 c         C   s   |  j  |  d S(   Ni    (   t   parse_type_and_quals(   Ri   t   cdecl(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyt
   parse_type  s    c         C   s   |  j  d |  d  \ } } | s* t  | j d j j j d } t | t j j	  rr t
 d | j f   n  |  j | j  S(   Ns   void __dummy(
%s
);i   ii    s   unknown identifier '%s'(   R|   RD   R   R   R   t   paramsR   R   R   t   IDR   Rv   R   (   Ri   R   Rz   RG   t   exprnode(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyR     s    i    c         C   s   | |  j  k ri |  j  | \ } } | | k r> | | k r> d  S|  j j d  si t d | f   qi n  d | j   k s t  | | f |  j  | <| r |  j j |  n  d  S(   NR   sP   multiple declarations of %s (for interactive usage, try cdef(xx, override=True))R   (   R_   Re   R   R   t   splitRD   R`   RR   (   Ri   Rv   t   objt   includedR   t   prevobjt	   prevquals(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyR     s    c         C   s   d } t  | t j j t j j f  r d | j k rF | t j O} n  d | j k re | t j O} n  d | j k r | t j	 O} q n  | S(   Ni    t   constt   volatilet   restrict(
   R   R   R   R   R   R   R    R   t
   Q_VOLATILEt
   Q_RESTRICT(   Ri   R   R   (    (    s+   lib/python2.7/site-packages/cffi/cparser.pyt   _extract_quals  s    c         C   s   t  | t j  r | j   St  | t j  r | j j d  r | j d j   r | j d  k r | d  k	 r t j
 | | |  St j | |  S(   Nt   $i   (   R   R    R   t   as_function_pointert   StructOrUnionOrEnumRv   R   t   isdigitt	   forcenameR   t   NamedPointerTypet   PointerType(   Ri   R   R   t   declname(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyR      s    
%c         C   s}  t  | t j j  r t  | j t j j  r t | j j  d k r d | j j d |  j k r |  j d | j j d \ } } | |  j	 |  O} | | f St  | t j j
  r| j d  k r d  } n |  j | j d | } |  j | j d | \ } } t j | |  | f St  | t j j  rw|  j | j  \ } } |  j | | d | } |  j	 |  } | | f St  | t j j  r|  j	 |  } | j }	 t  |	 t j j  r1t |	 j  }
 |
 d d g k ri  } xE |
 r'|
 d } | d k r#| j | d  d | | <|
 d =qPqWg  } x> d D]6 } x- t | j | d   D] } | j |  qTWq5W|
 sd g }
 n  |
 d g k rd | k sd	 | k rg  }
 qn  | |
 }
 n  d j |
  } | d k rt j | f S| d k rt d | j j   n  t |  |  \ } } | | | Bf St  |	 t j j  re|  j d |	 |  } | | f St  |	 t j j  r|  j d |	 |  } | | f St  |	 t j j   r|  j d |	 |  } | | f Sn  t  | t j j!  r|  j" | |  d f St  | t j j  r/|  j d | | d t# d f St  | t j j  rc|  j d | | d t# d f St d | j j   d  S(   Ni   s   typedef i    R   R   t   signedt   chart   shortt   longt   unsignedR   R2   t   voidR   s   :%d: bad usage of "..."R   R   R   t   nesteds(   :%d: bad or unsupported type declaration(   R   R   R   R   (   R   R   R   ($   R   R   R   R   R   R   R   R   R_   R   t	   ArrayDeclt   dimR   t   _parse_constantR   R    t	   ArrayTypeR   R   R@   R   t   rangeR   R   R   R   t   coordR   R   R   R   R   R   R   t   _parse_function_typeR   (   Ri   t   typenodeRv   R   R   R   t   lengtht   itemtypet	   itemqualsR   R   t   prefixest   newnamest   prefixR"   t   identt   tp0t   quals0(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyR   )  s    !
	
		



c      	   C   s  t  t | j d g    } x[ t |  D]M \ } } t | d  s( t d | pR d | d t | d d  f   q( q( Wt |  d k o t | d	 j t	 j
 j  o t | d	 j j t	 j
 j  o | d	 j j j d
 g k } | r| j   | st d | pd   qn  g  | D]! } |  j |  j | j    ^ q} | rd| t j g k rdg  } n  |  j | j  \ }	 }
 d  } t | j d  r| j j d d d d g k rd } qn  t j t |  |	 | |  S(   NR   R   st   %s arg %d: unknown type '%s' (if you meant to use the old C syntax of giving untyped arguments, it is not supported)s   in expressioni   Rv   t   ?i    iR   s=   %s: a function with only '(...)' as argument is not correct CR   iR   R   t	   __stdcall(   R@   t   getattrR   RB   R   R   R   R   R   R   R   R   R   R   t   popt   _as_func_argR   R    R   R   R   R   t   tuple(   Ri   R   t   funcnameR   R"   t   argt   ellipsist   argdeclnodeR   t   resultR   t   abi(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyR     s6     
+	c         C   sI   t  | t j  r% t j | j |  St  | t j  rA | j   S| Sd  S(   N(   R   R    R   R   t   itemR   R   (   Ri   R   R   (    (    s+   lib/python2.7/site-packages/cffi/cparser.pyR    s
    
c         C   sZ  y |  j  | SWn t k
 r" n X| } | j } | d  k r| | d  k	 rW d | } n |  j d 7_ d |  j } d  } n1 | } d | | f } |  j j | d  \ } }	 | d  k r{| d k r t j | d  d  d   } ny | d k rt j	 | d  d  d   } nR | d k rF| d k r.t
 d	   n  |  j | | j  } n t d
 | f   | d  k	 r|  j | |  qn. | d k r| j d  k	 rt d |   n  | j s| j |  n  | j rd | j k r|  j d | j |  n  | |  j  | <| d k r| S| j d  k r$| S| j d  k	 rFt
 d |   n  g  }
 g  } g  } g  } x2| j D]'} t | j t j j  rd j | j j  d k r|  j | |  qhn  | j d  k rd } n |  j | j  } t |  _ |  j  | j d t! \ } } |  j r$|  j | |  n  t | t j  rR| j" rR|  j | |  n  |
 j# | j pdd  | j# |  | j# |  | j# |  qhWt$ |
  | _ t$ |  | _% t$ |  | _& t$ |  | _' | d g t( |  k rt | t j  r| j" rt d | f   qn  |  j) j d  | _* | j+ rVd | _+ |  j, j# |  n  | S(   Ns   $%si   s   $%ds   %s %sR   R   R   R   s!   Enums cannot be declared with ...s	   kind = %rs^   enum %s: the '{}' declaration should appear on the first time the enum is mentioned, not laterR   s   anonymous %ss"   duplicate declaration of struct %sR   iR   s#   %s: using both bitfields and '...;'R   i    (   NN(-   Rd   t   KeyErrorRv   R   Ra   R_   R   R    t
   StructTypet	   UnionTypeR   t   _build_enum_typet   valuesRD   R   R+   R   t   force_the_namet   declst   fldnamesR   R   R   R   R   R   R   t   _make_partialt   bitsizeR   RS   t   _partial_lengthR   R   t   partialR   R  t   fldtypest
   fldbitsizet   fldqualsR   Re   R   t	   completedRg   (   Ri   t   kindR   Rv   R   t
   force_namet   explicit_nameR   R   t   _R  R"  R#  R$  R   R  t   fqual(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyR     s    	
								c         C   s_   t  | t j  s( t d | f   n  | j   rR | rR t d | f   n  t | _ d  S(   Ns   %s cannot be partials   %s is partial but has no C name(   R   R    t   StructOrUnionR   t
   has_c_nameR+   R   R!  (   Ri   R   R   (    (    s+   lib/python2.7/site-packages/cffi/cparser.pyR  (  s
    c         C   s  t  | t j j  r}| j } d | d k o9 d k n r| j d  } y- | j d  rl t | d  St | d  SWnr t k
 r t	 |  d k r | j
   d d !d	 k r t | d
  S| j
   d d !d k r t | d  Sq n Xt d | f   q}| d d k rg| d d k rgt	 |  d k sYt	 |  d k rg| d d k rgt | d  St d | f   n  t  | t j j  r| j d k r|  j | j  St  | t j j  r| j d k r|  j | j  St  | t j j  r| j |  j k r|  j | j St  | t j j  rk| j d k rk| rRt |  _ d St d | j j   n  t  | t j j  r| j d k r|  j | j  |  j | j  St  | t j j  r| j d k r|  j | j  |  j | j  St d | j j   d  S(   NR   i    t   9t   uUlLi   i
   i   i   R   i   t   0bs   invalid constant %rt   'ii   i   s   \it   +R   t   __dotdotdotarray__s   ...sT   :%d: unsupported '[...]' here, cannot derive the actual array length in this contexts?   :%d: unsupported expression: expected a simple numeric constant(   R   R   R   t   ConstantR   R   R   R   R   R   R   R   t   ordR   R   R   R   R   Rv   Rf   R   R   R   R   R   t   BinaryOpt   leftt   right(   Ri   R   R   t   s(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyR   /  sZ    	  4	c   	      C   s  | d  k	 r t } g  } g  } d } x | j D] } t j | j  rR t } q. n  | j d  k	 rv |  j | j  } n  | j	 | j  | j	 |  |  j
 | j |  | d 7} q. Wt |  } t |  } t j | | |  } | | _ n t j | d d  } | S(   Ni    i   (    (    (   R   RS   t   enumeratorst   _r_enum_dotdotdotR   Rv   R   R   R   R   R   R  R    t   EnumTypeR!  (	   Ri   R(  R  R!  R9  t
   enumvaluest   nextenumvalueR   R   (    (    s+   lib/python2.7/site-packages/cffi/cparser.pyR  j  s*    c         C   s   xy | j  j   D]h \ } \ } } | j d  r7 q n  | j d d  d } | d k r |  j | | d
 t d | q q Wx- | j j   D] \ } } |  j | |  q Wd  S(   Ns   anonymous $enum_$R2   i   i    R   R   R   t	   anonymousRP   R   R   (   R   R   R   R>  RP   (   R_   R   R   R   R   R   Rf   R   (   Ri   t   otherRv   R   R   R&  t   kt   v(    (    s+   lib/python2.7/site-packages/cffi/cparser.pyt   include  s    "#c         C   s   | j  j  j } | d g k r. t j | j  S| d g k ro |  j d  k r_ d | j |  _ n  t j | j  S| d g k r |  j d  k r d | j |  _ n  t j | j  St	 d | j
 j   d  S(   NR   t   __dotdotdotint__s   'typedef int... %s't   __dotdotdotfloat__s   'typedef float... %s's*   :%d: unsupported usage of "..." in typedef(   R   R   R    t   unknown_typeRv   Rh   R   t   UnknownIntegerTypet   UnknownFloatTypeR   R   R   (   Ri   R   Ru   (    (    s+   lib/python2.7/site-packages/cffi/cparser.pyR     s    c         C   sE   | j  j  j  j d g k r+ t j | j  St d | j j   d  S(   NR   s*   :%d: unsupported usage of "..." in typedef(   R   R   R    t   unknown_ptr_typeRv   R   R   R   (   Ri   R   (    (    s+   lib/python2.7/site-packages/cffi/cparser.pyR     s    N(   R   t
   __module__Rj   R|   R   Rr   RS   R   Ro   R   R   R   R   R   R   R   R   R   R   R   R   R   R  R   R  R   R  RB  R   R   (    (    (    s+   lib/python2.7/site-packages/cffi/cparser.pyR^      s6   	
	&		
		6					2				^#	v	;		
	(   i   (1   R   R    t   commontypesR   R   t   errorR   R   R   R   t   ImportErrorRb   R~   t   syst   version_infot   threadt   _threadt   allocate_lockRm   R   R	   Rl   t   compilet   DOTALLt	   MULTILINER4   R6   RA   R:  R?   RT   R
   t
   IGNORECASER   R=   R<   R>   R)   R   RE   RF   R   R$   R-   R1   RN   R]   t   objectR^   (    (    (    s+   lib/python2.7/site-packages/cffi/cparser.pyt   <module>   sR   $
						*	2		:	(