
    Yh                        d dl mZ d dlmZmZ d dlmZmZ 	 d dl mZ	 ddlZddlZddlZ	 ej                  dk  rddlZnddlZ ej"                         Zd Zd	Z ej*                  d
ej,                  ej.                  z        Z ej*                  dej,                  ej.                  z        Z ej*                  dej.                        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 Z/d  Z0d! Z1 G d" d#e2      Z3y# e
$ r ddl	Z	Y w xY w# e
$ r dZY w xY w)$   )model)COMMON_TYPESresolve_common_type)FFIError	CDefError)
_pycparser    N)   c                      dd l } dd l} y Nr	   )pycparser.yacctabpycparser.lextab)	pycparsers    ]/var/www/django-portfolio.reubendavern.link/venv/lib/python3.12/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                  B    t         t        j                         a t         S N)_parser_cacher   CParser r   r   _get_parserr   2   s    !))+r   c                 V   g }	 t         j                  |       }|sn|j                  | d |j                                 |j                  d       d}|j                  |j	                                |j                         }| j                  d|      r|j                  d       |dz  }d}|}|t        |       k  r?| |   }|dk(  r|dz  }n|dk(  r|dk(  rn$|dz  }n
|dv r|dk(  rn|dz  }|t        |       k  r?| || |z   | |d  z   } |j                  |        dj                  |      S )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   s<    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                    g }	 t         j                  |       }|sn-|j                         dz
  }|j                  | d |j	                                 d|j                  d      v r|j                  d       n|j                  d       | |   dk(  rf| j                  d|      }|dk  rt        d      | j                  d|dz   |      dk\  rt        d	      |j                  | |dz   |        | |dz   d  } nA| j                  d
|      }|dk  rt        d      |j                  | ||dz           | |dz   d  } |j                  d       F|j                  |        dj                  |      S )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   su    E
 ''0q 	W^ekkm,-%++a. LLCDLL<=6?c!ll3/G{ EFF||C!W5:) +H I ILL'23gaij)G  S&1I1} BCCLL	!45ikl+G78= B 
LL775>r   c                     d| vry | j                         D ]=  }d|v s|j                         j                  d      r(dd l}|j	                  d        y  y )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      sX    
'""$ $;t{{}77<MM 1 2 r   c                 d    | j                   s$dd l}|j                  d| j                  d       y y )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    g fd}t         j                  ||       } | fS )Nc                 b    t              }j                  | j                                d|z  S )Nz#line@%d)r%   r    r"   )mr-   line_directivess     r   replacez(_remove_line_directives.<locals>.replace   s+     qwwy)A~r   _r_line_directivesub)r'   rL   rK   s     @r   _remove_line_directivesrP      s.    
 O  ##GW5GO##r   c                 :    fd}t         j                  ||       S )Nc                 ~    | j                         }|j                  d      st        d      t        |dd           S )Nz#line@zBunexpected #line directive (should have been processed and removed   )r"   r$   AssertionErrorint)rJ   srK   s     r   rL   z*_put_back_line_directives.<locals>.replace   sD    GGI||H%  "K L Ls1QR5z**r   rM   )r'   rK   rL   s    ` r   _put_back_line_directivesrW      s    +   '22r   c                 ,   t        |       \  } }d }t        j                  ||       } i }t        j	                  |       D ]:  }|j                         \  }}|j                  dd      j                         }|||<   < t        j                  d|       } t        j                  dk  rt        |       } t        j                  d|       } t        j                  d|       } t        j                  d|       } t        |       } t        |        t         j                  d|       } t#        t$        j	                  |             }t'        t)        |            D ]u  \  }}|j+                         }	| |	   d	k(  r:| j-                  d
