+
    i^                    ^   ^ RI Ht ^ RIHtHtHtHtHtHtH	t	H
t
Ht ^RIHt ^RIHtHt ^RIHtHt ] ! R R4      4       t ! R R	]4      t ! R
 R4      t0 R*mt/ R^ bR^bR^bR^bR^bR^bR^bR^bR^bR^bR^bR^bR^bR^bR^bR^	bR^	bR^	/Ct0 R+mtRR0t0 R,mt0 R-mt]],          ],          ],          0 R.m,          t0 R/mt0 R0mt R R!0t!0 R1mt"R"0t#0 R2mt$]] ,          ]!,          ]",          ]#,          ]$,          t%0 R3mt& ! R# R$4      t' ! R% R&]
4      t(]R4,          t) ! R' R(]
4      t*R)# )5    )	dataclass)	AnyDictListLiteralNoReturnOptionalTuple	TypedDictcast)c_ast)CLexer_Token)fix_switch_casesfix_atomic_specifiersc                   F   a  ] tR t^t o RtRtV 3R lR ltV 3R ltRtV t	R# )Coordz[Coordinates of a syntactic element. Consists of:
- File name
- Line number
- Column number
Nc                    < V ^8  d   QhRS[ /#    return)str)format__classdict__s   "Y/home/wkmabra/.openclaw/workspace/venv/lib/python3.14/site-packages/pycparser/c_parser.py__annotate__Coord.__annotate__'   s           c                    V P                    R V P                   2pV P                  '       d   VR V P                   2,          pV# ):filelinecolumn)selftexts   & r   __str__Coord.__str__'   s=    ))Adii[);;;a}%%Dr   c                N   < V ^8  d   Qh/ S[ ;R&   S[;R&   S[S[,          ;R&   # )r   r"   r#   r$   )r   intr	   )r   r   s   "r   r   r      s.      I  I  SM  r    )
__name__
__module____qualname____firstlineno____doc__r$   r'   __annotate_func____static_attributes____classdictcell__r   s   @r   r   r      s"      !F   r   r   c                       ] tR t^.tRtR# )
ParseErrorr+   N)r,   r-   r.   r/   r2   r+   r   r   r6   r6   .   s    r   r6   c                     a  ] tR t^2t o RtR]RRRRR3V 3R lR lltRV 3R	 lR
 lltRV 3R lR lltV 3R lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R  lR! ltV 3R" lR# ltV 3R$ lR% ltRV 3R& lR' lltRV 3R( lR) lltV 3R* lR+ ltV 3R, lR- ltRV 3R. lR/ lltRV 3R0 lR1 lltV 3R2 lR3 ltV 3R4 lR5 ltV 3R6 lR7 ltV 3R8 lR9 ltV 3R: lR; ltV 3R< lR= lt RV 3R> lR? llt!RV 3R@ lRA llt"V 3RB lRC lt#RV 3RD lRE llt$V 3RF lRG lt%RV 3RH lRI llt&V 3RJ lRK lt'V 3RL lRM lt(V 3RN lRO lt)V 3RP lRQ lt*V 3RR lRS lt+V 3RT lRU lt,V 3RV lRW lt-V 3RX lRY lt.V 3RZ lR[ lt/V 3R\ lR] lt0V 3R^ lR_ lt1RV 3R` lRa llt2V 3Rb lRc lt3V 3Rd lRe lt4V 3Rf lRg lt5V 3Rh lRi lt6RV 3Rj lRk llt7RV 3Rl lRm llt8V 3Rn lRo lt9V 3Rp lRq lt:V 3Rr lRs lt;V 3Rt lRu lt<V 3Rv lRw lt=V 3Rx lRy lt>V 3Rz lR{ lt?V 3R| lR} lt@V 3R~ lR ltAV 3R lR ltBV 3R lR ltCV 3R lR ltDV 3R lR ltERV 3R lR lltFV 3R lR ltGV 3R lR ltHRV 3R lR lltIV 3R lR ltJV 3R lR ltKV 3R lR ltLV 3R lR ltMV 3R lR ltNV 3R lR ltOV 3R lR ltPV 3R lR ltQV 3R lR ltRV 3R lR ltSV 3R lR ltTV 3R lR ltUV 3R lR ltVV 3R lR ltWV 3R lR ltXV 3R lR ltYV 3R lR ltZV 3R lR lt[V 3R lR lt\V 3R lR lt]V 3R lR lt^V 3R lR lt_V 3R lR lt`V 3R lR ltaV 3R lR ltbV 3R lR ltcV 3R lR ltdRV 3R lR llteV 3R lR ltfV 3R lR ltgV 3R lR lthV 3R lR ltiV 3R lR ltjV 3R lR ltkV 3R lR ltlV 3R lR ltmV 3R lR ltnV 3R lR ltoV 3R lR ltpV 3R lR ltqV 3R lR ltrV 3R lR ltsV 3R lR lttV 3R lR ltuV 3R lR ltvV 3R lR ltwV 3R lR ltxV 3R lR ltyV 3R lR ltzV 3R lR lt{Rt|V t}R# )CParsera*  Recursive-descent C parser.

Usage:
    parser = CParser()
    ast = parser.parse(text, filename)

