
    #	h                        S SK Jr  S SKJrJr  S SKJrJr   S SK Jr	  SSKrSSKrSSKr \R                  S:  a  SSKrOSSKr\R"                  " 5       rS rS	r\R*                  " S
\R,                  \R.                  -  5      r\R*                  " S\R,                  \R.                  -  5      r\R*                  " S\R.                  5      r\R*                  " S5      r\R*                  " S5      r\R*                  " S5      r\R*                  " S5      rSq\R*                  " S\R@                  5      r!\R*                  " S5      r"\R*                  " S5      r#\R*                  " S5      r$\R*                  " S5      r%\R*                  " S5      r&\R*                  " S5      r'\R*                  " S5      r(S r)S r*S r+S r,S r-S r.S r/S  r0S! r1 " S" S#\25      r3g! \
 a    SSK	r	 GNf = f! \
 a    Sr GNf = f)$   )model)COMMON_TYPESresolve_common_type)FFIError	CDefError)
_pycparser    N)   c                      SS K n SS Kn g Nr	   )pycparser.yacctabpycparser.lextab)	pycparsers    >/var/www/html/env/lib/python3.13/site-packages/cffi/cparser.py%_workaround_for_static_import_findersr      s
         z<cdef source string>z/\*.*?\*/|//([^\n\\]|\\.)*?$z?^\s*#\s*define\s+([A-Za-z_][A-Za-z_0-9]*)\b((?:[^\n\\]|\\.)*?)$z^[ \t]*#[ \t]*(?:line|\d+)\b.*$z=\s*\.\.\.\s*[,}]|\.\.\.\s*\}z__dotdotdot\d+__$z\[\s*\.\.\.\s*\]z\w+|\Sz-?0?x?[0-9a-f]+[lu]*$z\b(__stdcall|WINAPI)\bz[(]\s*(__stdcall|WINAPI)\bz\b__cdecl\bz9\bextern\s*"(Python|Python\s*\+\s*C|C\s*\+\s*Python)"\s*.z'[*]\s*((const|volatile|restrict)\b\s*)+z3(\b(int|long|short|signed|unsigned|char)\s*)+\.\.\.z\b(double|float)\s*\.\.\.c                  F    [         c  [        R                  " 5       q [         $ N)_parser_cacher   CParser r   r   _get_parserr   2   s    !))+r   c                 x   / n [         R                  U 5      nU(       d  OUR                  U S UR                  5        5        UR                  S5        SnUR                  UR	                  5       5        UR                  5       nU R                  SU5      (       a  UR                  S5        US-  nSnUnU[        U 5      :  aF  X   nUS:X  a  US-  nO US:X  a  US:X  a  O)US-  nOUS;   a  US:X  a  OUS-  nU[        U 5      :  a  MF  XU U-   XS  -   n GM  UR                  U 5        SR                  U5      $ )N()*r	   r   z,;= )	_r_star_const_spacesearchappendstartgroupend