|	|j/                               }
|
|	kD  sJ d| d |	 || |
dz   d  fz  } X| |	|	dz    d
k(  sJ d| d |	 || |	dz   d  fz  } w t0        j                  d|       } t2        j                  d|       } | j                  d
d      } t5        | |      } | |fS )Nc                 L    d| j                         j                  d      dz  z   S )N 
)r"   count)rJ   s    r   replace_keeping_newlinesz-_preprocess.<locals>.replace_keeping_newlines   s!    QWWY__T*T111r   z\
r   z2.14z volatile volatile const(z volatile volatile const rZ   z[__dotdotdotarray__]=...z%s,__dotdotdot%d__ %sr
   z%s __dotdotdot%d__ %sz __dotdotdotint__ z __dotdotdotfloat__ z __dotdotdot__ )rP   
_r_commentrO   	_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_dotdotdotrW   )r'   rK   r]   macrosr)   	macroname
macrovaluematchesnumberpp2s              r   _preprocessrw      s1     7w?G_2nn5w?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1:eQ		4B6M6-!f18A1A AG 1QqS>U***-!f1811@ @G
@ ""#7AG $$%;WEG ooe%67G'AGF?r   c                 F   t        t              }|j                  d       |j                  d       |j                  d       |j                  d       |j                  d       t               }d}d}d}t        j	                  |       D ]  }||v r|dk(  r'|r|j                  |       |j                  |       d}n`|dk(  rd	}d}nV|dk(  r|d
z  }nK|dk(  r|d
z  }n@|dk(  r*|r9|dk(  r4|j                  |       |j                  |       n|j                  |       |} |S )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                       e Zd Zd Zd Zd Zd Z	 	 ddZd Zd Z	d	 Z
d
 Zd Zd Zd Zd ZddZd ZddZ	 	 d dZddZd Zd!dZd Zd"dZd Zd Zd Zd Zd Zy)#Parserc                     i | _         t               | _        d| _        t	        j
                         | _        i | _        i | _        g | _	        d | _
        y r   )_declarationsr{   _included_declarations_anonymous_counterweakrefWeakKeyDictionary_structnode2type_options_int_constants_recomplete_uses_new_feature)selfs    r   __init__zParser.__init__)  sL    &)e#"# ' 9 9 ; !%r   c                 p   t        |      \  }}t        |      }g }t        | j                        D ];  }|j	                  d      s|dd  }|j                  |       |j                  |       = |t        |      z  }g }|j                  d       |D ]  }|j                  d|z          |j                  d       |j                  dt        d       |j                  |       |j                  d       d	j                  |      }t        t        j                          	 t               j                  |      }	t        t        j#                          	 	||fS # t        j                  j                  $ r}
| j!                  |
|       Y d }
~
Td }
~
ww xY w# t        t        j#                          w w xY w)
Ntypedef    z*# 1 "<cdef automatic initialization code>"ztypedef int %s;z@typedef int __dotdotdotint__, __dotdotdotfloat__, __dotdotdot__;z# 1 "r;   r   r[   )rw   r   sortedr   r$   r    r   CDEF_SOURCE_STRINGr&   lockacquirer   parser   c_parser
ParseErrorconvert_pycparser_errorrelease)r   r'   rp   ctn	typenamesrE   csourcelinestypenamefullcsourceastes              r   _parsezParser._parse3  s   %g.
 !)	4--. 	"Dz*ABx  &D!		"
 	VC[ 	HI! 	>H 1H <=	> . 	/ 	*<>?G$Bii-LLN	-%%k2C FG## !!,, 	5((G44	5   s*   #E F9FF FF F5c                     d }t        |      }t        j                  t        d|      }|rKt	        |j                  d      d      }|j                         }d|cxk  rt        |      k  rn |S ||dz
     }|S )Nz:(\d+):r   
   )strrer)   r   rU   r"   r=   r%   )r   r   r'   rA   msgr)   linenumr   s           r   _convert_pycparser_errorzParser._convert_pycparser_errorZ  sw     !f);=sC%++a."-G"--/LG0s<00 $GAI.r   c                     | j                  ||      }t        |      }|r!d|j                         d|}t        |      d|}t        |      )Nzcannot parse "z"