The `lexer` parameter lets you inject a lexer class (defaults to CLexer).
The parameters after `lexer` are accepted for backward compatibility with
the old PLY-based parser and are otherwise unused.
Tzpycparser.lextabzpycparser.yacctabF c                X   < V ^8  d   QhRS[ RS[S[,          RS[RS[ RS[RS[ RS[RR	/# )
r   lex_optimizelexerlextabyacc_optimizeyacctab
yacc_debugtaboutputdirr   N)booltyper   r   )r   r   s   "r   r   CParser.__annotate__>   s_     = == F|= 	=
 = = = = 
=r   c                    V! V P                   V P                  V P                  V P                  R 7      V n        \        4       .V n        \        V P                  4      V n        R# ))
error_funcon_lbrace_funcon_rbrace_functype_lookup_funcN)	_lex_error_func_lex_on_lbrace_func_lex_on_rbrace_func_lex_type_lookup_funcclexdict_scope_stack_TokenStream_tokens)r%   r;   r<   r=   r>   r?   r@   rA   s   &&&&&&&&r   __init__CParser.__init__>   sR     "++3333!77	
	 59F8%1$))%<r   c                F   < V ^8  d   QhRS[ RS[ RS[RS[P                  /# )r   r&   filenamedebugr   )r   rB   r   FileAST)r   r   s   "r   r   rD   Z   s1      #&48	r   c                4   \        4       .V n        V P                  P                  W4       \	        V P                  4      V n        V P                  4       pV P                  4       pVe/   V P                  RVP                   2V P                  V4      4       V# )zParses C code and returns an AST.

text:
    A string containing the C source code

filename:
    Name of the file being parsed (for meaningful
    error messages)

debug:
    Deprecated debug flag (unused); for backwards compatibility.
before: )rO   rP   rN   inputrQ   rR    _parse_translation_unit_or_empty_peek_parse_errorvalue
_tok_coord)r%   r&   rV   rW   asttoks   &&&&  r   parseCParser.parseZ   sw     "VH		'#DII.335jjl?4dooc6JK
r   Nc                <   < V ^8  d   QhRS[ RS[S[ ,          RS[/# )r   linenor$   r   )r*   r	   r   )r   r   s   "r   r   rD   v   s+     J JS J(3- J5 Jr   c                D    \        V P                  P                  WR 7      # )r!   )r   rN   rV   )r%   rf   r$   s   &&&r   _coordCParser._coordv   s    $)),,6IIr   c                J   < V ^8  d   QhRS[ RS[S[ ,          R,          RS[/# )r   msgcoordNr   )r   r   r   )r   r   s   "r   r   rD   y   s+     , , ,ECK$,> ,8 ,r   c                "    \        V R V 24      h)z: )r6   )r%   rk   rl   s   &&&r   r^   CParser._parse_errory   s    E7"SE*++r   c                   < V ^8  d   QhRR/# r   r   Nr+   )r   r   s   "r   r   rD   |   s     ) )T )r   c                L    V P                   P                  \        4       4       R # N)rP   appendrO   r%   s   &r   _push_scopeCParser._push_scope|   s      (r   c                   < V ^8  d   QhRR/# rp   r+   )r   r   s   "r   r   rD      s        D  r   c                r    \        V P                  4      ^8  g   Q hV P                  P                  4        R# )   N)lenrP   poprt   s   &r   
_pop_scopeCParser._pop_scope   s-    4$$%)))r   c                :   < V ^8  d   QhRS[ RS[S[,          RR/# r   namerl   r   Nr   r	   r   )r   r   s   "r   r   rD      s&     + +c +(5/ +d +r   c                    V P                   R,          P                  VR4      '       g   V P                  RV: R2V4       RV P                   R,          V&   R# )z9Add a new typedef name (ie a TYPEID) to the current scopeTzTypedef z1 previously declared as non-typedef in this scopeNrP   getr^   r%   r   rl   s   &&&r   _add_typedef_nameCParser._add_typedef_name   sU      $((t444("ST '+"d#r   c                :   < V ^8  d   QhRS[ RS[S[,          RR/# r   r   )r   r   s   "r   r   rD      s&     	, 	,C 	, 	,D 	,r   c                    V P                   R,          P                  VR4      '       d   V P                  RV: R2V4       RV P                   R,          V&   R# )zPAdd a new object, function, or enum member name (ie an ID) to the
current scope
FzNon-typedef z- previously declared as typedef in this scopeNr   r   r   s   &&&r   _add_identifierCParser._add_identifier   sW     R $$T511th&ST ',"d#r   c                &   < V ^8  d   QhRS[ RS[/# r   r   r   r   rB   )r   r   s   "r   r   rD      s      c d r   c                p    \        V P                  4       F  pVP                  V4      pVf   K  Vu # 	  R# )z.Is *name* a typedef-name in the current scope?F)reversedrP   r   )r%   r   scopein_scopes   &&  r   _is_type_in_scopeCParser._is_type_in_scope   s6    d//0E yyH# 1 r   c                0   < V ^8  d   QhRS[ RS[RS[RR/# )r   rk   r#   r$   r   N)r   r*   )r   r   s   "r   r   rD      s)     : :3 :c :3 :4 :r   c                F    V P                  WP                  W#4      4       R # rr   )r^   rh   )r%   rk   r#   r$   s   &&&&r   rJ   CParser._lex_error_func   s    #{{489r   c                   < V ^8  d   QhRR/# rp   r+   )r   r   s   "r   r   rD      s      T r   c                &    V P                  4        R # rr   )ru   rt   s   &r   rK   CParser._lex_on_lbrace_func   s    r   c                   < V ^8  d   QhRR/# rp   r+   )r   r   s   "r   r   rD      s      T r   c                &    V P                  4        R # rr   )r|   rt   s   &r   rL   CParser._lex_on_rbrace_func   s    r   c                &   < V ^8  d   QhRS[ RS[/# r   r   )r   r   s   "r   r   rD      s     , ,# ,$ ,r   c                $    V P                  V4      # )zzLooks up types that were previously defined with
typedef.
Passed to the lexer for recognizing identifiers that
are types.
)r   )r%   r   s   &&r   rM   CParser._lex_type_lookup_func   s     %%d++r   c                @   < V ^8  d   QhRS[ RS[ RS[P                  /# )r   declmodifierr   )r   r   Node)r   r   s   "r   r   rD      s&      c S UZZ r   c                @   TpTpVP                   '       d   VP                   pK   \        V\        P                  4      '       d	   Wn         V# Tp\        VP                   \        P                  4      '       g   VP                   pK8  VP                   Vn         W5n         V# )zTacks a type modifier on a declarator, and returns
the modified declarator.

Note: the declarator and modifier may be modified
)rC   
isinstancer   TypeDecl)r%   r   r   modifier_headmodifier_tail	decl_tails   &&&   r   _type_modify_declCParser._type_modify_decl   s     !     )..M dENN++!%O
 I @@%NN	!*M*NKr   c                   < V ^8  d   QhRS[ P                  S[ P                  ,          S[ P                  ,          RS[S[,          RS[ P                  S[ P                  ,          S[ P                  ,          /# )r   r   typenamer   )r   DeclTypedefTypenamer   r   )r   r   s   "r   r   rD      sY     & &jj5==(5>>9& s)& 
emm	#enn	4	&r   c                   Tp\        V\        P                  4      '       g   VP                  pK.  VP                  Vn        VP                  R,          Vn        V F[  p\        V\        P                  4      '       d   K%  \        V4      ^8  d   V P                  RVP                  4       KS  WCn        Vu # 	  V'       gq   \        VP                  \        P                  4      '       g   V P                  RVP                  4       \        P                  ! R.VP                  R7      Vn        V# \        P                  ! V UUu. uF  qUP                   F  qfNK  	  K  	  uppV^ ,          P                  R7      Vn        V# u uppi )z#Fixes a declaration. Modifies decl.NNNz Invalid multiple types specifiedMissing type in declarationr*   rl   )r   r   r   rC   declnamer   qualsIdentifierTyperz   r^   rl   FuncDeclnames)r%   r   r   typtnidr   s   &&&    r   _fix_decl_name_typeCParser._fix_decl_name_type   s    S%..11((CLL	JJqM	 Bb%"6"677x=1$%%&H"((S!HK  dii88!!"?L++UG4::FCH  ++ (>"XXTX>hqkFWFWCH  ?s   F
c          
      B   < V ^8  d   QhRS[ R,          RS[RRRS[RR/# )r   declspec	_DeclSpecnewspeckind_DeclSpecKindrs   r   )r	   r   rB   )r   r   s   "r   r   rD   (  sB      ;'  	
  
r   c                    Vf   \        . . . . . R7      pMTpV'       d   WS,          P                  V4       V# WS,          P                  ^ V4       V# )z2See _DeclSpec for the specifier dictionary layout.qualstoragerC   function	alignment)rO   rs   insert)r%   r   r   r   rs   specs   &&&&& r   _add_declaration_specifier"CParser._add_declaration_specifier(  sY     ""rRD DJg&  Ja)r   c          	      b   < V ^8  d   QhRRRS[ R,          RS[RS[ S[P                  ,          /# )r   r   r   decls	_DeclInfotypedef_namespacer   )r   rB   r   r   )r   r   s   "r   r   rD   >  sG     e ee K e  	e
 
ejj	er   c                p   RVR,          9   p. pV^ ,          P                  R4      Ef!   V^ ,          R,          Ef(   \        VR,          4      ^8  g_   \        VR,          R,          P                  4      ^8w  g7   V P                  VR,          R,          P                  ^ ,          4      '       gE   RpVR,           F#  p\	        VR4      '       g   K  VP
                  p M	  V P                  R	V4       \        P                  ! VR,          R,          P                  ^ ,          RRVR
,          VR,          R,          P
                  R7      V^ ,          R&   VR,          R M\        V^ ,          R,          \        P                  \        P                  \        P                  \        P                  34      '       g   \        \        V^ ,          R,          4      p\        V\        P                  4      '       g   VP                   pK.  VP"                  f1   VR,          R,          P                  ^ ,          Vn        VR,          R V EF  p	V	R,          f   Q hV'       dC   \        P$                  ! RVR,          VR,          V	R,          V	R,          P
                  R7      p
Mq\        P&                  ! RVR,          VR
,          VR,          VR,          V	R,          V	P                  R4      V	P                  R4      V	R,          P
                  R7	      p
\        V
P                   \        P                  \        P                  \        P                  \        P                  34      '       d   T
pMV P)                  WR,          4      pV'       dV   V'       d(   V P+                  VP,                  VP
                  4       M&V P/                  VP,                  VP
                  4       \1        \        \        P&                  \        P$                  ,          V4      4      pVP3                  V4       EK  	  V# )zBuilds a list of declarations all sharing the given specifiers.
If typedef_namespace is true, each declared name is added
to the "typedef namespace", which also includes objects,
functions, and enum constants.
typedefr   bitsizeNr   rC   ?rl   Invalid declarationr   r   rC   r   alignrl   r   )r   r   r   rC   rl   r   init	r   r   r   r   funcspecrC   r   r   rl   r   )r   rz   r   r   hasattrrl   r^   r   r   r   EnumStructUnionr   r   r   rC   r   r   r   r   r   r   r   r   rs   )r%   r   r   r   
is_typedefdeclarationsrl   tdecls_0_tailr   declaration
fixed_decls   &&&&        r   _build_declarationsCParser._build_declarations>  sC    $y/1
 8<<	"*
 Qx'V%)4<+112a711$v,r2B2H2H2KLLE!&\\"1g..$%GGE! * %%&;UC $)>>!&\"-33A6{+v,r*00$a  L$  a U\\5;;8L8LM   $Cq&)9:$\5>>BB#/#4#4L((0,0L,<,B,B1,EL)VR(D<+++#mmv, Ofv,,, $jjv,{+ O!*-f&) HHY/v,,,
   U\\5;;8L8LM  )
!55k<P
 !**:??J<L<LM((*:J:JK.UZZ%--/<J 
+U X r   c          
         < V ^8  d   QhRRRS[ P                  RS[S[S[ P                  ,          ,          RS[ P                  RS[ P                  /# )r   r   r   r   param_declsbodyr   )r   r   r	   r   )r   r   s   "r   r   rD     sW     
 

 jj
 d5::./	

 jj
 

r   c           	         RVR,          9   d   V P                  RVP                  4       V P                  V\        VRRR7      .RR7      ^ ,          p\        P
                  ! WSWBP                  R7      # )	zBuilds a function definition.r   r   zInvalid typedefNr   r   r   Tr   r   r   )r   r   r   rl   )r^   rl   r   rO   r   FuncDef)r%   r   r   r   r   r   s   &&&&& r   _build_function_definition"CParser._build_function_definition  su     Y'/<..Td;<" / 
 	 }}D


 	
r   c                &   < V ^8  d   QhRS[ RS[/# )r   tokenr   )r   rC   )r   r   s   "r   r   rD     s        r   c                P    VR8X  d   \         P                  # \         P                  # )zKGiven a token (either STRUCT or UNION), selects the
appropriate AST class.
struct)r   r   r   )r%   r   s   &&r   _select_struct_union_class"CParser._select_struct_union_class  s      H<<;;r   c                6   < V ^8  d   QhRS[ RS[S[,          /# r   kr   r*   r	   r   )r   r   s   "r   r   rD     s      $ $s $8F#3 $r   c                8    V P                   P                  V4      # )z:Return the k-th next token without consuming it (1-based).)rR   peekr%   r   s   &&r   r]   CParser._peek  s    ||  ##r   c                6   < V ^8  d   QhRS[ RS[S[,          /# r   )r*   r	   r   )r   r   s   "r   r   rD     s     5 5C 5 5r   c                H    V P                  V4      pVe   VP                  # R# )zDReturn the type of the k-th next token, or None if absent (1-based).N)r]   rC   )r%   r   rb   s   && r   
_peek_typeCParser._peek_type  s"    jjm?sxx44r   c                    < V ^8  d   QhRS[ /# r   )r   )r   r   s   "r   r   rD     s      & r   c                    V P                   P                  4       pVf)   V P                  RV P                  P                  4       R # V# )NzAt end of input)rR   nextr^   rN   rV   r%   rb   s   & r   _advanceCParser._advance  s9    ll!;/1C1CDJr   c                6   < V ^8  d   QhRS[ RS[S[,          /# r   
token_typer   )r   r	   r   )r   r   s   "r   r   rD     s      	 	# 	(6*: 	r   c                p    V P                  4       pVe"   VP                  V8X  d   V P                  4       # R# )zConditionally consume next token, only if it's of token_type.

If it is of the expected type, consume and return it.
Otherwise, leaves the token intact and returns None.
N)r]   rC   r
  r%   r  rb   s   && r   _acceptCParser._accept  s.     jjl?sxx:5==?"r   c                &   < V ^8  d   QhRS[ RS[/# r  )r   r   )r   r   s   "r   r   rD     s      # & r   c                    V P                  4       pVP                  V8w  d/   V P                  R VP                   2V P	                  V4      4       V# )rZ   )r
  rC   r^   r_   r`   r  s   && r   _expectCParser._expect  sB    mmo88z!4dooc6JK
r   c                    < V ^8  d   QhRS[ /# r   r*   )r   r   s   "r   r   rD     s     # #s #r   c                6    V P                   P                  4       # rr   )rR   markrt   s   &r   _markCParser._mark  s    ||  ""r   c                $   < V ^8  d   QhRS[ RR/# r   r  r   Nr  )r   r   s   "r   r   rD     s     ! !3 !4 !r   c                <    V P                   P                  V4       R # rr   )rR   resetr%   r  s   &&r   _resetCParser._reset  s    4 r   c                &   < V ^8  d   QhRS[ RS[/# r   rb   r   )r   r   )r   r   s   "r   r   rD     s     3 3f 3 3r   c                N    V P                  VP                  VP                  4      # rr   )rh   rf   r$   r	  s   &&r   r`   CParser._tok_coord  s    {{3::szz22r   c                6   < V ^8  d   QhRS[ S[,          RS[/# r%  r	   r   rB   )r   r   s   "r   r   rD     s      ' 'x'7 '4 'r   c                h    T;'       g    V P                  4       pVf   R# VP                  \        9   # NF)r]   rC   _DECL_STARTr	  s   &&r   _starts_declarationCParser._starts_declaration  s,    !!TZZ\;xx;&&r   c                6   < V ^8  d   QhRS[ S[,          RS[/# r%  r)  )r   r   s   "r   r   rD     s      . .hv&6 .$ .r   c                h    T;'       g    V P                  4       pVf   R# VP                  \        9   # r+  )r]   rC   _STARTS_EXPRESSIONr	  s   &&r   _starts_expressionCParser._starts_expression  s-    !!TZZ\;xx---r   c                    < V ^8  d   QhRS[ /# r   rB   )r   r   s   "r   r   rD     s     ) )4 )r   c                h    V P                  4       pVf   R# V\        9   d   R# V P                  4       # )NFT)r  _STARTS_STATEMENTr2  r%   tok_types   & r   _starts_statementCParser._starts_statement  s2    ??$((&&((r   c                &   < V ^8  d   QhRS[ RS[ /# )r   id_onlyr   r5  )r   r   s   "r   r   rD     s     , ,$ ,4 ,r   c                d    V P                  4       pVf   R# VR9   d   R# V'       d   VR8H  # VR9   # )NFTID>   TIMESLPAREN>   r?  TYPEIDr  )r%   r=  r9  s   && r   _starts_declaratorCParser._starts_declarator  s=    ??$**t##+++r   c                F   < V ^8  d   QhRS[ S[S[,          S[3,          /# r   r
   r	   r   rB   )r   r   s   "r   r   rD     s"     # #E(3-2E,F #r   c                n    V P                  4       pV P                  4       w  r#V P                  V4       W#3# rr   )r  _scan_declarator_name_infor"  )r%   r  r9  	saw_parens   &   r   _peek_declarator_name_info"CParser._peek_declarator_name_info  s3    zz|"==?D""r   c                f   < V ^8  d   QhRS[ RS[ RS[S[S[P                  ,          S[ 3,          /# )r   allow_abstracttypeid_paren_as_abstractr   )rB   r
   r	   r   r   )r   r   s   "r   r   rD     s8      "FJ	x

#T)	*r   c                   V P                  4       w  r4Ve   V'       dy   VR8X  dr   V'       dj   V'       gN   V P                  4       pVe   V P                  V4      MV P                  P                  pV P                  RV4       V P                  4       pVR3# VR8X  d2   V'       d   V P                  4       pVR3# V P                  4       p VR3# V P                  4       pVR3# )NrB  zInvalid declaratorFT)
rK  r]   r`   rN   rV   r^   _parse_abstract_declarator_opt _parse_typeid_noparen_declarator_parse_typeid_declarator_parse_id_declarator)r%   rN  rO  	name_typerJ  rb   rl   r   s   &&&     r   _parse_any_declaratorCParser._parse_any_declarator  s      $>>@	$h)>9!jjl03,TYYEWEW!!"6>668D; '<<>
 Tz 446 Tz ,,.DTzr   c                F   < V ^8  d   QhRS[ S[S[,          S[3,          /# r   rG  )r   r   s   "r   r   rD   /  s"     ! !E(3-2E,F !r   c                   R pV P                  R4      '       d.   V P                  4       \        9   g   K2  V P                  4        K-  V P	                  4       pVf   RV3# VP
                  R9   d   V P                  4        VP
                  V3# VP
                  R8X  d   RpV P                  4        V P                  4       w  r4V'       d   Rp^p V P	                  4       pVf   RV3# VP
                  R8X  d   V^,          pM7VP
                  R8X  d'   V^,          pV P                  4        V^ 8X  d    W13# Kk  V P                  4        K}  RV3# )Fr@  NrA  TRPAREN>   r?  rB  )r  r  _TYPE_QUALIFIERr
  r]   rC   rI  )r%   rJ  rb   r9  nested_parendepths   &     r   rI  "CParser._scan_declarator_name_info/  s"   	ll7##//#6jjl;?"88''MMO88Y&&88xIMMO%)%D%D%F"H 	Ejjl;?*88x'QJEXX)QJEMMOz && Yr   c                    < V ^8  d   QhRS[ /# r   r5  )r   r   s   "r   r   rD   R  s     ; ;D ;r   c                (    V P                  4       R9   # )rA  >   rA  LBRACKETrC  rt   s   &r   "_starts_direct_abstract_declarator*CParser._starts_direct_abstract_declaratorR  s     $:::r   c                    < V ^8  d   QhRS[ /# r   r5  )r   r   s   "r   r   rD   U  s     ? ?4 ?r   c                `    V P                  4       pVR J;'       d    VP                  \        9   # rr   )r]   rC   _ASSIGNMENT_OPSr	  s   & r   _is_assignment_opCParser._is_assignment_opU  s(    jjl$>>388#>>r   c                ^   < V ^8  d   QhRS[ S[S[P                  S[S[3,          ,          /# r   )r	   r
   r   r   r*   r   )r   r   s   "r   r   rD   Y  s*     % %	%V34	5%r   c                   V P                  4       pV P                  R4      pVf   R# V P                  4       '       g   V P                  V4       R# V P	                  4       pV P                  R4      f   V P                  V4       R# W1V3# )a:  Parse and return a parenthesized type name if present.

Returns (typ, mark, lparen_tok) when the next tokens look like
'(' type_name ')', where typ is the parsed type name, mark is the
token-stream position before parsing, and lparen_tok is the LPAREN
token. Returns None if no parenthesized type name is present.
rA  NrZ  )r  r  r-  r"  _parse_type_name)r%   r  
lparen_tokr   s   &   r   _try_parse_paren_type_name"CParser._try_parse_paren_type_nameY  s{     zz|\\(+
''))KK##%<<!)KK*$$r   c                4   < V ^8  d   QhRS[ P                  /# r   )r   rX   )r   r   s   "r   r   rD   t  s     = =%-- =r   c                    V P                  4       f   \        P                  ! . 4      # \        P                  ! V P                  4       4      # rr   )r]   r   rX   _parse_translation_unitrt   s   &r   r\   (CParser._parse_translation_unit_or_emptyt  s5    ::<==$$}}T99;<<r   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   r   r   r   )r   r   s   "r   r   rD   z  s      ejj)9 r   c                p    . pV P                  4       e"   VP                  V P                  4       4       K3  V# rr   )r]   extend_parse_external_declaration)r%   exts   & r   rq  CParser._parse_translation_unitz  s-    jjl&JJt779:
r   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   rt  )r   r   s   "r   r   rD     s      M MT%**-= Mr   c           
        V P                  4       pVf   . # VP                  R8X  d   V P                  4        . # VP                  R9   d   V P                  4       .# V P	                  R4      '       d   . # VP                  R8X  d   V P                  4       # V P                  V4      '       g   V P                  4       pR pV P                  4       R8w  d   V P                  RVP                  4       \        . . . \        P                  ! R.VP                  R7      .. R7      pV P                  VVVV P                  4       R	7      pV.# V P!                  R
R7      w  rFpV P#                  4       w  rVR8w  d%   V P%                  WF4      p
V P'                  R4       V
# V P                  4       pV P                  4       R8X  g   V P                  4       '       d   R pV P                  4       '       d   V P)                  4       pV P                  4       R8w  d   V P                  RVP                  4       VR,          '       g   \        P                  ! R.VR7      .VR&   V P                  VVVV P                  4       R	7      pV.# \        VR R R7      pV P	                  R4      '       d   V P+                  4       VR&   V P-                  VR7      p
V P/                  WJR
R7      p
V P'                  R4       V
# )NPPHASHSEMI_STATIC_ASSERTLBRACEzInvalid function definitionr*   r   )r   r   r   rC   r   )r   r   r   r   Tallow_no_typer?  rC   r   EQUALSr   )firstr      _PRAGMAPPPRAGMA)r]   rC   _parse_pp_directive_parse_pppragma_directiver  _parse_static_assertr-  rT  r  r^   rl   rO   r   r   r   _parse_compound_statement_parse_declaration_specifiersrK  _parse_decl_body_with_specr  _parse_declaration_list_parse_initializer_parse_init_declarator_listr   )r%   rb   r   r   r   funcsaw_type
spec_coordrU  _r   	decl_dicts   &           r   rw  #CParser._parse_external_declaration  s   jjl;I88x$$&I88..22455<<I88'',,..'',, ,,.DK H,!!"?L"**E7$**EFD 22'335	 3 D 6M &*%G%G &H &
"
 668	33DCELL L((*??(D,D,D,F,FK''))"::< H,!!"?L<< % 4 4eWJ OPV22'335	 3 D 6M!%4dD!I	<<!! $ 7 7 9If00y0A((dSW(XVr   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   rt  )r   r   s   "r   r   rD     s      D$4 r   c                H    V P                  4       pV P                  R 4       V# r}  )_parse_decl_bodyr  r%   r   s   & r   _parse_declarationCParser._parse_declaration  s!    %%'Vr   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   rt  )r   r   s   "r   r   rD     s     ? ?$uzz"2 ?r   c                N    V P                  R R7      w  rpV P                  W4      # )Tr  )r  r  )r%   r   r  r  s   &   r   r  CParser._parse_decl_body  s+     >>T>R..t>>r   c                N   < V ^8  d   QhRRRS[ RS[S[P                  ,          /# )r   r   r   r  r   )rB   r   r   r   )r   r   s   "r   r   rD     s.     ' ''+/'	ejj	'r   c                   R pV'       d(   V P                  4       '       d   V P                  4       pM*V P                  RR7      '       d   V P                  RR7      pVf   VR,          p\        P                  \        P                  \        P
                  3p\        V4      ^8X  dp   \        V^ ,          V4      '       dW   \        P                  ! R VR,          VR,          VR,          VR,          V^ ,          R R V^ ,          P                  R7	      .pV# V P                  V\        R R R R	7      .RR
7      p V# V P                  WRR
7      pV# )NTr=  rC   r   r   r   r   r   r   r   )rD  r  r   r   r   r   rz   r   r   rl   r   rO   )r%   r   r  r   tys_u_or_es   &&&   r   r  "CParser._parse_decl_body_with_spec  s;    &&((88:&&t&44888F=fBekk5::>H2w!|
2a5( ; ;JJ!"6l";/ $Y!%j!1U! $ ekk
0  00TdCD&* 1  	 ,,$ - E r   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   rt  )r   r   s   "r   r   rD     s      ejj)9 r   c                x    . pV P                  4       '       d"   VP                  V P                  4       4       K7  V# rr   )r-  rv  r  r  s   & r   r  CParser._parse_declaration_list  s0    &&((LL0023r   c                N   < V ^8  d   QhRS[ RS[RS[ S[S[,          3,          /# )r   r  r   r   )rB   r
   r	   r   )r   r   s   "r   r   rD     s1     v+ v+!v+	{D(5/1	2v+r   c           	        RpRpRp V P                  4       pVf   EM`VP                  R8X  d:   Vf   V P                  V4      pV P                  W P	                  4       RRR7      pKa  VP                  R8X  dR   V P                  ^4      R8X  d<   Vf   V P                  V4      pV P                  W P                  4       R	RR7      pRpK  VP                  \        9   dE   Vf   V P                  V4      pV P                  W P                  4       P                  R
RR7      pEK  VP                  \        9   dE   Vf   V P                  V4      pV P                  W P                  4       P                  RRR7      pEKu  VP                  \        9   dE   Vf   V P                  V4      pV P                  W P                  4       P                  RRR7      pEK  VP                  \        9   dp   Vf   V P                  V4      pV P                  4       pV P                  V\        P                  ! VP                  .V P                  V4      R7      R	RR7      pRpEKR  VP                  R8X  dz   V'       d   EM
Vf   V P                  V4      pV P                  4       pV P                  V\        P                  ! VP                  .V P                  V4      R7      R	RR7      pRpEK  VP                  R9   d=   Vf   V P                  V4      pV P                  W P                  4       R	RR7      pRpEK)  VP                  R8X  d=   Vf   V P                  V4      pV P                  W P!                  4       R	RR7      pRpEKv   Vf'   V P#                  RV P$                  P&                  4       V'       g   V'       g   V P#                  RV4       W#V3# )av  Parse declaration-specifier sequence.

allow_no_type:
    If True, allow a missing type specifier without error.

Returns:
    (spec, saw_type, first_coord) where spec is a dict with
    qual/storage/type/function/alignment entries, saw_type is True
    if a type specifier was consumed, and first_coord is the coord
    of the first specifier token (used for diagnostics).
NFT_ALIGNASr   rs   _ATOMICrA  rC   r   r   r   r   rB  ENUMr   r      UNIONSTRUCT)r]   rC   r`   r   _parse_alignment_specifierr  _parse_atomic_specifierr[  r
  r_   _STORAGE_CLASS_FUNCTION_SPEC_TYPE_SPEC_SIMPLEr   r    _parse_struct_or_union_specifier_parse_enum_specifierr^   rN   rV   )r%   r  r   r  first_coordrb   s   &&    r   r  %CParser._parse_declaration_specifiers  s    **,C{xx:%&"&//#"6K6699;[QU 7  xx9$);x)G&"&//#"6K66668& 7   xx?*&"&//#"6K66--/// 7  xx>)&"&//#"6K66--///4 7  xx>)&"&//#"6K66--///D 7  xx,,&"&//#"6Kmmo66((#))DOOC<PQ	 7   xx8#&"&//#"6Kmmo66((#))DOOC<PQ	 7   xx..&"&//#"6K66??A6RV 7   xx6!&"&//#"6K66446t 7   <3TYY5G5GH;[I{**r   c                   < V ^8  d   QhRR/# )r   r   r   r+   )r   r   s   "r   r   rD     s     ` ` `r   c           	        R pRpRpR p V P                  4       pVf   EMVP                  R8X  d<   Vf   V P                  V4      pV P                  WP	                  4       RRR7      pRpKc  VP                  R8X  dR   V P                  ^4      R8X  d<   Vf   V P                  V4      pV P                  WP                  4       RRR7      pRpK  VP                  \        9   dE   Vf   V P                  V4      pV P                  WP                  4       P                  R	RR7      pEK  VP                  \        9   dp   Vf   V P                  V4      pV P                  4       pV P                  V\        P                  ! VP                  .V P                  V4      R
7      RRR7      pRpEK  VP                  R8X  dz   V'       d   EM
Vf   V P                  V4      pV P                  4       pV P                  V\        P                  ! VP                  .V P                  V4      R
7      RRR7      pRpEK,  VP                  R9   d=   Vf   V P                  V4      pV P                  WP                  4       RRR7      pRpEKy  VP                  R8X  d=   Vf   V P                  V4      pV P                  WP                  4       RRR7      pRpEK   Vf'   V P                  RV P                   P"                  4       V'       g   V'       g   V P                  RV4       VP%                  R4      f   . VR&   VP%                  R4      f   . VR&   V# )NFTr  r   r  r  rA  rC   r   r   rB  r  zInvalid specifier listr   r   r   r  )r]   rC   r`   r   r  r  r  r[  r
  r_   r  r   r   r  r  r^   rN   rV   r   )r%   r   r  saw_alignmentr  rb   s   &     r   _parse_specifier_qualifier_list'CParser._parse_specifier_qualifier_list  s"   **,C{xx:%&"&//#"6K6699;[QU 7  !%xx9$);x)G&"&//#"6K66668& 7   xx?*&"&//#"6K66--/// 7  xx,,&"&//#"6Kmmo66((#))DOOC<PQ	 7   xx8#&"&//#"6Kmmo66((#))DOOC<PQ	 7   xx..&"&//#"6K66??A6RV 7   xx6!&"&//#"6K66446t 7   <6		8J8JK;[I88I& DO88J'!Dr   c                0   < V ^8  d   QhRS[ S[,          /# r   )r   r   )r   r   s   "r   r   rD     s      DI r   c                    . pV P                  4       \        9   d,   VP                  V P                  4       P                  4       KD  V# rr   )r  r[  rs   r
  r_   )r%   r   s   & r   _parse_type_qualifier_list"CParser._parse_type_qualifier_list  s3    oo?2LL../r   c                4   < V ^8  d   QhRS[ P                  /# r   r   r   )r   r   s   "r   r   rD     s     9 9EJJ 9r   c                   V P                  R 4      pV P                  R4       V P                  4       '       dG   V P                  4       pV P                  R4       \        P                  ! W P                  V4      4      # V P                  4       pV P                  R4       \        P                  ! W0P                  V4      4      # )r  rA  rZ  )r  r-  rk  r   Alignasr`   _parse_constant_expression)r%   rb   r   exprs   &   r   r  "CParser._parse_alignment_specifier  s    ll:&X##%%'')CLL"==ooc&:;;..0X}}T??3#788r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s       r   c                    V P                  R 4       V P                  R4       V P                  4       pV P                  R4       VP                  P                  R4       V# )r  rA  rZ  _Atomic)r  rk  r   rs   )r%   r   s   & r   r  CParser._parse_atomic_specifier  sK    YX##%X		#
r   c                H   < V ^8  d   QhRS[ R,          RS[RS[R,          /# )r   r  r   r=  r   )r	   rB   r   )r   r   s   "r   r   rD     s/      k*<@	k	r   c                    Ve   V.MV P                  VR7      .pV P                  R4      '       d$   VP                  V P                  VR7      4       K:  V# )Nr  COMMA)_parse_init_declaratorr  rs   )r%   r  r=  r   s   &&& r   r  #CParser._parse_init_declarator_list  sZ    
   G--g->? 	 ll7##LL44W4EFr   c                $   < V ^8  d   QhRS[ RR/# )r   r=  r   r   r5  )r   r   s   "r   r   rD   '  s     8 8d 8{ 8r   c                    V'       d   V P                  4       MV P                  4       pR pV P                  R4      '       d   V P                  4       p\	        W#R R7      # )Nr  r   )rT  _parse_declaratorr  r  rO   )r%   r=  r   r   s   &&  r   r  CParser._parse_init_declarator'  sL    .5t((*4;Q;Q;S<<!!**,D$77r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD   3  s     T T%** Tr   c                   V P                  4       pV P                  VP                  4      pV P                  4       R9   d   V P                  4       pV P                  4       R8X  d   V P                  4        V P	                  R4      '       d%   V! VP                  . V P                  V4      R7      # V P                  4       pV P                  R4       V! VP                  W@P                  V4      R7      # V! VP                  RV P                  V4      R7      # V P                  4       R8X  d|   V P                  4       pV P	                  R4      '       d   V! R. V P                  V4      R7      # V P                  4       pV P                  R4       V! RW@P                  V4      R7      # V P                  RV P                  V4      4       R# )r?  r  RBRACE)r   r   rl   Nz Invalid struct/union declaration>   r?  rB  )	r
  r   r_   r  r  r`   _parse_struct_declaration_listr  r^   )r%   rb   klassname_tokr   	brace_toks   &     r   r  (CParser._parse_struct_or_union_specifier3  so   mmo//		:?? 00}}H H,<<)) %^^2T__X=V  ;;=X&!uOOH<U  ^^4tx7P  ??(I||H%%$b	8RSS779ELL"d%y7QRR<dooc>RSr   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   rt  )r   r   s   "r   r   rD   T  s      UZZ0@ r   c                    . pV P                  4       R9  d*   V P                  4       pVf   K+  VP                  V4       K>  V# )N>   Nr  )r  _parse_struct_declarationrv  )r%   r   itemss   &  r   r  &CParser._parse_struct_declaration_listT  s>    oo'77224E}LLr   c                T   < V ^8  d   QhRS[ S[S[P                  ,          ,          /# r   )r	   r   r   r   )r   r   s   "r   r   rD   `  s"     
 
8D4D+E 
r   c           	     :   V P                  4       R 8X  d   V P                  4        R# V P                  4       R9   d   V P                  4       .# V P                  4       pRVP	                  R. 4      9  g   Q hRpV P                  4       '       g   V P                  4       R8X  d   V P                  4       pVe$   V P                  R 4       V P                  WR7      # \        VR,          4      ^8X  d{   VR,          ^ ,          p\        V\        P                  4      '       d   TpM\        P                  ! V4      pV P                  R 4       V P                  V\        VRRR7      .R7      # V P                  R 4       V P                  V\        RRRR7      .R7      # )	r}  Nr   r   COLONr   r   rC   r   r  )r  r
  r  r  r   rD  _parse_struct_declarator_listr  r   rz   r   r   r   r   rO   )r%   r   r   node	decl_types   &    r   r  !CParser._parse_struct_declaration`  sl   ??&MMO?? 7722455335B 7777""$$(9W(D668ELL +++CCtF|!<?D$

++ 	!006	LL ++$ID$"O!P ,   	V''d4FG ( 
 	
r   c                .   < V ^8  d   QhRS[ R,          /# r   r   r   )r   )r   r   s   "r   r   rD     s      tK/@ r   c                    V P                  4       .pV P                  R 4      '       d"   VP                  V P                  4       4       K8  V# r  )_parse_struct_declaratorr  rs   r  s   & r   r  %CParser._parse_struct_declarator_list  s<    ..01ll7##LL6689r   c                   < V ^8  d   QhRR/# r  r+   )r   r   s   "r   r   rD     s     = =+ =r   c                   V P                  R 4      '       d0   V P                  4       pR\        P                  ! RRRR4      RRRV/# V P	                  4       pV P                  R 4      '       d   V P                  4       pRVRRRV/# RVRRRR/# )r  r   Nr   r   )r  r  r   r   r  )r%   r   r   s   &  r   r   CParser._parse_struct_declarator  s    <<  557GtT4>7  %%'<<  557GD&$	7CCfdIt<<r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     = =uzz =r   c                l   V P                  R 4      pV P                  4       R9   d   V P                  4       pV P                  4       R8X  db   V P                  4        V P                  4       pV P                  R4       \        P
                  ! VP                  W0P                  V4      4      # \        P
                  ! VP                  RV P                  V4      4      # V P                  R4       V P                  4       pV P                  R4       \        P
                  ! RW0P                  V4      4      # )r  r  r  N>   r?  rB  )r  r  r
  _parse_enumerator_listr   r   r_   r`   )r%   rb   r  enumss   &   r   r  CParser._parse_enum_specifier  s    ll6"?? 00}}H H,335X&zz(..%9MNN::hnndDOOC4HIIX++-Xzz$s';<<r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s      

 r   c                "   V P                  4       p\        P                  ! V.VP                  4      pV P	                  R 4      '       dF   V P                  4       R8X  d    V# V P                  4       pVP                  P                  V4       K\  V# r  r  )_parse_enumeratorr   EnumeratorListrl   r  r  enumeratorsrs   )r%   enum	enum_lists   &  r   r  CParser._parse_enumerator_list  s{    %%'(($<	ll7## H,  ))+D!!((.r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s      5:: r   c                (   V P                  R 4      pV P                  R4      '       d   V P                  4       pMRp\        P                  ! VP
                  W P                  V4      4      pV P                  VP                  VP                  4       V# )r?  r  N)
r  r  r  r   
Enumeratorr_   r`   r   r   rl   )r%   r  r_   r  s   &   r   r  CParser._parse_enumerator  sn    <<%<<!!335EEx7PQTYY

3r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s      5:: r   c                <    V P                  R R R7      w  rVf   Q hV# )FrN  rO  )rV  )r%   r   r  s   &  r   r  CParser._parse_declarator  s1    ,, 5 - 
 r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     H Hejj Hr   c                (    V P                  R RR7      # )r   Tr   allow_paren_parse_declarator_kindrt   s   &r   rT  CParser._parse_id_declarator  s    **$*GGr   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     L L%** Lr   c                (    V P                  R RR7      # )typeidTr  r  rt   s   &r   rS   CParser._parse_typeid_declarator  s    **d*KKr   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     M M%** Mr   c                (    V P                  R RR7      # )r  Fr  r  rt   s   &r   rR  (CParser._parse_typeid_noparen_declarator  s    **e*LLr   c                @   < V ^8  d   QhRS[ RS[RS[P                  /# r   r   r  r   r   rB   r   r   )r   r   s   "r   r   rD     s&      3 T ejj r   c                    R pV P                  4       R8X  d   V P                  4       pV P                  WR7      pVe   V P                  WC4      # V# )Nr@  r  )r  _parse_pointer_parse_direct_declaratorr   )r%   r   r  ptrdirects   &&&  r   r  CParser._parse_declarator_kind  sR    ??'%%'C..t.M?))&66r   c                @   < V ^8  d   QhRS[ RS[RS[P                  /# r  r  )r   r   s   "r   r   rD     s)     / //&*/	/r   c           	     h   V'       d=   V P                  R 4      '       d&   V P                  VRR7      pV P                  R4       M^VR8X  d   V P                  R4      pMV P                  R4      p\        P                  ! VP
                  RRRV P                  V4      R7      pV P                  V4      # )	rA  Tr  rZ  r   r?  rB  Nr   )r  r  r  r   r   r_   r`   _parse_decl_suffixes)r%   r   r  r   r  s   &&&  r   r    CParser._parse_direct_declarator  s     4<<11..t.FDLL"t|<<-<<1>>!ooh/D ((..r   c                N   < V ^8  d   QhRS[ P                  RS[ P                  /# )r   r   r   r  )r   r   s   "r   r   rD     s#       

 r   c                     V P                  4       R8X  d#   V P                  WP                  V4      4      pK8  V P                  4       R8X  d%   V P                  V4      pV P                  W4      pKq   V# )zAParse a chain of array/function suffixes and attach them to decl.ra  rA  )r  r   _parse_array_decl_parse_function_decl)r%   r   r  s   && r   r&  CParser._parse_decl_suffixes  sl     J.--d4J4J44PQ H,006--d9r   c                N   < V ^8  d   QhRS[ P                  RS[ P                  /# r   	base_declr   r  )r   r   s   "r   r   rD   	  s'     T T5:: T%** Tr   c                <    V P                  R VP                  R7      # N)	base_typerl   )_parse_array_decl_commonrl   )r%   r/  s   &&r   r*  CParser._parse_array_decl	  s    ,,t9??,SSr   c                t   < V ^8  d   QhRS[ S[P                  ,          RS[ S[,          RS[P                  /# )r   r2  rl   r   r	   r   r   r   )r   r   s   "r   r   rD     s6     7( 7(!%**-7(6>uo7(	7(r   c                  aa V P                  R4      pSf   V P                  V4      oVV3R lpV P                  R4      '       dL   R.V P                  4       ;'       g    . ,           pV P	                  4       pV P                  R4       V! We4      # V P                  4       \        9   Ed   V P                  4       ;'       g    . pV P                  R4      '       d4   VR.,           pV P	                  4       pV P                  R4       V! We4      # V P                  R4      pV'       dJ   V P                  R4       \        P                  ! VP                  V P                  V4      4      pV! We4      # RpV P                  4       '       d   V P	                  4       pV P                  R4       V! We4      # V P                  R4      pV'       dK   V P                  R4       \        P                  ! VP                  V P                  V4      4      pV! V. 4      # RpV P                  4       '       d   V P	                  4       pV P                  R4       V! V. 4      # )a	  Parse an array declarator suffix and return an ArrayDecl node.

base_type:
    Base declarator node to attach (None for direct-declarator parsing,
    TypeDecl for abstract declarators).

coord:
    Coordinate to use for the ArrayDecl. If None, uses the '[' token.
ra  Nc                 6   < \         P                  ! SWSR 7      # ))rC   dim	dim_qualsrl   )r   	ArrayDecl)r9  r:  r2  rl   s   &&r   make_array_decl9CParser._parse_array_decl_common.<locals>.make_array_decl  s    ??CE r   STATICstaticRBRACKETr@  )r  r`   r  r  _parse_assignment_expressionr  r[  r   r?  r_   r2  )r%   r2  rl   
lbrack_tokr<  r:  r9  	times_toks   &ff     r   r3   CParser._parse_array_decl_common  s    \\*-
=OOJ/E	
 <<!!!
d&E&E&G&M&M2NI335CLL$"322??/779??RI||H%%%
2	779Z(&s66W-IZ(hhy	0JK&s66C&&((779LL$"322LL)	LL$((9??DOOI,FGC"3++""$$335CZ sB''r   c                N   < V ^8  d   QhRS[ P                  RS[ P                  /# r.  r  )r   r   s   "r   r   rD   F  s#      ejj UZZ r   c                Z   V P                  R 4       V P                  R4      '       d   RpMGV P                  4       '       d   V P                  4       MV P	                  4       pV P                  R4       \
        P                  ! VRVP                  R7      pV P                  4       R8X  d   VP                  es   VP                  P                   FX  p\        V\
        P                  4      '       d    V# \        VRR4      pV'       g   K=  V P                  WTP                  4       KZ  	  V# )rA  rZ  NargsrC   rl   r  r   )r  r  r-  _parse_parameter_type_list_parse_identifier_list_optr   r   rl   r  rH  paramsr   EllipsisParamgetattrr   )r%   r/  rH  r  paramr   s   &&    r   r+  CParser._parse_function_declF  s    X<<!!D ++-- //1446 
 LL"~~4d)//J??(yy$!YY--E!%)<)<==
 	 #5&$7Dt,,T;;? . r   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   r	   r   r   )r   r   s   "r   r   rD   `  s       4 r   c                6   . pV P                  R 4      pV'       dO   V P                  4       ;'       g    . pVP                  W0P                  V4      34       V P                  R 4      pKV  V'       g   R# RpV F  w  r5\        P
                  ! W4VR7      pK  	  V# )r@  N)r   rC   rl   )r  r  rs   r`   r   PtrDecl)r%   starsrC  r   r!  rl   s   &     r   r  CParser._parse_pointer`  s    LL)	335;;ELL%!;<=W-I!LE--eUCC "
r   c                4   < V ^8  d   QhRS[ P                  /# r   r   	ParamList)r   r   s   "r   r   rD   q  s      EOO r   c                8   V P                  4       pV P                  4       R 8X  du   V P                  ^4      R8X  d_   V P                  4        V P                  4       pVP                  P	                  \
        P                  ! V P                  V4      4      4       V# r  ELLIPSIS)_parse_parameter_listr  r
  rK  rs   r   rL  r`   )r%   rK  ell_toks   &  r   rI  "CParser._parse_parameter_type_listq  sn    ++-??'DOOA,>*,LMMOmmoGMM  !4!4T__W5M!NOr   c                4   < V ^8  d   QhRS[ P                  /# r   rW  )r   r   s   "r   r   rD   z  s      u r   c                6   V P                  4       p\        P                  ! V.VP                  4      pV P	                  4       R 8X  dR   V P	                  ^4      R8w  d<   V P                  4        VP                  P                  V P                  4       4       Kf  V# rZ  )_parse_parameter_declarationr   rX  rl   r  r
  rK  rs   r%   r  rK  s   &  r   r\  CParser._parse_parameter_listz  sn    113%%++6oo7*tq/AZ/OMMOMM  !B!B!DEr   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     I Iejj Ir   c           	        V P                  R R7      w  rpVR,          '       g   \        P                  ! R.VR7      .VR&   V P                  4       '       dW   V P	                  R R R7      w  rEV'       d(   V P                  V\        VRRR7      .R7      ^ ,          # V P                  WV4      # V P                  4       pV P                  WV4      # )	Tr  rC   r*   r   r
  Nr   r  )	r  r   r   rD  rV  r   rO   _build_parameter_declarationrQ  )r%   r   r  r  r   is_nameds   &     r   ra  $CParser._parse_parameter_declaration  s    "@@t@TF||!00%
KLDL""$$!77#d 8 ND //d4&N%O 0   44TLL22400ZHHr   c                x   < V ^8  d   QhRRRS[ S[P                  ,          RS[ S[,          RS[P                  /# )r   r   r   r   r  r   r6  )r   r   s   "r   r   rD     s?     < <<'/

';<IQRW<	<r   c                   \        VR ,          4      ^8  d   \        VR ,          R,          P                  4      ^8X  d^   V P                  VR ,          R,          P                  ^ ,          4      '       d(   V P                  V\	        VRRR7      .R7      ^ ,          # \
        P                  ! RVR,          RT;'       g    \
        P                  ! RRRR4      VR7      pV P                  W!R ,          4      # )rC   Nr   r  r9   r   r   r   r   rC   rl   r   )	rz   r   r   r   rO   r   r   r   r   )r%   r   r   r  s   &&&&r   rf  $CParser._build_parameter_declaration  s     V!DL$**+q0&&tF|B'7'='=a'@AA++$DtT"J!K ,   ~~v,??dD$?
 ''6l;;r   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   rQ  )r   r   s   "r   r   rD     s     - -HUZZ,@ -r   c                P    V P                  4       R 8X  d   R# V P                  4       # rZ  N)r  _parse_identifier_listrt   s   &r   rJ  "CParser._parse_identifier_list_opt  s#    ??(**,,r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s      

 r   c                    V P                  4       p\        P                  ! V.VP                  4      pV P	                  R 4      '       d,   VP
                  P                  V P                  4       4       KB  V# r  )_parse_identifierr   rX  rl   r  rK  rs   rb  s   &  r   rp  CParser._parse_identifier_list  sU    &&(%%++6ll7##MM  !7!7!9:r   c                4   < V ^8  d   QhRS[ P                  /# r   )r   r   )r   r   s   "r   r   rD     s     V V%.. Vr   c                   V P                  4       pV P                  4       pR pVe   VP                  pM)VR,          '       d   VR,          ^ ,          P                  p\        P                  ! RVR,          R,          R T;'       g    \        P
                  ! R R R R 4      VR7      p\        \        P                  V P                  WAR,          4      4      # )NrC   r9   r   r   rk  )r  rQ  rl   r   r   r   r   r   )r%   r   r   rl   r   s   &    r   rk  CParser._parse_type_name  s    335224JJE&\\LO))E>>v,q/??dD$?
 ENND$<$<XF|$TUUr   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   rQ  )r   r   s   "r   r   rD     s      0D r   c                J   V P                  4       R 8X  dh   V P                  4       pV P                  4       '       d   V P                  4       pM\        P
                  ! RRRR4      pVf   Q hV P                  W!4      # V P                  4       '       d   V P                  4       # R# )r@  N)r  r  rb  !_parse_direct_abstract_declaratorr   r   r   )r%   r!  r   s   &  r   rQ  &CParser._parse_abstract_declarator_opt  s    ??'%%'C6688==?~~dD$=?"?))$44224499;;r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     / /5:: /r   c           	     V   V P                  R 4      pV'       d   V P                  4       '       g   V P                  4       R8X  db   V P                  4       pV P	                  R4       \
        P                  ! V\
        P                  ! RRRR4      V P                  V4      R7      pMtV P                  4       pV P	                  R4       Vf   Q hMLV P                  4       R8X  d   V P                  4       pM&V P                  RV P                  P                  4       V P                  X4      # )rA  rZ  NrG  ra  zInvalid abstract declarator)r  r-  r  _parse_parameter_type_list_optr  r   r   r   r`   rQ  _parse_abstract_array_baser^   rN   rV   r&  )r%   rl  rK  r   s   &   r   r{  )CParser._parse_direct_abstract_declarator  s    \\(+
''))T__->(-J<<>X&~~dD$?//*5 ::<X&'''__*,224D;TYY=O=OP((..r   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   )r	   r   rX  )r   r   s   "r   r   rD     s     1 10I 1r   c                P    V P                  4       R 8X  d   R# V P                  4       # ro  )r  rI  rt   s   &r   r  &CParser._parse_parameter_type_list_opt  s#    ??(..00r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     
 
EJJ 
r   c                V    V P                  \        P                  ! R R R R 4      R R7      # r1  )r3  r   r   rt   s   &r   r  "CParser._parse_abstract_array_base  s.    ,,nnT4t<D - 
 	
r   c                h   < V ^8  d   QhRS[ P                  S[S[ P                  ,          ,          /# r   r   r   r   )r   r   s   "r   r   rD     s&     : :%**tEJJ/?"? :r   c                   V P                  4       pT;;R 8X  d   M
;R8X  d   M M  V P                  4       # ;R8X  d(   V P                  ^4      R8X  d    V P                  4       # ;R8X  d    V P                  4       # ;;R8X  d   M
;R8X  d   M M  V P                  4       # ;;R8X  d   M;R8X  d   M
;R	8X  d   M M  V P	                  4       # ;;R
8X  d   M;R8X  d   M;R8X  d   M
;R8X  d   M M  V P                  4       # ;;R8X  d   M
;R8X  d   M M  V P                  4       # R8X  d   V P                  4       #  V P                  4       # )CASEDEFAULTr?  r  r  IFSWITCHWHILEDOFORGOTOBREAKCONTINUERETURNr  r  r~  )	r  _parse_labeled_statementr  _parse_selection_statement_parse_iteration_statement_parse_jump_statementr  r  _parse_expression_statementr8  s   & r   _parse_statementCParser._parse_statement  s    ??$#)#4466+w644665577 6688'4%'66889'J91133'i'5577!00227799r   c                h   < V ^8  d   QhRS[ P                  S[S[ P                  ,          ,          /# r   r  )r   r   s   "r   r   rD   $  s&     ' '

T%**=M0M 'r   c                    V P                  4       R9   dQ   V P                  4       pV P                  4       p\        P                  ! W.,           V^ ,          P
                  R7      # V P                  4       # )r  block_itemsrl   r  )r  _parse_pppragma_directive_listr  r   Compoundrl   )r%   pragmasstmts   &  r   _parse_pragmacomp_or_statement&CParser._parse_pragmacomp_or_statement$  s]    ?? 7799;G((*D>>g.>gajFVFVWW$$&&r   c                h   < V ^8  d   QhRS[ P                  S[S[ P                  ,          ,          /# r   r  )r   r   s   "r   r   rD   ,  s&     ' '5::UZZ0@#@ 'r   c                n    V P                  4       '       d   V P                  4       # V P                  4       # rr   )r-  r  r  rt   s   &r   _parse_block_itemCParser._parse_block_item,  s/    ##%%**,,$$&&r   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   rt  )r   r   s   "r   r   rD   2  s     
 
UZZ(8 
r   c                    . pV P                  4       R9  dW   V P                  4       p\        V\        4      '       d   VR.8X  d   KE  VP	                  V4       KX  VP                  V4       Kk  V# )r  N>   Nr  )r  r  r   listrv  rs   )r%   r  items   &  r   _parse_block_item_listCParser._parse_block_item_list2  s[    oo'77))+D$%%D6>T"T"r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD   ?  s     
 
5:: 
r   c                .   V P                  R 4      pV P                  R4      '       d(   \        P                  ! RV P	                  V4      R7      # V P                  4       pV P                  R4       \        P                  ! W P	                  V4      R7      # )r  r  Nr  )r  r  r   r  r`   r  )r%   
lbrace_tokr  s   &  r   r  !CParser._parse_compound_statement?  sp    \\(+
<<!!>>d$//*:UVV113X~~#??:+F
 	
r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD   L  s     S S%** Sr   c                L   V P                  4       pT;R 8X  d    V P                  4       pV P                  R4       V P                  4       '       d   V P	                  4       pM%\
        P                  ! V P                  V4      4      p\
        P                  ! VP                  W0P                  V4      4      # ;R8X  d    V P                  4       pV P                  4       pV P                  R4       V P                  4       '       d   V P	                  4       pM%\
        P                  ! V P                  V4      4      p\
        P                  ! WS.V P                  V4      4      # R8X  d   V P                  4       pV P                  R4       V P                  4       '       d   V P	                  4       pM%\
        P                  ! V P                  V4      4      p\
        P                  ! V.V P                  V4      4      #  V P                  RV P                  P                  4       R# )r?  r  r  r  zInvalid labeled statementN)r  r
  r  r:  r  r   EmptyStatementr`   Labelr_   r  CaseDefaultr^   rN   rV   )r%   r9  r  r  case_tokr  def_toks   &      r   r   CParser._parse_labeled_statementL  s   ??$==?W%))++>>@D //0IJD{{8>>49RSS==?668W%))++>>@D //0IJDzz$0IJJ--/W%))++>>@D //0HID}}dVT__W-EFF!!"=tyy?Q?QRr   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD   m  s     W WEJJ Wr   c           	        V P                  4       pVP                  ;R 8X  d    V P                  R4       V P                  4       pV P                  R4       V P	                  4       pV P                  R4      '       d7   V P	                  4       p\        P                  ! W#W@P                  V4      4      # \        P                  ! W#RV P                  V4      4      # R8X  dr   V P                  R4       V P                  4       pV P                  R4       V P	                  4       p\        \        P                  ! WVV P                  V4      4      4      #  V P                  RV P                  V4      4       R# )r  rA  rZ  ELSENr  zInvalid selection statement)r
  rC   r  _parse_expressionr  r  r   Ifr`   r   Switchr^   )r%   rb   cond	then_stmt	else_stmtr  r  s   &      r   r  "CParser._parse_selection_statementm  s   mmohhX&--/X& ??A	<<'' $ C C EI 88DYPS@TUUxxts7KLLX&--/X&::<'TQTAU(VWW!!"?QTAUVr   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     &W &WEJJ &Wr   c           	     p   V P                  4       pVP                  ;R 8X  dj    V P                  R4       V P                  4       pV P                  R4       V P	                  4       p\
        P                  ! W#V P                  V4      4      # ;R8X  d    V P	                  4       pV P                  R 4       V P                  R4       V P                  4       pV P                  R4       V P                  R4       \
        P                  ! W#V P                  V4      4      # R8X  Edp   V P                  R4       V P                  4       '       d   V P                  4       p\
        P                  ! W@P                  V4      4      pV P                  4       pV P                  R4       V P                  4       pV P                  R4       V P	                  4       p\
        P                  ! WRWcV P                  V4      4      # V P                  4       pV P                  R4       V P                  4       pV P                  R4       V P                  4       pV P                  R4       V P	                  4       p\
        P                  ! WRWcV P                  V4      4      #  V P                  RV P                  V4      4       R# )r  rA  rZ  r  r}  r  zInvalid iteration statementN)r
  rC   r  r  r  r   Whiler`   DoWhiler-  r  DeclList_parse_expression_optForr^   )r%   rb   r  r  r   r   	next_exprs   &      r   r  "CParser._parse_iteration_statement  s   mmohhX&--/X&::<{{4ts/CDD::<W%X&--/X&V$}}T1EFFX&++-- 335E >>%1EFD557DLL( $ : : <ILL*>>@D 99T$//RUBVWW113V$113V$ 668	X&::<yyYdooc>RSS!!"?QTAUVr   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     R Ruzz Rr   c                >   V P                  4       pVP                  ;R 8X  dT    V P                  R4      pV P                  R4       \        P                  ! VP
                  V P                  V4      4      # ;R8X  d8    V P                  R4       \        P                  ! V P                  V4      4      # ;R8X  d8    V P                  R4       \        P                  ! V P                  V4      4      # R8X  d   V P                  R4      '       d'   \        P                  ! RV P                  V4      4      # V P                  4       pV P                  R4       \        P                  ! W0P                  V4      4      #  V P                  RV P                  V4      4       R# )r  r?  r}  r  r  r  NzInvalid jump statement)r
  rC   r  r   Gotor_   r`   BreakContinuer  Returnr  r^   )r%   rb   r  r  s   &   r   r  CParser._parse_jump_statement  s   mmohh<<-V$zz(..$//#2FGGV${{4??3#788V$~~dooc&:;;<<'' <<dooc.BCC--/V$||D//#*>??!!":DOOC<PQr   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s      UZZ r   c                    V P                  4       pV P                  R 4      pVf&   \        P                  ! V P	                  V4      4      # V# r  )r  r  r   r  r`   )r%   r  semi_toks   &  r   r  #CParser._parse_expression_statement  sB    ))+<<'<''(ABBr   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   rQ  )r   r   s   "r   r   rD     s      x

'; r   c                R    V P                  4       '       d   V P                  4       # R # rr   )r2  r  rt   s   &r   r  CParser._parse_expression_opt  s#    ""$$))++r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     1 15:: 1r   c                &   V P                  4       pV P                  R 4      '       g   V# WP                  4       .pV P                  R 4      '       d"   VP                  V P                  4       4       K8  \        P                  ! W!P
                  4      # r  rA  r  rs   r   ExprListrl   r%   r  exprss   &  r   r  CParser._parse_expression  sl    002||G$$K88:;ll7##LL::<=~~eZZ00r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s      ejj r   c                   V P                  4       R 8X  dJ   V P                  ^4      R8X  d4   V P                  4        V P                  4       pV P                  R4       V# V P	                  4       pV P                  4       '       dL   V P                  4       P                  pV P                  4       p\        P                  ! W2WBP                  4      # V# )rA  r  rZ  )r  r
  r  r  _parse_conditional_expressionrg  r_   rA  r   
Assignmentrl   )r%   compr  oprhss   &    r   rA  $CParser._parse_assignment_expression  s    ??(T__Q-?8-KMMO113DLL"K113!!##&&B335C##Bc::>>r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s      uzz r   c                    V P                  4       pV P                  R 4      '       dS   V P                  4       pV P                  R4       V P	                  4       p\
        P                  ! WW1P                  4      # V# )CONDOPr  )_parse_binary_expressionr  r  r  r  r   	TernaryOprl   )r%   r  iftrueiffalses   &   r   r  %CParser._parse_conditional_expression  sa    ,,.<<!!++-FLL!88:G??4**EEr   c                d   < V ^8  d   QhRS[ RS[S[P                  ,          RS[P                  /# )r   min_preclhsr   )r*   r	   r   r   )r   r   s   "r   r   rD     s2      &.uzz&:	r   c                   Vf   V P                  4       p V P                  4       pVe   VP                  \        9  d    V# \        VP                  ,          pWA8  d    V# VP                  pV P                  4        V P                  4       p V P                  4       pVe   VP                  \        9  d   M1\        VP                  ,          pW8  d   V P                  W4      pK[   \        P                  ! WRWbP                  4      pK  rr   )
_parse_cast_expressionr]   rC   _BINARY_PRECEDENCEr_   r
  r  r   BinaryOprl   )	r%   r  r  rb   precr  r  next_tok	next_precs	   &&&      r   r   CParser._parse_binary_expression  s     ;--/C**,C{chh.@@* 
) &chh/D$ 
! BMMO--/C::<#x}}<N'N.x}}=	#77	GC..#yy9Cr   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     . .

 .r   c                ,   V P                  4       pVer   Vw  r#pV P                  4       R8X  d"   V P                  V4       V P                  4       # V P                  4       p\        P
                  ! W%V P                  V4      4      # V P                  4       # )Nr  )rm  r  r"  r  r   Castr`   _parse_unary_expression)r%   resultr   r  rl  r  s   &     r   r  CParser._parse_cast_expression  s    002$*!Cz H, D! ++-- 224zz#T__Z-HII++--r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD   4  s     0 0 0r   c                   V P                  4       pVR9   dL   V P                  4       pV P                  4       p\        P                  ! VP
                  W3P                  4      # VR9   dL   V P                  4       pV P                  4       p\        P                  ! VP
                  W3P                  4      # VR8X  d   V P                  4       pV P                  4       pVe7   Vw  p p\        P                  ! VP
                  WPP                  V4      4      # V P                  4       p\        P                  ! VP
                  W0P                  V4      4      # VR8X  ds   V P                  4       pV P                  R4       V P                  4       pV P                  R4       \        P                  ! VP
                  WPP                  V4      4      # V P                  4       # )PLUSPLUSSIZEOF_ALIGNOFrA  rZ     r	  
MINUSMINUS>   ANDNOTLNOTPLUSMINUSr@  )r  r
  r  r   UnaryOpr_   rl   r  rm  r`   r  rk  _parse_postfix_expression)r%   r9  rb   r  r  r   r  s   &      r   r  CParser._parse_unary_expression4  sf   ??$11--/C//1D==D**==GG--/C..0D==D**==x--/C446F!"	Q}}SYY__S5IJJ//1D==D//#2FGGz!--/CLL"'')CLL"==C1EFF--//r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD   T  s     . .5:: .r   c                6   V P                  4       pVev   Vw  r#pV P                  R4      '       dI   V P                  4       pV P                  R4       V P                  R4       \        P
                  ! W%4      # V P                  V4       V P                  4       p V P                  R4      '       dE   V P                  4       pV P                  R4       \        P                  ! WgVP                  4      pK\  V P                  R4      '       dm   V P                  4       R8X  d   V P                  4        R pM!V P                  4       pV P                  R4       \        P                  ! WhVP                  4      pK  V P                  4       R
9   d   V P                  4       p	V P                  4       p
V
P                  R9  d"   V P!                  RV P#                  V
4      4       \        P$                  ! V
P&                  V P#                  V
4      4      p\        P(                  ! WiP&                  WP                  4      pEK  V P                  4       R9   dF   V P                  4       p\        P*                  ! R	VP&                  ,           WfP                  4      pEK   V# )Nr  r  r  ra  r@  rA  rZ  zInvalid struct referencep>   ARROWPERIOD>   r?  rB  r  )rm  r  _parse_initializer_listr  r   CompoundLiteralr"  _parse_primary_expressionr  ArrayRefrl   r  r
  _parse_argument_expression_listFuncCallrC   r^   r`   r?  r_   	StructRefr  )r%   r  r   r  r  r   r  subrH  op_tokr  fieldrb   s   &            r   r  !CParser._parse_postfix_expressionT  s   002!LCq ||H%%335W%X&,,S77D!--/||J'',,.Z(~~d<||H%%??$0MMOD??ADLL*~~d$**= $77==?==(88%%2DOOH4M 1JKt\\5**M $>>mmo}}S399_dJJGr   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     !D !D5:: !Dr   c                r   V P                  4       pVR 8X  d   V P                  4       # V\        9   g   V\        9   g   V\        9   d   V P                  4       # V\        9   d   V P                  4       # V\        9   d   V P                  4       # VR8X  d4   V P                  4        V P                  4       pV P                  R4       V# VR8X  d   V P                  4       pV P                  R4       V P                  4       pV P                  R4       V P                  4       pV P                  R4       V P                  V4      p\         P"                  ! \         P$                  ! VP&                  V4      \         P(                  ! WE.V4      V4      # V P+                  RV P,                  P.                  4       R# )r?  rA  rZ  OFFSETOFr  zInvalid expressionN)r  rt  
_INT_CONST_FLOAT_CONST_CHAR_CONST_parse_constant_STRING_LITERAL_parse_unified_string_literal_WSTR_LITERAL_parse_unified_wstring_literalr
  r  r  rk  !_parse_offsetof_member_designatorr`   r   r   r?  r_   r  r^   rN   rV   )r%   r9  r  off_tokr   
designatorrl   s   &      r   r  !CParser._parse_primary_expression  s_   ??$t))++
"<';&''))&5577}$6688xMMO))+DLL"Kz!mmoGLL"'')CLL!??AJLL"OOG,E>>.0%8  	.		0B0BCr   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s      5:: r   c                v   V P                  4       p V P                  R4      '       d5   V P                  4       p\        P                  ! VRW!P                  4      pKL  V P                  R4      '       dE   V P                  4       pV P                  R4       \        P                  ! WVP                  4      pK   V# )Tr  .ra  r@  )_parse_identifier_or_typeidr  r   r!  rl   r  r  r  )r%   r  r$  r  s   &   r   r1  )CParser._parse_offsetof_member_designator  s    //1||H%%88:tS%D||J''--/Z(~~d$**=r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     1 1 1r   c                    V P                  4       pV.pV P                  R 4      '       d"   VP                  V P                  4       4       K8  \        P                  ! W!P
                  4      # r  r  r  s   &  r   r  'CParser._parse_argument_expression_list  sN    002ll7##LL::<=~~eZZ00r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     4 4EJJ 4r   c                "    V P                  4       # rr   )r  rt   s   &r   r  "CParser._parse_constant_expression  s    1133r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     9 95:: 9r   c                    V P                  R 4      p\        P                  ! VP                  V P	                  V4      4      # )r?  )r  r   r?  r_   r`   r	  s   & r   rt  CParser._parse_identifier  s.    ll4 xx		4??3#788r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     9 9UZZ 9r   c                    V P                  4       pVP                  R9  d"   V P                  RV P                  V4      4       \        P
                  ! VP                  V P                  V4      4      # )r?  zExpected identifier>   r?  rB  )r
  rC   r^   r`   r   r?  r_   r	  s   & r   r8  #CParser._parse_identifier_or_typeid  sR    mmo88++3T__S5IJxx		4??3#788r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     D D Dr   c                z   V P                  4       pVP                  \        9   d   ^ p^ pVP                  RR  F'  pVR9   d   V^,          pK  VR9   g   K  V^,          pK)  	  V^8  d   \	        R4      hV^8  d   \	        R4      hRV,          RV,          ,           p\
        P                  ! VR,           VP                  V P                  V4      4      # VP                  \        9   di   VP                  R,          R9   d   RpMVP                  R,          R9   d   RpMR	p\
        P                  ! WaP                  V P                  V4      4      # VP                  \        9   d2   \
        P                  ! R
VP                  V P                  V4      4      # V P                  RV P                  V4      4       R# )r   Nz.Constant cannot have more than one u/U suffix.z.Constant cannot have more than two l/L suffix.z	unsigned zlong r*   floatzlong doubledoublecharzInvalid constant)lL)uUr   )fF)r
  rC   r)  r_   
ValueErrorr   Constantr`   r*  r+  r^   )r%   rb   u_countl_countchprefixr   s   &      r   r,  CParser._parse_constant  sX   mmo88z!GGiin#qLG:%qLG	 %
 { !QRR{ !QRR 7*Ww->>F>>&5.#))T__S=QRR88|#yy}
*2*,!>>!YY0DEE88{">>&#))T__S5IJJ,dooc.BCr   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s      uzz r   c                0   V P                  R 4      p\        P                  ! RVP                  V P	                  V4      4      pV P                  4       R 8X  d?   V P                  4       pVP                  RR VP                  R,          ,           Vn        KS  V# )STRING_LITERALstringN:ry   NNr   )r  r   rS  r_   r`   r  r
  r%   rb   r  tok2s   &   r   r.  %CParser._parse_unified_string_literal  sn    ll+,~~h		4??33GHoo#33==?DCR4::b>9DJr   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s      

 r   c                   V P                  4       pVP                  \        9  d"   V P                  R V P	                  V4      4       \
        P                  ! RVP                  V P	                  V4      4      pV P                  4       \        9   dM   V P                  4       pVP                  P                  4       RR VP                  R,          ,           Vn        Ke  V# )zInvalid string literalr\  N:r   NNr   )
r
  rC   r/  r^   r`   r   rS  r_   r  rstripr]  s   &   r   r0  &CParser._parse_unified_wstring_literal  s    mmo88=(68LM~~h		4??33GHoo=0==?D**,Sb1DJJrNBDJr   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     
3 
3EJJ 
3r   c                6   V P                  R 4      pV'       dr   V P                  R4      '       d'   \        P                  ! . V P                  V4      4      # V P	                  4       pV P                  R4       V P                  R4       V# V P                  4       # )r  r  r  )r  r   InitListr`   r  r  rA  )r%   r  	init_lists   &  r   r  CParser._parse_initializer  sw    \\(+
||H%%~~b$//**EFF446ILL!LL"0022r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD     s     5 5 5r   c                   V P                  4       .pV P                  R 4      '       d8   V P                  4       R8X  d   M!VP                  V P                  4       4       KN  \        P
                  ! W^ ,          P                  4      # r  )_parse_initializer_itemr  r  rs   r   rf  rl   )r%   r  s   & r   r  CParser._parse_initializer_list  s`    --/0ll7## H,LL5578~~e1X^^44r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD   %  s       r   c                    R pV P                  4       R9   d   V P                  4       pV P                  4       pVe   \        P                  ! W4      # V# )N   r  ra  )r  _parse_designationr  r   NamedInitializer)r%   designationr   s   &  r   rk  CParser._parse_initializer_item%  sO    ?? 66113K&&("))+<<r   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   rt  )r   r   s   "r   r   rD   /  s      D$4 r   c                H    V P                  4       pV P                  R 4       V# )r  )_parse_designator_listr  r%   designatorss   & r   rp  CParser._parse_designation/  s"    113Xr   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   rt  )r   r   s   "r   r   rD   5  s      UZZ(8 r   c                v    . pV P                  4       R9   d"   VP                  V P                  4       4       K6  V# )ra  ro  )r  rs   _parse_designatorrw  s   & r   rv  CParser._parse_designator_list5  s4    oo#99t5578r   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD   =  s     D D5:: Dr   c                   V P                  R 4      '       d$   V P                  4       pV P                  R4       V# V P                  R4      '       d   V P                  4       # V P	                  RV P
                  P                  4       R# )ra  r@  r  zInvalid designatorN)r  r  r  r8  r^   rN   rV   )r%   r  s   & r   r|  CParser._parse_designator=  si    <<
##224DLL$K<<!!3355.		0B0BCr   c                    < V ^8  d   QhRS[ /# r   )r   )r   r   s   "r   r   rD   J  s     P PX Pr   c                j    V P                  R 4      pV P                  RV P                  V4      4       R# )r|  zDirectives not supported yetN)r  r^   r`   r	  s   & r   r  CParser._parse_pp_directiveJ  s*    ll8$8$//#:NOr   c                4   < V ^8  d   QhRS[ P                  /# r   r  )r   r   s   "r   r   rD   P  s     @ @5:: @r   c                   V P                  4       R 8X  d   V P                  4       pV P                  4       R8X  dA   V P                  4       p\        P                  ! VP                  V P                  V4      4      # \        P                  ! RV P                  V4      4      # V P                  4       R8X  dh   V P                  4       pV P                  R4      pV P                  4       pV P                  R4       \        P                  ! W@P                  V4      4      # V P                  RV P                  P                  4       R# )r  PPPRAGMASTRr9   r  rA  rZ  zInvalid pragmaN)r  r
  r   Pragmar_   r`   r  r.  r^   rN   rV   )r%   rb   str_toklparenliterals   &    r   r  !CParser._parse_pppragma_directiveP  s    ??
*--/C M1--/||GMM4??73KLL<<DOOC$899??	)--/C\\(+F88:GLL"<<)@AA*DII,>,>?r   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   rt  )r   r   s   "r   r   rD   b  s      UZZ0@ r   c                v    . pV P                  4       R9   d"   VP                  V P                  4       4       K6  V# )r  r  )r  rs   r  )r%   r  s   & r   r  &CParser._parse_pppragma_directive_listb  s1    oo#::NN499;<r   c                D   < V ^8  d   QhRS[ S[P                  ,          /# r   rt  )r   r   s   "r   r   rD   i  s      E Ed5::&6 Er   c                (   V P                  R 4      pV P                  R4       V P                  4       pRpV P                  R4      '       d   V P                  4       pV P                  R4       \        P
                  ! W#V P                  V4      4      .# )r~  rA  Nr  rZ  )r  r  r  r.  r   StaticAssertr`   )r%   rb   r  rk   s   &   r   r  CParser._parse_static_asserti  sx    ll+,X..0<<  446CX""4dooc.BCDDr   )rP   rR   rN   )r9   Frr   )Fry   )FFr+  )Tr   N)~r,   r-   r.   r/   r0   r   rS   rc   rh   r^   ru   r|   r   r   r   rJ   rK   rL   rM   r   r   r   r   r   r   r]   r  r
  r  r  r  r"  r`   r-  r2  r:  rD  rK  rV  rI  rb  rg  rm  r\   rq  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rT  rS  rR  r  r   r&  r*  r3  r+  r  rI  r\  ra  rf  rJ  rp  rk  rQ  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rA  r  r  r  r  r  r  r1  r  r  rt  r8  r,  r.  r0  r  r  rk  rp  rv  r|  r  r  r  r  r2   r3   r4   s   @r   r8   r8   2   s    	 "$("* = =8 8J J, ,) )   + +	, 	, : :  , ,T X& &P ,e eN
 
* $ $5 5
 	 	 # #! !3 3' '. .) ), ,# # 6! !F; ;? ?% %6= = M Ml ? ?' 'T v+ v+v` `F 9 9  8 8T TB 
 
D = =$= ="   H HL LM M / /* T T7( 7(t 4 "  I I&< <,- - V V( $/ /.1 1
 
: :.' '' '
 

 
S SBW W2&W &WTR R.  1 1    D. .*0 0@. .d!D !DJ  1 14 49 9
9 9D D@   
3 
35 5   D DP P@ @$ E Er   r8   LORLANDORXORr  EQNEGTGELTLERSHIFTLSHIFTr  r  r@  DIVIDEMODINLINE	_NORETURNFLOAT_CONSTHEX_FLOAT_CONSTr[  c                      a  ] tR tRt o RtV 3R lR ltRV 3R lR lltV 3R lR ltV 3R	 lR
 ltV 3R lR lt	V 3R lR lt
RtV tR# )rQ   i  zWraps a lexer to provide convenient, buffered access to the underlying
token stream. The lexer is expected to be initialized with the input
string already.
c                $   < V ^8  d   QhRS[ RR/# )r   r<   r   N)r   )r   r   s   "r   r   _TokenStream.__annotate__	  s      f  r   c                .    Wn         . V n        ^ V n        R# r  )_lexer_buffer_index)r%   r<   s   &&r   rS   _TokenStream.__init__	  s    /1r   c                6   < V ^8  d   QhRS[ RS[S[,          /# r   r   )r   r   s   "r   r   r  
	  s      
1 
1c 
1(6"2 
1r   c                    V^ 8:  d   R# V P                  V4       V P                  V P                  V,           ^,
          ,          # )zPeek at the k-th next token in the stream, without consuming it.

Examples:
    k=1 returns the immediate next token.
    k=2 returns the token after that.
N_fillr  r  r   s   &&r   r   _TokenStream.peek
	  s5     6

1||DKK!Oa/00r   c                0   < V ^8  d   QhRS[ S[,          /# r   )r	   r   )r   r   s   "r   r   r  	  s      hv& r   c                    V P                  ^4       V P                  V P                  ,          pV ;P                  ^,          un        V# )z%Consume a single token and return it.r  r	  s   & r   r  _TokenStream.next	  s2    

1ll4;;'q
r   c                    < V ^8  d   QhRS[ /# r   r  )r   r   s   "r   r   r  "	  s      c r   c                    V P                   # rr   r  rt   s   &r   r  _TokenStream.mark"	  s    {{r   c                $   < V ^8  d   QhRS[ RR/# r  r  )r   r   s   "r   r   r  %	  s      # $ r   c                    Wn         R # rr   r  r!  s   &&r   r   _TokenStream.reset%	  s    r   c                $   < V ^8  d   QhRS[ RR/# )r   nr   Nr  )r   r   s   "r   r   r  (	  s      s t r   c                    \        V P                  4      V P                  V,           8  d>   V P                  P	                  4       pV P                  P                  V4       Ve   Kf  R # R # rr   )rz   r  r  r  r   rs   )r%   r  rb   s   && r   r  _TokenStream._fill(	  sL    $,,$++/1++##%CLL${	 2r   )r  r  r  Nr  )r,   r-   r.   r/   r0   rS   r   r  r  r   r  r2   r3   r4   s   @r   rQ   rQ     sF     
 

1 
1    r   rQ   c                   ,   a  ] tR tRt o V 3R ltRtV tR# )r   i6	  c                   < V ^8  d   Qh/ S[ S[,          ;R&   S[ S[,          ;R&   S[ S[,          ;R&   S[ S[,          ;R&   S[ S[,          ;R&   # )r   r   r   rC   r   r   )r   r   )r   r   s   "r   r   _DeclSpec.__annotate__6	  sT     
s)O #Y  s)O  3i	 
 Cy r   r+   Nr,   r-   r.   r/   r1   r2   r3   r4   s   @r   r   r   6	        r   r   c                   ,   a  ] tR tRt o V 3R ltRtV tR# )r   iA	  c                   < V ^8  d   Qh/ S[ S[P                  ,          ;R&   S[ S[P                  ,          ;R&   S[ S[P                  ,          ;R&   # )r   r   r   r   rQ  )r   r   s   "r   r   _DeclInfo.__annotate__A	  sG     
 5::
  5::
  ejj!! r   r+   Nr  r4   s   @r   r   r   A	  r  r   r   N>   r  OREQUALANDEQUALDIVEQUALMODEQUALXOREQUAL	PLUSEQUAL
MINUSEQUAL
TIMESEQUALLSHIFTEQUALRSHIFTEQUAL>   AUTOEXTERNr>  TYPEDEFREGISTER_THREAD_LOCAL>   CONSTr  RESTRICTVOLATILE>   INTCHARLONGVOIDFLOATSHORT_BOOLDOUBLESIGNEDUNSIGNED_COMPLEX__INT128>   r  r  r  rB  r  r  >   r?  r  r  r  r  r  r@  rA  r
  r(  r	  r  r  >   INT_CONST_BININT_CONST_DECINT_CONST_HEXINT_CONST_OCTINT_CONST_CHAR>   
CHAR_CONSTWCHAR_CONSTU8CHAR_CONSTU16CHAR_CONSTU32CHAR_CONST>   WSTRING_LITERALU8STRING_LITERALU16STRING_LITERALU32STRING_LITERAL>   r  r  r  r  r  r}  r  r  r  r  r  r  r  r  r  r~  r   )+dataclassesr   typingr   r   r   r   r   r	   r
   r   r   r9   r   c_lexerr   r   ast_transformsr   r   r   	Exceptionr6   r8   rf  r  r  r  r[  r  r,  _EXPR_STARTr)  r*  r+  r-  r/  r1  r7  rQ   r   r   r   r+   r   r   <module>r     s.   "
 
 
  # C   $	 	 E  EDB"	1
A 	! 
1	
 
1 	! 	! 	! 	! 	! 	! a a A Q  Q!" a#$ 
1% * VK(>     C	C  
 01 $$   	
   (. .n	  JK"	 "r   