startswithlenjoin)csourcepartsmatchclosingendposlevelics           r   _workaround_for_old_pycparserr/   8   s9    E
#**73W^ekkm,-SS7U[[]#c6**LLw#~w#g,
ACx
cA:
eA:FA #g, #g-;3 6 
LL775>r   c                    / n [         R                  U 5      nU(       d  GO/UR                  5       S-
  nUR                  U S UR	                  5        5        SUR                  S5      ;   a  UR                  S5        OUR                  S5        X   S:X  af  U R                  SU5      nUS:  a  [        S5      eU R                  SUS-   U5      S:  a  [        S	5      eUR                  XS-   U 5        XS-   S  n O@U R                  S
U5      nUS:  a  [        S5      eUR                  XUS-    5        XS-   S  n UR                  S5        GMM  UR                  U 5        SR                  U5      $ )Nr   Cz(void __cffi_extern_python_plus_c_start; z!void __cffi_extern_python_start; {}r	   z!'extern "Python" {': no '}' foundz7cannot use { } inside a block 'extern "Python" { ... }';z'extern "Python": no ';' foundz  void __cffi_extern_python_stop;r   )
_r_extern_pythonr   r#   r    r!   r"   findr   NotImplementedErrorr&   )r'   r(   r)   r+   r*   	semicolons         r   _preprocess_extern_pythonr9   b   sk    E
 ''0q 	W^ekkm,-%++a. LLCDLL<=?c!ll3/G{ EFF||C!W5:) +H I ILL'23aij)G  S&1I1} BCCLL	!45kl+G78= B 
LL775>r   c                     SU ;  a  g U R                  5        HF  nSU;   d  M  UR                  5       R                  S5      (       a  M1  SS KnUR	                  S5          g    g )N"#r	   zString 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.)
splitlineslstripr$   warningswarn)r'   liner?   s      r   _warn_for_string_literalrB      sV    
'""$$;t{{}77<<MM 1 2  %r   c                 p    U R                   (       d%  SS KnUR                  SU R                  < S35        g g )Nr	   zGlobal variable 'z_' in cdef(): for consistency with C it should have a storage class specifier (usually 'extern'))storager?   r@   name)declr?   s     r   /_warn_for_non_extern_non_static_global_variablerG      s)    <<.2ii: 	; r   c                 F   ^ / mU4S jn[         R                  X5      n U T4$ )Nc                 b   > [        T5      nTR                  U R                  5       5        SU-  $ )Nz#line@%d)r%   r    r"   )mr-   line_directivess     r   replace(_remove_line_directives.<locals>.replace   s+     qwwy)A~r   _r_line_directivesub)r'   rL   rK   s     @r   _remove_line_directivesrQ      s,    
 O  ##G5GO##r   c                 :   ^ U4S jn[         R                  X 5      $ )Nc                    > U R                  5       nUR                  S5      (       d  [        S5      eT[        USS  5         $ )Nz#line@zBunexpected #line directive (should have been processed and removed   )r"   r$   AssertionErrorint)rJ   srK   s     r   rL   *_put_back_line_directives.<locals>.replace   sG    GGI||H%%  "K L Ls1QR5z**r   rN   )r'   rK   rL   s    ` r   _put_back_line_directivesrY      s    +   22r   c                 $   [        U 5      u  pS n[        R                  X 5      n 0 n[        R	                  U 5       H9  nUR                  5       u  pVUR                  SS5      R                  5       nXcU'   M;     [        R                  SU 5      n [        R                  S:  a  [        U 5      n [        R                  SU 5      n [        R                  SU 5      n [        R                  SU 5      n [        U 5      n [        U 5        [         R                  SU 5      n [#        [$        R	                  U 5      5      n['        [)        U5      5       Hs  u  pUR+                  5       n	X	   S	:X  a9  U R-                  S
XR/                  5       5      n
X:  d   eSU S U	 UX
S-   S  4-  n MV  X	U	S-    S
:X  d   eSU S U	 UX	S-   S  4-  n Mu     [0        R                  SU 5      n [2        R                  SU 5      n U R                  S
S5      n [5        X5      n X4$ )Nc                 L    SU R                  5       R                  S5      S-  -   $ )N 
)r"   count)rJ   s    r   replace_keeping_newlines-_preprocess.<locals>.replace_keeping_newlines   s!    QWWY__T*T111r   z\
r   z2.14z volatile volatile const(z volatile volatile const r\   z[__dotdotdotarray__]=...z%s,__dotdotdot%d__ %sr
   z%s __dotdotdot%d__ %sz __dotdotdotint__ z __dotdotdotfloat__ z __dotdotdot__ )rQ   
_r_commentrP   	_r_definefinditergroupsrL   stripr   __version__r/   _r_stdcall2_r_stdcall1_r_cdeclr9   rB   _r_partial_arraylist_r_partial_enum	enumeratereversedr!   r6   r#   _r_int_dotdotdot_r_float_dotdotdotrY   )r'   rK   r_   macrosr)   	macroname
macrovaluematchesnumberpp2s              r   _preprocessrz      s     7w?G2nn5?GF##G, %	''399;
&y - mmB(Gv%/8 oo97CGoo97CGll3(G (0G W% ""#97CG ?++G45G"8G#45KKM:eQ		4B6M6-!f18A1A AG QqS>U***-!f1811@ @G 6 ""#7AG $$%;WEG ooe%67G'AG?r   c                 l   [        [        5      nUR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        [        5       nSnSnSn[        R	                  U 5       H  nXa;   a  US:X  a,  U(       a$  UR                  U5        UR                  U5        SnOjUS:X  a  S	nSnO_US:X  a  US
-  nOSUS:X  a  US
-  nOGUS:X  a0  U(       a(  US:X  a"  UR                  U5        UR                  U5        OUR                  U5        UnM     U$ )Nr4   ,r   r   typedefFr	   r   Tr   )setr   add_r_wordsfindalldiscard)r'   look_for_words
words_used
is_typedefparenprevious_wordwords          r   _common_type_namesr      s)    &Nssssy!JJEM  )!s{&&}5"**=9!&J"!


%1*&&}5"**=9t$) ** r   c                       \ rS rSrS rS rS rS r  SS jrS r	S	 r
S
 rS rS rS rS rS rS S jrS rS!S jr  S"S jrS!S jrS rS#S jrS rS$S jrS rS rS rS rS rSrg)%Parseri'  c                     0 U l         [        5       U l        SU l        [        R
                  " 5       U l        0 U l        0 U l        / U l	        S U l
        g r   )_declarationsr~   _included_declarations_anonymous_counterweakrefWeakKeyDictionary_structnode2type_options_int_constants_recomplete_uses_new_feature)selfs    r   __init__Parser.__init__)  sL    &)e#"# ' 9 9 ; !%r   c                    [        U5      u  p[        U5      n/ n[        U R                  5       HB  nUR	                  S5      (       d  M  USS  nUR                  U5        UR                  U5        MD     U[        U5      -  n/ nUR                  S5        U H  nUR                  SU-  5        M     UR                  S5        UR                  S[        < S35        UR                  U5        UR                  S5        S	R                  U5      n[        b  [        R                  5          [        5       R                  U5      n	[        b  [        R#                  5         W	X!4$ ! [        R                  R                   a  n
U R!                  X5         S n
A
NSS n
A
ff = f! [        b  [        R#                  5         f f = f)
Ntypedef    z*# 1 "<cdef automatic initialization code>"ztypedef int %s;z@typedef int __dotdotdotint__, __dotdotdotfloat__, __dotdotdot__;z# 1 "r;   r   r]   )rz   r   sortedr   r$   r    r   CDEF_SOURCE_STRINGr&   lockacquirer   parser   c_parser
ParseErrorconvert_pycparser_errorrelease)r   r'   rs   ctn	typenamesrE   csourcelinestypenamefullcsourceastes              r   _parseParser._parse3  s   %g.
 !)	4--.Dz**ABx  &D!	 /
 	VC[ 	HI!H 1H <= " . 	/ 	*<>?G$Bii-LLN	-%%k2C F## !!,, 	5((44	5   s*   .E& &FFF" FF" "G c                    S n[        U5      n[        R                  " [        < S3U5      nU(       aL  [	        UR                  S5      S5      nUR                  5       nSUs=::  a  [        U5      ::  a  O  U$ XvS-
     nU$ )Nz:(\d+):r   
   )strrer)   r   rV   r"   r=   r%   )r   r   r'   rA   msgr)   linenumr   s           r   _convert_pycparser_errorParser._convert_pycparser_errorZ  su     !f);=sC%++a."-G"--/LG0s<00 $AI.r   c                     U R                  X5      n[        U5      nU(       a  SUR                  5       < SU< 3nOSU< 3n[        U5      e)Nzcannot parse "z"
zparse error
)r   r   rg   r   )r   r   r'   rA   r   s        r   r   Parser.convert_pycparser_errorh  sG    ,,Q8!f-1ZZ\3?C  (+,Cnr   Nc                    U(       a&  US:w  a  [        S5      eU(       a  [        S5      eSnO%U(       a  XDS-
  -  (       a  [        SU< 35      eOSnU R                  n UUUS.U l        U R                  U5        X`l        g ! X`l        f = f)NTzB'packed' should be False or True; use 'pack' to give another valuez$cannot give both 'pack' and 'packed'r   z#'pack' must be a power of two, not r	   )overridepacked	dllexport)
ValueErrorr   _internal_parse)r   r'   r   r   packr   prev_optionss          r   r   Parser.parser  s    ~  "@ A A !GHHDax  "   ! D}}	))1'+*35DM   )(MLMs    B Bc           	      b   U R                  U5      u  p#nU R                  U5        [        UR                  5      nU H  nUR                  S:X  d  M    O    eS n SU l        U GH  nUn[        U[        R                  R                  5      (       a  U R                  U5        MB  [        U[        R                  R                  5      (       Ga  UR                  (       d  [        SU5      eSn[        UR                  R                  [        R                  R                  5      (       aJ  UR                  R                  R                  S   R!                  S5      (       a  U R#                  U5      nGOA[        UR                  [        R                  R$                  5      (       a  [        UR                  R                  [        R                  R&                  5      (       a  [        UR                  R                  R                  [        R                  R                  5      (       aS  UR                  R                  R                  R                  S   R!                  S5      (       a  U R)                  U5      nO7U R+                  UR                  UR                  SSUR                  < S	3S
9u  pU R-                  SUR                  -   XS9  GMs  UR.                  R0                  S:X  a  SS Kn	U	R5                  S5        GM  [        SUR.                  R0                  -  U5      e   g ! [         a4  n
[7        U
R8                  5      S:X  a  U
R8                  U4-   U
l        e S n
A
f[:         a9  n
U R=                  X5      nU(       a  U
R8                  S   SU-  -   4U
l        e S n
A
ff = f)N__dotdotdot__r	   __cffi_extern_python_stopz!typedef does not declare any name__dotdotdotTz*(z *)0)rE   partial_length_oktypedef_exampler   qualsPragmaa  #pragma in cdef() are entirely ignored. They should be removed for now, otherwise your code might behave differently in a future version of CFFI if #pragma support gets added. Note that '#pragma pack' needs to be replaced with the 'packed' keyword argument to cdef().zBunexpected <%s>: this construct is valid C but not valid in cdef()r   z
    *** Err: %s)r   _process_macrositerextrE   _inside_extern_python
isinstancer   c_astDecl_parse_declTypedefr   typeIdentifierTypenamesr$   _get_unknown_typePtrDeclTypeDecl_get_unknown_ptr_type_get_type_and_quals_declare	__class____name__r?   r@   r%   argsr   r   )r   r'   r   rs   iteratorrF   current_declr   realtyper?   r   r   s               r   r   Parser._internal_parse  s   #{{73WV$ =DyyO+  1/	)DD& #dIOO$8$899$$T*ioo&=&=>>99'(K(,. .E"499>>9??3Q3QRR IINN004??NN#'#9#9$#?$TYY	0G0GHH$TYY^^Y__5M5MNN$TYY^^%8%8%.__%C%CE E))..--33B7BB=QQ#'#=#=d#C*.*B*B IIDII:>)),E +C +G MM*tyy"8(MP^^,,8#MM?@ $ %@$(NN$;$;%<=AC CE !J  	166{a</1 	//;C&&)&9C&??A		s%   KL/ /
N.9/M((N.54N))N.c                     XR                   ;   a#  U R                   U   U:X  a  g [        SU< 35      eX R                   U'   g )Nz#multiple declarations of constant: )r   r   )r   keyvals      r   _add_constantsParser._add_constants  sG    %%%""3'3.;>@B B#&C r   c                 h   UR                  5       R                  S5      nUR                  S5      nU(       a  USS  nUR                  S5      (       a$  US:w  a  UR                  S5      (       d  SUSS  -   n[        US5      nU(       a  U* nU R	                  X5        U R                  SU-   U5        g )	Nul-r   00x0or	   macro )lowerrstripr$   rV   r   r   )r   rE   int_strnegpyvalues        r   _add_integer_constantParser._add_integer_constant  s    --/((.  %abkGs##3**400WQR[(Ggq/hGD*how/r   c                    UR                  5        Hx  u  p#UR                  5       n[        R                  U5      (       a  U R	                  X#5        MB  US:X  a  U R                  SU-   U5        M_  [        SU< SU< SU< SU< 35      e   g )Nrb   r   z5only supports one of the following syntax:
  #define z+ ...     (literally dot-dot-dot)
  #define zM NUMBER  (with NUMBER an integer constant, decimal/hex/octal)
got:
  #define r\   )itemsrg   _r_int_literalr)   r   r   r   )r   rs   r   values       r   r   Parser._process_macros  st     ,,.JCKKME##E****36%hne4 Ce-. . )r   c                     U R                  X5      nU R                  R                  S5      (       a  SnO(U R                  S:X  a  SnOU R                  S:X  a  SnOSnU R	                  XCR
                  -   U5        g )Nr   zdllexport_python __cffi_extern_python_startzextern_python !__cffi_extern_python_plus_c_startzextern_python_plus_c z	function )_get_type_pointerr   getr   r   rE   )r   tpr   rF   tags        r   _declare_functionParser._declare_function  sm    ##B.==[))%C''+GG"C''+NN)CCcIIor*r   c                    UR                   n[        U[        R                  R                  5      (       aO  U R                  X!R                  S9u  p4[        U[        R                  5      (       d   eU R                  X4U5        g [        U[        R                  R                  5      (       a  U R                  SU5        O[        U[        R                  R                  5      (       a  U R                  SU5        OY[        U[        R                  R                  5      (       a  U R                  SU5        OUR                  (       d  [        SU5      eUR                  (       Ga  U R                  USS9u  p4UR                  (       a  U R                  X4U5        g UR!                  5       (       a  [#        US5      (       az  [#        UR$                  S	5      (       a_  [&        R)                  UR$                  R*                  5      (       a1  U R-                  UR                  UR$                  R*                  5        g UR!                  5       (       a  [        UR$                  [        R                  R.                  5      (       a  UR$                  R0                  S
:X  a  [#        UR$                  R2                  S	5      (       av  [&        R)                  UR$                  R2                  R*                  5      (       a>  U R-                  UR                  S
UR$                  R2                  R*                  -   5        g U[        R4                  L a2  UR                  R7                  S5      (       a  UR                  U l        g U R8                  S:w  a  [        S5      eU[        R:                  -  (       a/  UR<                  (       d  U R?                  SUR                  -   X4S9  g [A        U5        U R?                  SUR                  -   X4S9  g g )N)rE   structunionenumz'construct does not declare any variableTr   initr   r   __cffi_extern_python_r   z<cannot declare constants or variables with 'extern "Python"'z	constant r   z	variable )!r   r   r   r   FuncDeclr   rE   r   RawFunctionTyper  Struct_get_struct_union_enum_typeUnionEnumr   is_raw_functionis_integer_typehasattrr  r   r)   r   r   UnaryOpopexpr	void_typer$   r   Q_CONSTis_array_typer   rG   )r   rF   noder  r   s        r   r   Parser._parse_decl  s   yydIOO445500II0FIBb%"7"78888""2d3$	 6 677004@D)//"7"78800$?D)//"6"67700>YY I $& & yyy 44TGK 5 M	%%**2d;((**f--		733&,,TYY__==..tyy$))//J((**"499ioo.E.EFF		+		88&,,TYY^^-A-ABB..tyy/2TYY^^5I5I/IKEOO+ii**+BCC 26D.114OO'AB B -r7G7GkDII&=rOGMkDII&=rOA r   c                 *    U R                  U5      S   $ r   )parse_type_and_quals)r   cdecls     r   
parse_typeParser.parse_type0  s    ((/22r   c                 b   U R                  SU-  5      S S u  p#U(       a   eUR                  S   R                  R                  R                  S   n[        U[        R                  R                  5      (       a  [        SUR                  < S35      eU R                  UR                  5      $ )Nzvoid __dummy(
%s
);   r   r	   zunknown identifier '')r   r   r   r   paramsr   r   r   IDr   rE   r   )r   r   r   rs   exprnodes        r   r  Parser.parse_type_and_quals3  s    kk"9E"AB2AFz772;##((//2h	 2 233HII''66r   c                 J   XR                   ;   aK  U R                   U   u  pVXRL a  Xd:X  a  g U R                  R                  S5      (       d  [        SU< S35      eSUR	                  5       ;  d   eX$4U R                   U'   U(       a  U R
                  R                  U5        g g )Nr   zmultiple declarations of z5 (for interactive usage, try cdef(xx, override=True))r   )r   r   r  r   splitr   r   )r   rE   objincludedr   prevobj	prevqualss          r   r   Parser._declare;  s    %%%!%!3!3D!9G~)"4==$$Z006:=> > djjl222$'<4 ''++C0 r   c                 b   Sn[        U[        R                  R                  [        R                  R                  45      (       ai  SUR
                  ;   a  U[        R                  -  nSUR
                  ;   a  U[        R                  -  nSUR
                  ;   a  U[        R                  -  nU$ )Nr	   constvolatilerestrict)
r   r   r   r   r   r   r   r  
Q_VOLATILE
Q_RESTRICTr   r   r   s      r   _extract_qualsParser._extract_qualsI  s    dY__55&__446 7 7$**$&TZZ')))TZZ')))r   c                    [        U[        R                  5      (       a  UR                  5       $ [        U[        R                  5      (       ai  UR
                  R                  S5      (       aI  UR
                  SS  R                  5       (       a'  UR                  c  Ub  [        R                  " XU5      $ [        R                  " X5      $ )N$r   )r   r   r  as_function_pointerStructOrUnionOrEnumrE   r$   isdigit	forcenameNamedPointerTypePointerType)r   r   r   declnames       r   r   Parser._get_type_pointerU  s    dE1122++--tU6677		$$S))diim.C.C.E.E&8+?))$%@@  --r   c                 "
   [        U[        R                  R                  5      (       a  [        UR                  [        R                  R
                  5      (       a  [        UR                  R                  5      S:X  ak  SUR                  R                  S   -   U R                  ;   aA  U R                  SUR                  R                  S   -      u  pVX`R                  U5      -  nXV4$ [        U[        R                  R                  5      (       at  UR                  c  S nOU R                  UR                  US9nUb  US:X  a  SU< S3nSU-   nU R                  UR                  UUS	9u  pV[        R                  " XW5      U4$ [        U[        R                  R                   5      (       aA  U R                  UR                  5      u  pU R#                  XUS
9nU R                  U5      nXV4$ [        U[        R                  R                  5      (       Ga  U R                  U5      nUR                  n
[        U
[        R                  R
                  5      (       Ga  [%        U
R                  5      nUSS/:w  a  0 nU(       a0  US   nUS;   a  UR'                  US5      S-   X'   US	 OO	U(       a  M0  / nS H6  n[)        UR'                  US5      5       H  nUR+                  U5        M     M8     U(       d  S/nUS/:X  a  SU;   d  SU;   a  / nX-   nSR-                  U5      nUS:X  a  [        R.                  U4$ US:X  a"  [1        SUR2                  R4                  -  5      e[7        U U5      u  nnUUU-  4$ [        U
[        R                  R8                  5      (       a  U R;                  SX5      nXV4$ [        U
[        R                  R<                  5      (       a  U R;                  SX5      nXV4$ [        U
[        R                  R>                  5      (       a  U R;                  SX5      nXV4$ [        U[        R                  R@                  5      (       a  U RC                  X5      S4$ [        U[        R                  R8                  5      (       a  U R;                  SXSS9S4$ [        U[        R                  R<                  5      (       a  U R;                  SXSS9S4$ [1        SUR2                  R4                  -  5      e)Nr   r   r	   r
  rb   z_cffi_array_len(r   r   )r   r   )rB  signedchar)shortlongrE  unsigned)rI  rG  rH  rV   rG  rH  r\   voidr   z:%d: bad usage of "..."r  r  r	  T)nestedz(:%d: bad or unsupported type declaration)"r   r   r   r   r   r   r%   r   r   r8  	ArrayDecldim_parse_constantr   r   	ArrayTyper   r   rm   r  ranger    r&   r  r   coordrA   r   r  r  r  r  r  _parse_function_type)r   typenoderE   r   r   r  r   lengthitemtype	itemqualsr   r   prefixesnewnamesprefixr-   identtp0quals0s                      r   r   Parser._get_type_and_quals^  s    x!9!9::x}}ioo&D&DEE##$)(----a00T5G5GG**:8K8KA8N+NOIB((22E9h	 9 9::||#--LL4E . G *U?6EGF"%"7002C0? 1 AIB ??2.55h	 7 788"&":":8=="IH''d'KB''1E9h	 8 899''1E==D$	 > >?? TZZ(Xv..!H$Qx#JJ-5\\$-BQ-FHN %a!  %  "H"?!&x||FA'>!?A$OOF3 "@ #@ !!&'"h.&H2D$&E$,EF? ??E11O+"#<$NN//$0 1 11$>VUV^,,$	 6 67755hKy $	 5 56655gtJy $	 4 45555fdIy h	 8 899,,X<a?? h	 6 67733Hh;? 4 ABCD Dh	 5 56633GX;? 4 ABCD D A##$ % 	%r   c                 `   [        [        UR                  S/ 5      5      n[        U5       H>  u  pE[	        US5      (       a  M  [        SU=(       d    SUS-   [        USS5      4-  5      e   [        U5      S:  =(       a    [        US	   R                  [        R                  R                  5      =(       ai    [        US	   R                  R                  [        R                  R                  5      =(       a'    US	   R                  R                  R                  S
/:H  nU(       a.  UR                  5         U(       d  [        SU=(       d    S-  5      eU Vs/ s H+  nU R                  " U R!                  UR                  5      6 PM-     nnU(       d  U["        R$                  /:X  a  / nU R!                  UR                  5      u  pS n[	        UR                  S5      (       a!  UR                  R&                  SS  / SQ:X  a  Sn["        R(                  " [+        U5      XU5      $ s  snf )Nr&  r   zt%s arg %d: unknown type '%s' (if you meant to use the old C syntax of giving untyped arguments, it is not supported)zin expressionr   rE   ?r	   r   r   z=%s: a function with only '(...)' as argument is not correct Cr   )r3  r3  r2  	__stdcall)rm   getattrr   ro   r  r   r%   r   r   r   r   r   r   r   pop_as_func_argr   r   r  r   r  tuple)r   rS  funcnamer&  r-   argellipsisargdeclnoder   resultr   abis               r   rR  Parser._parse_function_type  s   ghmmXr:;'FA3'' !?  2?AEsFC02!2 3 3 ( K!O <vbz	(@(@A<vbz++ 557< 2JOO  &&?*;; 	 JJL(+3+FHI I $*+#)K !!4#;#;K<L<L#MN#) 	 +DU__$55D00? 8=='**}}""23'+LL!$$U4[&CHH+s   2H+c                     [        U[        R                  5      (       a!  [        R                  " UR                  U5      $ [        U[        R
                  5      (       a  UR                  5       $ U$ r   )r   r   rO  rA  itemr  r<  r7  s      r   rd  Parser._as_func_arg  sQ    dEOO,,$$TYY66e3344++--Kr   c                     U R                   U   $ ! [         a     Of = fUnUR                  nUc0  Ub  SU-  nO$U =R                  S-  sl        SU R                  -  nS nO)UnU< SU< 3nU R                  R                  US5      u  pyUc  US:X  a  [        R                  " US S S 5      nObUS:X  a  [        R                  " US S S 5      nOBUS:X  a-  US	:X  a  [        S
5      eU R                  XbR                  5      nO[        SU< 35      eUb  U R                  WU5        O!US:X  a  UR                  b  [        SU-  5      eUR                  (       d  UR!                  U5        UR                  (       a/  SUR                  ;   a  U R                  SUR                  -  U5        XpR                   U'   US:X  a  U$ UR"                  c  U$ UR$                  b  [        SU-  5      e/ n
/ n/ n/ nUR"                   GH|  n['        UR(                  [*        R,                  R.                  5      (       a<  SR1                  UR(                  R2                  5      S	:X  a  U R5                  Xt5        Ms  UR6                  c  SnOU R9                  UR6                  5      nSU l        U R=                  UR(                  SS9u  nnU R:                  (       a  U R5                  Xt5        ['        U[        R                  5      (       a"  UR>                  (       a  U R5                  Xt5        U
RA                  UR                  =(       d    S5        URA                  U5        URA                  U5        URA                  U5        GM     [C        U
5      Ul        [C        U5      Ul"        [C        U5      Ul#        [C        U5      Ul$        US/[K        U5      -  :w  a?  ['        U[        R                  5      (       a   UR>                  (       a  [        U< S35      eU RL                  R                  S5      Ul'        URP                  (       a"  SUl(        U RR                  RA                  U5        U$ )Nz$%sr   z$%dr\   )NNr  r  r	  r   z!Enums cannot be declared with ...zkind = z^enum %s: the '{}' declaration should appear on the first time the enum is mentioned, not laterr;  zanonymous %sz"duplicate declaration of struct %sr   r   FTr
  z!: using both bitfields and '...;'r   r	   )*r   KeyErrorrE   r   r   r  r   
StructType	UnionTyper   _build_enum_typevaluesrU   r   r7   r?  force_the_namedeclsfldnamesr   r   r   r   r   r&   r   _make_partialbitsizerN  _partial_lengthr   partialr    re  fldtypes
fldbitsizefldqualsr%   r   r   	completedr   )r   kindr   rE   rK  
force_nameexplicit_namer  r   _rx  r}  r~  r  rF   rz  fquals                    r   r  "Parser._get_struct_union_enum_type  s   	((.. 		 
yy < % %
 2''1,' %(?(? ?B M!4(C&&**3=EB:x%%mT4F__]D$E O3#$GHH**=++F$D%:;;c2&v~$++"9)<>KLM M ||j)<<C277NMM.2<<7<&(d# 6>I
 ::I;;"@4GHH
JJD499ioo&D&DEEGGDIIOO,? ""2.||#..t||<#(D 22499EI 3 KKD%##""2.$ 0 011dll""2.OODIIO,OOD!g&OOE"- . HoHoj)Ho"J//"e..//BJJ)-/+2 3 3MM%%h/	<<BL##B'	s    
c                     [        U[        R                  5      (       d  [        U< S35      eUR	                  5       (       d  U(       d  [        U< S35      eSUl        g )Nz cannot be partialz is partial but has no C nameT)r   r   StructOrUnionr   
has_c_namer7   r|  )r   r  rK  s      r   ry  Parser._make_partialh  sE    "e1122b:;;}}v%"&NOO
r   c                 ^   [        U[        R                  R                  5      (       a  UR                  nSUS   s=::  a  S::  aC  O  O@UR                  S5      n UR                  S5      (       a  [        US5      $ [        US5      $ US   S:X  a>  US   S:X  a5  [        U5      S:X  d  [        U5      S:X  a  US   S:X  a  [        US   5      $ [        SU< 35      e[        U[        R                  R                  5      (       a+  UR                  S:X  a  U R                  UR                   5      $ [        U[        R                  R                  5      (       a,  UR                  S:X  a  U R                  UR                   5      * $ [        U[        R                  R"                  5      (       a3  UR$                  U R&                  ;   a  U R&                  UR$                     $ [        U[        R                  R"                  5      (       aA  UR$                  S:X  a1  U(       a  SU l        g[+        SUR,                  R.                  -  5      e[        U[        R                  R0                  5      (       Ga  U R                  UR2                  5      nU R                  UR4                  5      nUR                  S:X  a  XE-   $ UR                  S:X  a  XE-
  $ UR                  S:X  a  XE-  $ UR                  S:X  a  U R7                  XE5      $ UR                  S:X  a  X@R7                  XE5      U-  -
  $ UR                  S:X  a  XE-  $ UR                  S:X  a  XE-	  $ UR                  S:X  a  XE-  $ UR                  S:X  a  XE-  $ UR                  S :X  a  XE-  $ [+        S!UR,                  R.                  -  5      e! [         a\    [        U5      S:  aJ  UR                  5       SS S	:X  a  [        US
5      s $ UR                  5       SS S:X  a  [        US5      s $  Of = f[        SU< 35      e)"Nr   r	   9uUlLr   r   r   r$  r      0bzinvalid constant r%  r   r
      \+r   __dotdotdotarray__Trb   zT:%d: unsupported '[...]' here, cannot derive the actual array length in this contextr   /%z<<z>>&|^z?:%d: unsupported expression: expected a simple numeric constant)r   r   r   Constantr   r   r$   rV   r   r%   r   r   ordr  r  rN  r  r'  rE   r   r{  r   rQ  rA   BinaryOpleftright_c_div)r   r(  r   rW   r  r  s         r   rN  Parser._parse_constanto  s}    h	 8 899Aad!c!HHV$
-||C(("1ay("1bz) 12#FaKCFaKAaDDL1R5z! <==x!8!899s"''66x!8!899s"((777x!3!344!4!44&&x}}55x!3!344MM%99 '+$ E%^^001 2 2 h	 8 899''6D((8E{{c!|##|##|##{{4//#kk$6>>>$}$$}$#|##|##|# 13;>>3F3FG H 	Hu " -1vz779Qq>T1#&q":-WWYq^t3#&q!9,-   <==s   !N7 =N7 7<P5#PPc                 H    X-  nUS:  US:  -  (       a  X-  S:w  a  US-  nU$ )Nr	   r   r   )r   abrj  s       r   r  Parser._c_div  s/    Uq1uAEa<aKFr   c                    Ub  Sn/ n/ nSnUR                    H  n[        R                  UR                  5      (       a  SnM+  UR                  b  U R                  UR                  5      nUR                  UR                  5        UR                  U5        U R                  UR                  U5        US-  nM     [        U5      n[        U5      n[        R                  " XU5      nX8l        U$ [        R                  " USS5      nU$ )NFr	   Tr   r   )enumerators_r_enum_dotdotdotr)   rE   r   rN  r    r   re  r   EnumTyper|  )	r   r  rw  r|  r  
enumvaluesnextenumvaluer	  r  s	            r   rt  Parser._build_enum_type  s    GKJM))$**49955"G::)$($8$8$DM""499-!!-0##DII}=" *  ,Kz*JJGB J 	 r26B	r   c                 D   UR                   R                  5        HN  u  nu  p4UR                  S5      (       a  M   UR                  SS5      S   nUS;   d  M=  U R	                  X#SUS9  MP     UR
                  R                  5        H  u  pgU R                  Xg5        M     g )Nzanonymous $enum_$r\   r   r	   )r  r  r	  	anonymousr}   T)r-  r   )r   r   r$   r+  r   r   r   )r   otherrE   r  r   r  kvs           r   includeParser.include  s    !&!4!4!:!:!<D+2233::c1%a(DJJdUC "= ((..0DA% 1r   c                    UR                   R                   R                  nUS/:X  a   [        R                  " UR                  5      $ US/:X  aA  U R
                  c  SUR                  -  U l        [        R                  " UR                  5      $ US/:X  aA  U R
                  c  SUR                  -  U l        [        R                  " UR                  5      $ [        SUR                  R                  -  5      e)Nr   __dotdotdotint__z'typedef int... %s'__dotdotdotfloat__z'typedef float... %s'*:%d: unsupported usage of "..." in typedef)r   r   r   unknown_typerE   r   UnknownIntegerTypeUnknownFloatTyper   rQ  rA   )r   rF   r   s      r   r   Parser._get_unknown_type  s    IINN((	))%%dii00+,,%%-)>)J&++DII66-..%%-)@499)L&))$))44C) * 	*r   c                     UR                   R                   R                   R                  S/:X  a   [        R                  " UR                  5      $ [        SUR                  R                  -  5      e)Nr   r  )r   r   r   unknown_ptr_typerE   r   rQ  rA   )r   rF   s     r   r   Parser._get_unknown_ptr_type  sV    99>>$$(99))$))44C) * 	*r   )
r   r   r   r   r   r   r{  r   r   r   )FFNF)Fr	   r   )NFN)NF)F) r   
__module____qualname____firstlineno__r   r   r   r   r   r   r   r   r   r  r   r!  r  r   r8  r   r   rR  rd  r  ry  rN  r  rt  r  r   r   __static_attributes__r   r   r   r   r   '  s    &%$N AE#)0=~'0."
+1Pf371
. JO,0g%R!IFtlGHR0&*&*r   r   )4r   r   commontypesr   r   errorr   r   r   r   ImportErrorr   r   sysversion_infothread_threadallocate_lockr   r   r   compileDOTALL	MULTILINErc   rd   rO   rn   r  rl   r   r   
IGNORECASEr   rj   ri   rk   r5   r   rq   rr   r   r/   r9   rB   rG   rQ   rY   rz   r   objectr   r   r   r   <module>r     s    : &)  
$   "D , ZZ7		BLL02
ZZ 2		BLL02	 JJA2<<P **=>JJ34 ::12 ::i 4bmmDjj23jj67::n%:: O P jj.0 :: ( ) ZZ <= (T0d
;$3@D%PP*V P*C	    Ds"   G *G( 
G%$G%(G43G4