zparse error
)r   r   rd   r   )r   r   r'   rA   r   s        r   r   zParser.convert_pycparser_errorh  sU    ,,Q8!f-1ZZ\3?C n	  (+,Cnr   Nc                     |r |dk7  rt        d      |rt        d      d}n|r||dz
  z  rt        d|      d}| j                  }	 |||d| _        | j                  |       || _        y # || _        w xY w)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   zParser.parser  s    ~  "@ A A !GHHDtax  "   D}}	))1'+*35DM   )(DMLDMs   
A. .	A7c           	         | j                  |      \  }}}| j                  |       t        |j                        }|D ]  }|j                  dk(  s n J d }	 d| _        |D ]  }|}t        |t        j                  j                        r| j                  |       <t        |t        j                  j                        r|j                  st        d|      d}t        |j                  j                  t        j                  j                        rE|j                  j                  j                  d   j!                  d      r| j#                  |      }n0t        |j                  t        j                  j$                        rt        |j                  j                  t        j                  j&                        rt        |j                  j                  j                  t        j                  j                        rN|j                  j                  j                  j                  d   j!                  d      r| j)                  |      }n:| j+                  |j                  |j                  dd|j                  d	
      \  }}| j-                  d|j                  z   ||       K|j.                  j0                  dk(  rdd l}	|	j5                  d       {t        d|j.                  j0                  z  |       y # t        $ r3}
t7        |
j8                        dk(  r|
j8                  |fz   |
_         d }
~
wt:        $ r5}
| j=                  |
|      }|r|
j8                  d   d|z  z   f|
_         d }
~
ww xY w)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   rp   iteratorrF   current_declr   realtyper?   r   r   s               r   r   zParser._internal_parse  s   #{{73VWV$ = 	DyyO+	 1/	)DD&  $C#dIOO$8$89$$T*ioo&=&=>99'(K(,. .E"499>>9??3Q3QR IINN004??N#'#9#9$#?$TYY	0G0GH$TYY^^Y__5M5MN$TYY^^%8%8%.__%C%CE))..--33B7BB=Q#'#=#=d#C*.*B*B IIDII:>)),E +C +G% MM*tyy"8(%MP^^,,8#MM?@ $ %@$(NN$;$;%<=AC CE$CJ  	166{a</1 	//7;C&&)&9C&??A		s%   J(L 	M:.L99M:0M55M:c                     || j                   v r!| j                   |   |k(  ry t        d|      || j                   |<   y )Nz#multiple declarations of constant: )r   r   )r   keyvals      r   _add_constantszParser._add_constants  sK    $%%%""3'3.;>@B B#&C r   c                 @   |j                         j                  d      }|j                  d      }|r|dd  }|j                  d      r|dk7  r|j                  d      sd|dd  z   }t        |d      }|r| }| j	                  ||       | j                  d|z   |       y )	Nul-r   00x0or	   macro )lowerrstripr$   rU   r   r   )r   rE   int_strnegpyvalues        r   _add_integer_constantzParser._add_integer_constant  s    --/((.  %abkGs#3**40WQR[(Ggq/hGD'*how/r   c                    |j                         D ]n  \  }}|j                         }t        j                  |      r| j	                  ||       >|dk(  r| j                  d|z   |       Yt        d|d|d|d|       y )Nr_   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 rZ   )itemsrd   _r_int_literalr)   r   r   r   )r   rp   r   values       r   r   zParser._process_macros  sz     ,,. 	.JCKKME##E***36%hne4 Ce-. .	.r   c                     | j                  ||      }| j                  j                  d      rd}n&| j                  dk(  rd}n| j                  dk(  rd}nd}| j	                  ||j
                  z   |       y )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_functionzParser._declare_function  sn    ##B.==[)%C''+GG"C''+NN)CCcDIIor*r   c                 z   |j                   }t        |t        j                  j                        rP| j                  ||j                        \  }}t        |t        j                        sJ | j                  |||       y t        |t        j                  j                        r| j                  d|       nt        |t        j                  j                        r| j                  d|       nOt        |t        j                  j                        r| j                  d|       n|j                  st        d|      |j                  rq| j                  |d      \  }}|j                  r| j                  |||       y |j!                         r|t#        |d      rpt#        |j$                  d	      rZt&        j)                  |j$                  j*                        r1| j-                  |j                  |j$                  j*                         y |j!                         rt        |j$                  t        j                  j.                        r|j$                  j0                  d
k(  rt#        |j$                  j2                  d	      rqt&        j)                  |j$                  j2                  j*                        r>| j-                  |j                  d
|j$                  j2                  j*                  z          y |t        j4                  u r-|j                  j7                  d      r|j                  | _        y | j8                  dk7  rt        d      |t        j:                  z  r.|j<                  s"| j?                  d|j                  z   ||       y tA        |       | j?                  d|j                  z   ||       y y )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   zParser._parse_decl  s   yydIOO44500DII0FIBb%"7"7888""2ud3$	 6 67004@D)//"7"7800$?D)//"6"6700>YY I $& & yy 44TGK 5 M	E%%**2ud;((*f-		73&,,TYY__=..tyy$))//J((*"499ioo.E.EF		+		8&,,TYY^^-A-AB..tyy/2TYY^^5I5I/IKEOO+ii**+BC 26D.114OO'AB B -r7G7GkDII&=rOGMkDII&=rOA r   c                 *    | j                  |      d   S r   )parse_type_and_quals)r   cdecls     r   
parse_typezParser.parse_type0  s    ((/22r   c                 N   | j                  d|z        d d \  }}|rJ |j                  d   j                  j                  j                  d   }t        |t        j                  j                        rt        d|j                  d      | j                  |j                        S )Nzvoid __dummy(
%s
);   r   r	   zunknown identifier '')r   r   r   r   paramsr   r   r   IDr   rE   r   )r   r  r   rp   exprnodes        r   r  zParser.parse_type_and_quals3  s    kk"9E"AB2AFVz772;##((//2h	 2 23HII''66r   c                 2   || j                   v rF| j                   |   \  }}||u r||k(  ry | j                  j                  d      st        d|d      d|j	                         vsJ ||f| j                   |<   |r| j
                  j                  |       y y )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   zParser._declare;  s    4%%%!%!3!3D!9GY#~)u"4==$$Z06:=> > djjl222$'<4 ''++C0 r   c                 L   d}t        |t        j                  j                  t        j                  j                  f      rcd|j
                  v r|t        j                  z  }d|j
                  v r|t        j                  z  }d|j
                  v r|t        j                  z  }|S )Nr	   constvolatilerestrict)
r   r   r   r   r   r   r   r  
Q_VOLATILE
Q_RESTRICTr   r   r   s      r   _extract_qualszParser._extract_qualsI  s    dY__55&__446 7$**$&TZZ')))TZZ')))r   c                 p   t        |t        j                        r|j                         S t        |t        j                        r]|j
                  j                  d      rB|j
                  dd  j                         r%|j                  |t        j                  |||      S t        j                  ||      S )N$r   )r   r   r  as_function_pointerStructOrUnionOrEnumrE   r$   isdigit	forcenameNamedPointerTypePointerType)r   r   r   declnames       r   r   zParser._get_type_pointerU  s    dE112++--tU667		$$S)diim.C.C.E&8+?))$%@@  u--r   c                 	   t        |t        j                  j                        rt        |j                  t        j                  j
                        rt        |j                  j                        dk(  rld|j                  j                  d   z   | j                  v rD| j                  d|j                  j                  d   z      \  }}|| j                  |      z  }||fS t        |t        j                  j                        rw|j                  d }n| j                  |j                  |      }||dk(  rd|d}d|z   }| j                  |j                  ||	      \  }}t        j                  ||      |fS t        |t        j                  j                         rG| j                  |j                        \  }}	| j#                  ||	|
      }| j                  |      }||fS t        |t        j                  j                        r| j                  |      }|j                  }
t        |
t        j                  j
                        rt%        |
j                        }|ddgk7  ri }|r)|d   }|dv r|j'                  |d      dz   ||<   |d= nn|r)g }dD ]3  }t)        |j'                  |d            D ]  }|j+                  |        5 |sdg}|dgk(  r
d|v sd|v rg }||z   }dj-                  |      }|dk(  rt        j.                  |fS |dk(  r"t1        d|j2                  j4                  z        t7        | |      \  }}|||z  fS t        |
t        j                  j8                        r| j;                  d|
|      }||fS t        |
t        j                  j<                        r| j;                  d|
|      }||fS t        |
t        j                  j>                        r| j;                  d|
|      }||fS t        |t        j                  j@                        r| jC                  ||      dfS t        |t        j                  j8                        r| j;                  d||d      dfS t        |t        j                  j<                        r| j;                  d||d      dfS t1        d|j2                  j4                  z        )Nr   r   r	   r   r_   z_cffi_array_len(r   r   )r   r   )r0  signedchar)shortlongr2  unsigned)r6  r4  r5  rU   r4  r5  rZ   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   r'  	ArrayDecldim_parse_constantr   r   	ArrayTyper   r   rj   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   zParser._get_type_and_quals^  s    x!9!9:x}}ioo&D&DE##$)(----a00T5G5GG**:8K8KA8N+NOIBT((22Eu9h	 9 9:||#--LL4E . G *U?6EGF"%"7002C0? 1 AIB ??2v.55h	 7 78"&":":8=="IHi'')d'KB''1Eu9h	 8 89''1E==D$	 > >? TZZ(Xv..!H$Qx#JJ-5\\$-BQ-FHTN %a!    "H"? 4!&x||FA'>!? 4A$OOF344 !!&'"h.&H2D$&E$u,EF? ??E11O+"#<$NN//$0 1 11$>VUV^,,$	 6 6755hdK5y $	 5 5655gtTJ5y $	 4 4555fdDI5y h	 8 89,,Xt<a?? h	 6 6733Hh;? 4 ABCD Dh	 5 5633GXt;? 4 ABCD D A##$ % 	%r   c                    t        t        |j                  dg             }t        |      D ]4  \  }}t	        |d      rt        d|xs d|dz   t        |dd      fz         t        |      dkD  xr t        |d	   j                  t        j                  j                        xrd t        |d	   j                  j                  t        j                  j                        xr' |d	   j                  j                  j                  d
gk(  }|r$|j                          |st        d|xs dz        |D cg c]*  } | j                  | j!                  |j                         , }}|s|t"        j$                  gk(  rg }| j!                  |j                        \  }	}
d }t	        |j                  d      r |j                  j&                  dd  g dk(  rd}t#        j(                  t+        |      |	||      S c c}w )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   )r"  r"  r!  	__stdcall)rj   getattrr   rl   r  r   r%   r   r   r   r   r   r   r   pop_as_func_argr   r   r  r   r  tuple)r   r@  funcnamer  r-   argellipsisargdeclnoder   resultr   abis               r   r?  zParser._parse_function_type  s   ghmmXr:;' 	3FAs3' !?  2?AEsFC02!2 3 3	3 K!O <vbz	(@(@A<vbz++ 557< 2JOO  &&?*;; 	 JJL(+3+FHI I $*+ "!!4#;#;K<L<L#MN + +DU__$55D00? 8=='*}}""23'+LL!$$U4[&(CHH+s   4/G4c                     t        |t        j                        r t        j                  |j                  |      S t        |t        j
                        r|j                         S |S r   )r   r   r<  r/  itemr  r*  r&  s      r   rP  zParser._as_func_arg  sK    dEOO,$$TYY66e334++--Kr   c                 @   	 | j                   |   S # t        $ r Y nw xY w|}|j                  }|/|d|z  }n$| xj                  dz  c_        d| j                  z  }d }n(|}|d|}| j                  j                  |d      \  }}	||dk(  rt        j                  |d d d       }n^|dk(  rt        j                  |d d d       }n@|dk(  r-|d	k(  rt        d
      | j                  ||j                        }nt        d|      |2| j                  |       n|dk(  r|j                  t        d|z        |j                  s|j!                  |       |j                  r-d|j                  v r| j                  d|j                  z  |       || j                   |<   |dk(  r|S |j"                  |S |j$                  t        d|z        g }
g }g }g }|j"                  D ]e  }t'        |j(                  t*        j,                  j.                        r;dj1                  |j(                  j2                        d	k(  r| j5                  ||       m|j6                  d}n| j9                  |j6                        }d| _        | j=                  |j(                  d      \  }}| j:                  r| j5                  ||       t'        |t        j                        r|j>                  r| j5                  ||       |
jA                  |j                  xs d       |jA                  |       |jA                  |       |jA                  |       h tC        |
      |_        tC        |      |_"        tC        |      |_#        tC        |      |_$        |dgtK        |      z  k7  r4t'        |t        j                        r|j>                  rt        |d      | jL                  j                  d      |_'        |jP                  r"d|_(        | jR                  jA                  |       |S )Nz$%sr   z$%drZ   )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valuesrT   r   r7   r-  force_the_namedeclsfldnamesr   r   r   r   r   r&   r   _make_partialbitsizer;  _partial_lengthr   partialr    rQ  fldtypes
fldbitsizefldqualsr%   r   r   	completedr   )r   kindr   rE   r8  
force_nameexplicit_namer   r   _rb  rg  rh  ri  rF   rd  fquals                    r   r  z"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
JJ 	#D499ioo&D&DEGGDIIOO,? ""2v.||#..t||<#(D 22499EI 3 KKD%##""2v.$ 0 01dll""2v.OODIIO,OOD!g&OOE"-	#. HoHoj)Ho"J//"e../BJJ)-/+2 3 3MM%%h/	<<BL##B'	s    	c                     t        |t        j                        st        |d      |j	                         s|st        |d      d|_        y )Nz cannot be partialz is partial but has no C nameT)r   r   StructOrUnionr   
has_c_namer7   rf  )r   r   r8  s      r   rc  zParser._make_partialh  s@    "e112b:;;}}v%"&NOO
r   c                    t        |t        j                  j                        r|j                  }d|d   cxk  rdk  r>n n;|j                  d      }	 |j                  d      rt        |d      S t        |d      S |d   dk(  r:|d   dk(  r2t        |      dk(  st        |      dk(  r|d   dk(  rt        |d         S t        d|      t        |t        j                  j                        r*|j                  dk(  r| j                  |j                         S t        |t        j                  j                        r+|j                  dk(  r| j                  |j                          S t        |t        j                  j"                        r1|j$                  | j&                  v r| j&                  |j$                     S t        |t        j                  j"                        r;|j$                  dk(  r,|rd| _        yt+        d|j,                  j.                  z        t        |t        j                  j0                        r| j                  |j2                        }| j                  |j4                        }|j                  dk(  r||z   S |j                  dk(  r||z
  S |j                  dk(  r||z  S |j                  dk(  r| j7                  ||      S |j                  dk(  r|| j7                  ||      |z  z
  S |j                  dk(  r||z  S |j                  dk(  r||z	  S |j                  dk(  r||z  S |j                  dk(  r||z  S |j                  d k(  r||z  S t+        d!|j,                  j.                  z        # t        $ rY t        |      dkD  rH|j                         dd d	k(  rt        |d
      cY S |j                         dd dk(  rt        |d      cY S Y nw xY wt        d|      )"Nr   r	   9uUlLr   r   r   r  r      0bzinvalid constant r  r   r
      \+r   __dotdotdotarray__Tr_   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$   rU   r   r%   r   r   ordr	  r
  r;  r  r  rE   r   re  r   r>  rA   BinaryOpleftright_c_div)r   r  r   rV   r  r  s         r   r;  zParser._parse_constanto  s~    h	 8 89Aad!c!HHV$
-||C("1ay("1bz) 12#FaKCFaKAaDDL1R5z! <==x!8!89s"''66x!8!89s"((777x!3!34!4!44&&x}}55x!3!34MM%99 '+$ E%^^001 2 2 h	 8 89''6D((8E{{c!e|##e|##e|##{{4//#dkk$6>>>$u}$$u}$#e|##e|##e|# 13;>>3F3FG H 	Hu " -1vz779Qq>T1#&q":-WWYq^t3#&q!9,-   <==s   N 1N 9O%>"O%$O%c                 @    ||z  }|dk  |dk  z  r||z  dk7  r|dz  }|S )Nr	   r   r   )r   abrV  s       r   r  zParser._c_div  s3    aUq1uAEa<aKFr   c                    |d}g }g }d}|j                   D ]  }t        j                  |j                        rd}%|j                  | j                  |j                        }|j                  |j                         |j                  |       | j                  |j                  |       |dz  } t        |      }t        |      }t        j                  |||      }||_        |S t        j                  |dd      }|S )NFr	   Tr   r   )enumerators_r_enum_dotdotdotr)   rE   r   r;  r    r   rQ  r   EnumTyperf  )	r   rm  ra  rf  r  
enumvaluesnextenumvaluer   r   s	            r   r^  zParser._build_enum_type  s    GKJM)) 	#$**4995"G::)$($8$8$DM""499-!!-0##DII}="	#  ,Kz*J{JGB BJ 	 r26B	r   c                 8   |j                   j                         D ]I  \  }\  }}|j                  d      r|j                  dd      d   }|dv s5| j	                  ||d|       K |j
                  j                         D ]  \  }}| j                  ||        y )Nzanonymous $enum_$rZ   r   r	   )r   r   r   	anonymousrz   T)r  r   )r   r   r$   r  r   r   r   )r   otherrE   r   r   rk  kvs           r   includezParser.include  s    !&!4!4!:!:!< 	DD+2u23::c1%a(DJJdBUC	D ((..0 	&DAq1%	&r   c                    |j                   j                   j                  }|dgk(  rt        j                  |j                        S |dgk(  r?| j
                  d|j                  z  | _        t        j                  |j                        S |dgk(  r?| j
                  d|j                  z  | _        t        j                  |j                        S t        d|j                  j                  z        )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   r>  rA   )r   rF   r   s      r   r   zParser._get_unknown_type  s    IINN((	))%%dii00+,,%%-)>)J&++DII66-..%%-)@499)L&))$))44C) * 	*r   c                     |j                   j                   j                   j                  dgk(  rt        j                  |j                        S t        d|j                  j                  z        )Nr   r  )r   r   r   unknown_ptr_typerE   r   r>  rA   )r   rF   s     r   r   zParser._get_unknown_ptr_type  sV    99>>$$(99))$))44C) * 	*r   )FFNF)Fr	   r   )NFN)NF)F)r   
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r  r  r   r'  r   r   r?  rP  r  rc  r;  r  r^  r  r   r   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	MULTILINEr`   ra   rN   rk   r  ri   r}   r   
IGNORECASEr   rg   rf   rh   r5   r   rn   ro   r   r/   r9   rB   rG   rP   rW   rw   r   objectr   r   r   r   <module>r     s    : &)  
$  7  "D , RZZ7		BLL02
RZZ 2		BLL02	 BJJA2<<P "**=>BJJ34 2::12 2::i 4bmmDbjj23bjj672::n%2:: O P  bjj.0 2:: ( ) RZZ <= (T0d
;$3@D%PP*V P*C	    Ds"   G )G& 	G#"G#&G10G1