Ë
    	°ëjF­ ã                   ó¬  — d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZmZ ddlmZmZmZ  ed¬	«       G d
„ d«      «       Z G d„ de«      Z G d„ d«      Zh d£Zi dd “dd“dd“dd“dd“dd“dd“dd“dd“dd“d d“d!d"“d#d"“d$d%“d&d%“d'd(“d)d(“d*d(i¥Zh d+£Zd,d-hZh d.£Zd/d0hZh d1£Zej@                  ejB                  ejD                  ejF                  fZ$eez  ez  ez  ez  h d2£z  Z%h d3£Z&h d4£Z'd5d6hZ(d7d8d9œZ)h d:£Z*h d;£Z+e&e'z  e(z  e*z  e+z  e)jY                  «       z  Z-h d<£Z. G d=„ d>«      Z/ G d?„ d@e
«      Z0edA   Z1 G dB„ dCe
«      Z2yD)Eé    )ÚCallable)Ú	dataclass)ÚAnyÚLiteralÚNoReturnÚNotRequiredÚOptionalÚ	TypedDictÚcasté   )Úc_ast)Úfix_atomic_specifiersÚfix_switch_cases)ÚCLexerÚDialectÚTokenT)Úslotsc                   óF   — e Zd ZU dZeed<   eed<   dZedz  ed<   defd„Zy)ÚCoordzkCoordinates of a syntactic element. Consists of:
    - File name
    - Line number
    - Column number
    ÚfileÚlineNÚcolumnÚreturnc                 óx   — | j                   › d| j                  › �}| j                  �|d| j                  › �z  }|S )Nú:©r   r   r   )ÚselfÚtexts     ú_/home/oem/CyberBrain26-unified/dev-env/.venv/lib/python3.12/site-packages/pycparser/c_parser.pyÚ__str__zCoord.__str__'   s>   € Ø—)‘)�˜A˜dŸi™i˜[Ð)ˆØ�;‰;Ð"Ø�a˜Ÿ™�}Ð%Ñ%ˆDØˆó    )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__Úintr   r    © r!   r   r   r      s-   … ñð ƒIØ
ƒIØ€FˆC�$‰JÓð˜ô r!   r   c                   ó   — e Zd Zy)Ú
ParseErrorN)r"   r#   r$   r)   r!   r   r+   r+   .   s   „ Ør!   r+   c                   óT  — e Zd ZdZdedddddfddœd	ed
ee   dededededededdfd„Z		 dÆdededede
j                  fd„Zdedeez  dz  defd„ZdÇd„ZdÇd„Zdededz  ddfd„Zdededz  ddfd„Zdedefd „Zded!ed"eddfd#„Zd$ed%ede
j0                  fd&„Zd$e
j4                  e
j6                  z  e
j8                  z  d'ee
j0                     de
j4                  e
j6                  z  e
j8                  z  fd(„Zd)ed*   d+ee
j0                  z  d,d-dd*fd.„Z d/d*d$e
j0                  dz  dedz  de
j8                  fd0„Z!	 dÈd/d*d1ed2   d3edee
j0                     fd4„Z"d/d*d$e
j0                  d5ee
j0                     dz  d6e
j0                  de
j0                  f
d7„Z#d8edefd9„Z$dÉd:ede%dz  fd;„Z&d<e%dz  ddfd=„Z'dÉd:ededz  fd>„Z(de%fd?„Z)d@ede%dz  fdA„Z*d@ede%fdB„Z+defdC„Z,dDeddfdE„Z-d<e%defdF„Z.dÊd<e%dz  defdG„Z/dÊd<e%dz  defdH„Z0defdI„Z1dÈdJedefdK„Z2de3edz  ef   fdL„Z4	 dËdMedNede3e
j0                  dz  ef   fdO„Z5de3edz  ef   fdP„Z6defdQ„Z7defdR„Z8de3e
j8                  ee%ee   f   dz  fdS„Z9dee
jt                     fdT„Z;dUee
j0                     dVee
jt                     dee
j0                     fdW„Z<dXe
j0                  dVee
jt                     de
j0                  fdY„Z=d$e
j4                  e
j6                  z  e
j8                  z  d/d*de
j4                  e
j6                  z  e
j8                  z  fdZ„Z>de
j                  fd[„Z?dee
j0                     fd\„Z@dee
j0                     fd]„ZAd/d*d$e
j0                  de
j0                  fd^„ZBdee
j0                     fd_„ZCd1ee
j0                     dee
j0                     fd`„ZDdee
j0                     fda„ZEd/d*dbedee
j0                     fdc„ZFd/d*defdd„ZGd/d*dee
j0                     fde„ZHdee
j0                     fdf„ZI	 dÈdgede3d*eedz  f   fdh„ZJdÌdi„ZKdjede3dkeedz  f   fdl„ZLdee   fdm„ZMde
jœ                  fdn„ZOde
j0                  fdo„ZPde
j¢                  fdp„ZRde
j¦                  fdq„ZT	 dÍdred2   dJeded2   fds„ZUdÈdJedd2fdt„ZVde
j0                  fdu„ZWdee
j0                     fdv„ZXdee
j0                     dz  fdw„ZYded2   fdx„ZZdÎdy„Z[de
j0                  fdz„Z\de
j8                  fd{„Z]de
j0                  fd|„Z^de
j0                  fd}„Z_de
j0                  fd~„Z`de
j0                  fd„Zade
j0                  fd€„Zbde
j0                  fd�„Zcd,ed‚ede
j0                  fdƒ„Zd	 dÏd,ed‚ede
j0                  fd„„Zed$e
j0                  de
j0                  fd…„Zfd†e
j0                  de
j0                  fd‡„Zg	 dÊdˆe
j0                  dz  dedz  de
j0                  fd‰„Zhd†e
j0                  de
j0                  fdŠ„Zide
j0                  dz  fd‹„Zjde
jÖ                  fdŒ„Zlde
jÖ                  fd�„Zmde
j0                  fdŽ„Znde
j0                  fd�„Zod/d*d$e
j0                  dz  d�edz  de
j0                  fd‘„Zpde
j0                  dz  fd’„Zqde
j0                  fd“„Zrde
j8                  fd”„Zsde
j0                  dz  fd•„Ztde
j0                  fd–„Zude
jÖ                  dz  fd—„Zvde
j0                  fd˜„Zwde
j0                  fd™„Zxde
j0                  fdš„Zyde
j0                  ee
j0                     z  fd›„Zzdee
j0                     fdœ„Z{dd�œdžede
j0                  fdŸ„Z|de
j0                  fd „Z}de
j0                  fd¡„Z~de
j0                  fd¢„Zde
j0                  fd£„Z€de
j0                  fd¤„Z�de
j0                  dz  fd¥„Z‚de
j0                  fd¦„Zƒde
j0                  fd§„Z„de
j0                  fd¨„Z…	 dÐd©edªe
j0                  dz  de
j0                  fd«„Z†de
j0                  fd¬„Z‡de
j0                  fd­„Zˆde
j0                  fd®„Z‰de
j0                  fd¯„ZŠde
�j                  fd°„ZŒde
�j                  fd±„ZŽde
j0                  fd²„Z�de
j0                  fd³„Z�de
j0                  fd´„Z‘de
j0                  fdµ„Z’de
�j&                  fd¶„Z”de
j0                  fd·„Z•de
�j,                  fd¸„Z—e˜d¹edºedefd»„«       Z™de
j0                  fd¼„Zšde
j0                  fd½„Z›de
j0                  fd¾„Zœdee
j0                     fd¿„Z�dee
j0                     fdÀ„Zžde
j0                  fdÁ„ZŸdefdÂ„Z de
j0                  fdÃ„Z¡dee
j0                     fdÄ„Z¢de
�jF                  fdÅ„Z¤y)ÑÚ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 positional parameters other than `lexer` are accepted for backward
    compatibility with the old PLY-based parser and are otherwise unused.

    The keyword-only `dialect` parameter selects keyword recognition: "legacy"
    preserves existing behavior, while "c23" enables C23 spellings, predefined
    constants, and other C23-only features.
    Tzpycparser.lextabzpycparser.yacctabFÚ Úlegacy)ÚdialectÚlex_optimizeÚlexerÚlextabÚyacc_optimizeÚyacctabÚ
yacc_debugÚtaboutputdirr0   r   Nc                óª   —  || j                   |¬«      | _        || _        i g| _        d | _        t        | j                  j                  «      | _        y )N)Ú
error_funcr0   )Ú_lex_error_funcÚclexÚ_dialectÚ_scope_stackÚ_typedef_checked_tokenÚ_TokenStreamÚtokenÚ_tokens)	r   r1   r2   r3   r4   r5   r6   r7   r0   s	            r   Ú__init__zCParser.__init__B   sO   € ñ "Ø×+Ñ+Øô
ˆŒ	ð  ˆŒð 57°4ˆÔð 59ˆÔ#Ü%1°$·)±)·/±/Ó%Bˆ�r!   r   ÚfilenameÚdebugc                 óD  — i g| _         d| _        | j                  j                  ||«       t	        | j                  j
                  «      | _        | j                  «       }| j                  «       }|�.| j                  d|j                  › �| j                  |«      «       |S )a!  Parses 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.
        Núbefore: )r=   r>   r;   Úinputr?   r@   rA   Ú _parse_translation_unit_or_emptyÚ_peekÚ_parse_errorÚvalueÚ
_tok_coord)r   r   rC   rD   ÚastÚtoks         r   ÚparsezCParser.parseb   sƒ   € ð  ˜DˆÔØ&*ˆÔ#Ø�	‰	�‰˜˜hÔ'Ü# D§I¡I§O¡OÓ4ˆŒà×3Ñ3Ó5ˆØ�j‰j‹lˆØˆ?Ø×Ñ ¨¯©¨Ð4°d·o±oÀcÓ6JÔKØˆ
r!   ÚmsgÚcoordc                 ó"   — t        |› d|› �«      ‚)Nz: )r+   )r   rP   rQ   s      r   rJ   zCParser._parse_error~   s   € Ü˜E˜7 " S EÐ*Ó+Ð+r!   c                 óH   — | j                   j                  i «       d | _        y ©N)r=   Úappendr>   ©r   s    r   Ú_push_scopezCParser._push_scope�   s   € Ø×Ñ× Ñ  Ô$Ø&*ˆÕ#r!   c                 ó„   — t        | j                  «      dkD  sJ d«       ‚| j                  j                  «        d | _        y )Nr   zCannot pop the global scope)Úlenr=   Úpopr>   rV   s    r   Ú
_pop_scopezCParser._pop_scope…   s;   € Ü�4×$Ñ$Ó%¨Ò)ÐHÐ+HÓHÐ)Ø×Ñ×ÑÔØ&*ˆÕ#r!   Únamec                 ó    — | j                   d   j                  |d«      s| j                  d|›d�|«       d| j                   d   |<   d| _        y)z9Add a new typedef name (ie a TYPEID) to the current scopeéÿÿÿÿTzTypedef z1 previously declared as non-typedef in this scopeN©r=   ÚgetrJ   r>   ©r   r\   rQ   s      r   Ú_add_typedef_namezCParser._add_typedef_nameŠ   sZ   € à× Ñ  Ñ$×(Ñ(¨¨tÔ4Ø×ÑØ˜4˜(Ð"SÐTØôð '+ˆ×Ñ˜"Ñ˜dÑ#Ø&*ˆÕ#r!   c                 ó    — | j                   d   j                  |d«      r| j                  d|›d�|«       d| j                   d   |<   d| _        y)z`Add a new object, function, or enum member name (ie an ID) to the
        current scope
        r^   FzNon-typedef z- previously declared as typedef in this scopeNr_   ra   s      r   Ú_add_identifierzCParser._add_identifier”   s\   € ð ×Ñ˜RÑ ×$Ñ$ T¨5Ô1Ø×ÑØ˜t˜hÐ&SÐTØôð ',ˆ×Ñ˜"Ñ˜dÑ#Ø&*ˆÕ#r!   c                 óN   — t        | j                  «      D ]  }||v sŒ||   c S  y)z.Is *name* a typedef-name in the current scope?F)Úreversedr=   )r   r\   Úscopes      r   Ú_is_type_in_scopezCParser._is_type_in_scope    s4   € ä˜d×/Ñ/Ó0ò 	#ˆEð �uŠ}Ø˜T‘{Ò"ð		#ð
 r!   r   r   c                 óh   — | j                  |t        | j                  j                  ||¬«      «       y ©Nr   )rJ   r   r;   rC   )r   rP   r   r   s       r   r:   zCParser._lex_error_func©   s&   € Ø×Ñ˜#œu¨$¯)©)×*<Ñ*<À4ÐPVÔWÕXr!   ÚdeclÚmodifierc                 ó|  — |}|}|j                   r|j                   }|j                   rŒt        |t        j                  «      r	||_         |S |}t        |j                   t        j                  «      s1|j                   }t        |j                   t        j                  «      sŒ1|j                   |_         ||_         |S )z—Tacks a type modifier on a declarator, and returns
        the modified declarator.

        Note: the declarator and modifier may be modified
        )ÚtypeÚ
isinstancer   ÚTypeDecl)r   rk   rl   Úmodifier_headÚmodifier_tailÚ	decl_tails         r   Ú_type_modify_declzCParser._type_modify_declÎ   sœ   € ð !ˆØ ˆð × Ò Ø)×.Ñ.ˆMð × Ó ô �dœEŸN™NÔ+Ø!%ˆMÔØˆOð
 ˆIÜ  §¡´·±Ô@Ø%ŸN™N�	ô ! §¡´·±Õ@ð "+§¡ˆMÔØ*ˆIŒNØˆKr!   Útypenamec                 óf  — |}t        |t        j                  «      s'|j                  }t        |t        j                  «      sŒ'|j                  |_        |j                  dd |_        g }|D �],  }t        |t        j                  «      r›d}|D ]`  }||u rŒ|€,t        |t        j                  «      r|j                  dgdgfvr| j                  d|j                  «       |j                  d   }Œb t        j                  |j                  ||j                  «      |_        |c S t        |t        j                  «      s?t        |«      dkD  r| j                  d|j                  «       n||_        t        |«      c S |j                  |j                  «       �Œ/ |sit        |j                  t        j                   «      s| j                  d|j                  «       t        j                  dg|j                  ¬	«      |_        |S t        j                  ||d   j                  ¬	«      |_        |S )
z#Fixes a declaration. Modifies decl.NÚsignedÚunsignedz Invalid multiple types specifiedr   r   úMissing type in declarationr(   ©rQ   )ro   r   rp   rn   Údeclnamer\   ÚqualsÚ
BitIntTypeÚIdentifierTypeÚnamesrJ   rQ   ÚwidthrY   r   ÚextendÚFuncDecl)r   rk   ru   Útypr   ÚtnÚ
signednessÚspecs           r   Ú_fix_decl_name_typezCParser._fix_decl_name_typeú   sÍ  € ð ˆÜ˜S¤%§.¡.Ô1Ø—(‘(ˆCô ˜S¤%§.¡.Õ1ð —L‘LˆŒ	Ø—J‘J™q�MˆŒ	ð ˆØó 	#ˆBÜ˜"œe×.Ñ.Ô/Ø!�
Ø$ò /�DØ˜r‘zØ à"Ð.Ü)¨$´×0DÑ0DÔEØŸ:™:¨x¨j¸:¸,Ð-GÑGà×)Ñ)Ø>ÀÇ
Á
ôð "&§¡¨A¡‘Jð/ô !×+Ñ+¨B¯H©H°jÀ"Ç(Á(ÓK�”Ø’ä˜b¤%×"6Ñ"6Ô7Ü�x“= 1Ò$Ø×%Ñ%Ð&HÈ"Ï(É(ÕSà!�C”Hô 1°Ó6Ò6Ø�L‰L˜Ÿ™Ö"ð9	#ñ< ä˜dŸi™i¬¯©Ô8Ø×!Ñ!Ð"?ÀÇÁÔLÜ×+Ñ+¨U¨G¸4¿:¹:ÔFˆCŒHð ˆô ×+Ñ+¨E¸À!¹×9JÑ9JÔKˆCŒHØˆr!   ÚdeclspecÚ	_DeclSpecÚnewspecÚkindÚ_DeclSpecKindc                 óJ  — |€
g g g g g g dœ}n|}|dk(  r2t        |t        j                  «      sJ ‚||   j                  |«       |S |dk(  r2t        |t        j                  «      sJ ‚||   j                  |«       |S t        |t
        «      sJ ‚||   j                  |«       |S )zAAppend a specifier in source order; see _DeclSpec for the layout.)ÚqualÚstoragern   ÚfunctionÚ	alignmentÚtype_attributesrn   r‘   )ro   r   ÚNoderU   ÚAlignasr&   )r   rˆ   rŠ   r‹   r†   s        r   Ú_add_declaration_specifierz"CParser._add_declaration_specifier5  s¾   € ð ÐàØØØØØ#%ñ‰Dð ˆDà�6Š>Ü˜g¤u§z¡zÔ2Ð2Ð2Ø�‰J×Ñ˜gÔ&ð ˆð �[Ò Ü˜g¤u§}¡}Ô5Ð5Ð5Ø�‰J×Ñ˜gÔ&ð ˆô ˜g¤sÔ+Ð+Ð+Ø�‰J×Ñ˜gÔ&Øˆr!   r†   c                 óð   — t        j                  d|d   dd d|xs t        j                  dddd«      |¬«      }t        t         j                  | j	                  | j                  ||d   «      |«      «      S )zâBuild and normalize an abstract type, including its attributes.

        Callers select the coordinate according to their grammar context.
        The name, if any, is taken from the declarator by _fix_decl_name_type.
        NrŽ   )r\   r|   Úalignrn   rQ   rn   )r   ÚTypenamerp   r   Ú_attach_type_attributesr‡   )r   r†   rk   rQ   ru   s        r   Ú_build_type_namezCParser._build_type_nameS  sw   € ô —>‘>ØØ�v‘,™q�/ØØÒ?œŸ™¨¨d°D¸$Ó?Øô
ˆô Ü�N‰NØ×(Ñ(Ø×(Ñ(¨°4¸±<Ó@À$óó
ð 	
r!   ÚdeclsÚ	_DeclInfoÚtypedef_namespacec                 ó&  — d|d   v }g }|d   j                  d«      �€³|d   d   €øt        |d   «      dk  sbt        |d   d	   t        j                  «      rBt        |d   d	   j
                  «      d
k7  s$| j                  |d   d	   j
                  d   «      s8d}|d   D ]  }t        |d«      sŒ|j                  } n | j                  d|«       t        j                  |d   d	   j
                  d   dd|d   |d   d	   j                  ¬«      |d   d<   |d   d	= n³t        |d   d   t        «      r�t        t        |d   d   «      }t        |t        j                  «      s'|j                  }t        |t        j                  «      sŒ'|j                  €:t        t        j                  |d   d	   «      }	|	j
                  d   |_        |d   d	= |D �]9  }
|
d   €J ‚|r1t        j                   d|d   |d   |
d   |
d   j                  ¬«      }nXt        j"                  d|d   |d   |d   |d   |
d   |
j                  d«      |
j                  d«      |
d   j                  ¬«	      }t        |j                  t        «      s|}n| j%                  ||d   «      }|rO|r'| j'                  |j(                  |j                  «       n&| j+                  |j(                  |j                  «       |j-                  | j/                  ||«      «       �Œ< |S )zòBuilds 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�   r   ÚbitsizeNrk   rn   é   r^   r   ú?rQ   úInvalid declarationr‘   ©r{   rn   r|   r—   rQ   rŽ   )r\   r|   r�   rn   rQ   r�   Úinit©	r\   r|   r—   r�   Úfuncspecrn   r¥   r    rQ   )r`   rY   ro   r   r~   r   rh   ÚhasattrrQ   rJ   rp   Ú_DECLARATOR_NODESr   r   rn   r{   ÚTypedefÚDeclr‡   rb   r\   rd   rU   r™   )r   r†   r›   r�   Ú
is_typedefÚdeclarationsrQ   ÚtÚdecls_0_tailÚ	type_namerk   ÚdeclarationÚ
fixed_decls                r   Ú_build_declarationszCParser._build_declarationsi  s  € ð  $ y¡/Ð1ˆ
Øˆð �‰8�<‰<˜	Ó"Ñ*ð
 �Q‰x˜ÑÐ'ä˜˜V™Ó%¨Ò)Ü% d¨6¡l°2Ñ&6¼×8LÑ8LÔMÜ˜4 ™<¨Ñ+×1Ñ1Ó2°aÒ7Ø×1Ñ1°$°v±,¸rÑ2B×2HÑ2HÈÑ2KÔLà�EØ! &™\ò "˜Ü" 1 gÕ.Ø$%§G¡G˜EÙ!ð"ð ×%Ñ%Ð&;¸UÔCô $)§>¡>Ø! &™\¨"Ñ-×3Ñ3°AÑ6ØØØ˜{Ñ+Ø˜v™, rÑ*×0Ñ0ô$��a‘˜Ñ ð ˜‘L Ñ$ô ˜E !™H VÑ,Ô.?Ô@Ü#¤C¨¨q©°&Ñ)9Ó:�Ü$ \´5·>±>ÔBØ#/×#4Ñ#4�Lô % \´5·>±>ÕBà×(Ñ(Ð0Ü $¤U×%9Ñ%9¸4À¹<ÈÑ;KÓ L�IØ,5¯O©O¸AÑ,>�LÔ)Ø˜V™ RÐ(àó $	PˆDØ˜‘<Ð+Ð+Ð+ÙÜ#Ÿm™mØØ˜v™,Ø  ™OØ˜f™Ø˜v™,×,Ñ,ô‘ô $Ÿj™jØØ˜v™,Ø˜{Ñ+Ø  ™OØ! *Ñ-Ø˜f™ØŸ™ &Ó)Ø ŸH™H YÓ/Ø˜v™,×,Ñ,ô
�ô ˜k×.Ñ.Ô0AÔBØ(‘
à!×5Ñ5°kÀ4ÈÁ<ÓP�
ñ !ÙØ×*Ñ*¨:¯?©?¸J×<LÑ<LÕMà×(Ñ(¨¯©¸*×:JÑ:JÔKà×Ñ × <Ñ <¸ZÈÓ NÖOðI$	PðL Ðr!   Úparam_declsÚbodyc                 óÂ   — d|d   v r| j                  d|j                  «       | j                  |d|igd¬«      d   }t        j                  ||||j                  ¬«      S )	zBuilds a function definition.rŸ   r�   zInvalid typedefrk   T©r†   r›   r�   r   )rk   r´   rµ   rQ   )rJ   rQ   r³   r   ÚFuncDef)r   r†   rk   r´   rµ   r±   s         r   Ú_build_function_definitionz"CParser._build_function_definitionÉ  st   € ð ˜˜Y™Ñ'Ø×ÑÐ/°·±Ô<à×.Ñ.ØØ˜D�>Ð"Ø"ð /ó 
ð ñ	ˆô �}‰}Ø¨+¸DÈÏ
É
ô
ð 	
r!   r@   c                 óL   — |dk(  rt         j                  S t         j                  S )z[Given a token (either STRUCT or UNION), selects the
        appropriate AST class.
        Ústruct)r   ÚStructÚUnion)r   r@   s     r   Ú_select_struct_union_classz"CParser._select_struct_union_classÞ  s    € ð �HÒÜ—<‘<Ðä—;‘;Ðr!   Úkc                 óz   — | j                   j                  |«      }|| j                  ur| j                  |«       |S )z:Return the k-th next token without consuming it (1-based).)rA   Úpeekr>   Ú_classify_identifier©r   r¿   rN   s      r   rI   zCParser._peekê  s7   € à�l‰l×Ñ Ó"ˆØ�d×1Ñ1Ñ1Ø×%Ñ% cÔ*Øˆ
r!   rN   c                 óz   — |�2|j                   dv r$| j                  |j                  «      rdnd|_         || _        y )N>   ÚIDÚTYPEIDrÆ   rÅ   )rn   rh   rK   r>   ©r   rN   s     r   rÂ   zCParser._classify_identifierñ  s7   € ð ˆ?˜sŸx™xÐ+;Ñ;Ø#'×#9Ñ#9¸#¿)¹)Ô#D‘xÈ$ˆCŒHØ&)ˆÕ#r!   c                 óD   — | j                  |«      }|�|j                  S dS )zDReturn the type of the k-th next token, or None if absent (1-based).N)rI   rn   rÃ   s      r   Ú
_peek_typezCParser._peek_typeù  s"   € à�j‰j˜‹mˆØ˜?ˆs�x‰xÐ4°Ð4r!   c                 óÈ   — | j                   j                  «       }|€&| j                  d| j                  j                  «       || j
                  ur| j                  |«       |S )NúAt end of input)rA   ÚnextrJ   r;   rC   r>   rÂ   rÇ   s     r   Ú_advancezCParser._advanceþ  sU   € Ø�l‰l×ÑÓ!ˆØˆ;Ø×ÑÐ/°·±×1CÑ1CÔDØ�d×1Ñ1Ñ1Ø×%Ñ% cÔ*Øˆ
r!   Ú
token_typec                 óf   — | j                  «       }|�|j                  |k(  r| j                  «       S y)zÂConditionally 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)rI   rn   rÍ   ©r   rÎ   rN   s      r   Ú_acceptzCParser._accept  s.   € ð �j‰j‹lˆØˆ?˜sŸx™x¨:Ò5Ø—=‘=“?Ð"Ør!   c                 ó    — | j                  «       }|j                  |k7  r.| j                  d|j                  › �| j	                  |«      «       |S )NrF   )rÍ   rn   rJ   rK   rL   rÐ   s      r   Ú_expectzCParser._expect  sB   € Ø�m‰m‹oˆØ�8‰8�zÒ!Ø×Ñ ¨¯©¨Ð4°d·o±oÀcÓ6JÔKØˆ
r!   c                 ó6   — | j                   j                  «       S rT   )rA   ÚmarkrV   s    r   Ú_markzCParser._mark  s   € Ø�|‰|× Ñ Ó"Ð"r!   rÕ   c                 ó:   — | j                   j                  |«       y rT   )rA   Úreset©r   rÕ   s     r   Ú_resetzCParser._reset  s   € Ø�‰×Ñ˜4Õ r!   c                 óZ   — t        |j                  |j                  |j                  ¬«      S rj   )r   rC   Úlinenor   rÇ   s     r   rL   zCParser._tok_coord  s   € Ü˜#Ÿ,™,¨S¯Z©ZÀÇ
Á
ÔKÐKr!   c                 óT   — |xs | j                  «       }|€y|j                  t        v S ©NF)rI   rn   Ú_DECL_STARTrÇ   s     r   Ú_starts_declarationzCParser._starts_declaration   s)   € ØÒ!�T—Z‘Z“\ˆØˆ;ØØ�x‰xœ;Ð&Ð&r!   c                 óT   — |xs | j                  «       }|€y|j                  t        v S rÞ   )rI   rn   Ú_STARTS_EXPRESSIONrÇ   s     r   Ú_starts_expressionzCParser._starts_expression&  s*   € ØÒ!�T—Z‘Z“\ˆØˆ;ØØ�x‰xÔ-Ð-Ð-r!   c                 ó  — | j                  «       dk(  rD| j                  «       }| j                  «        | j                  «        }| j	                  |«       |S | j                  «       }|€y|t
        v ry| j                  «       S )NÚATTRIBUTE_BEGINFT)rÉ   rÖ   Ú#_parse_attribute_specifier_sequencerà   rÚ   Ú_STARTS_STATEMENTrã   )r   rÕ   ÚstartsÚtok_types       r   Ú_starts_statementzCParser._starts_statement,  s{   € Ø�?‰?ÓÐ 1Ò1Ø—:‘:“<ˆDØ×4Ñ4Ô6Ø×1Ñ1Ó3Ð3ˆFØ�K‰K˜ÔØˆMØ—?‘?Ó$ˆØÐØØÔ(Ñ(ØØ×&Ñ&Ó(Ð(r!   Úid_onlyc                 óH   — | j                  «       }|€y|dv ry|r|dk(  S |dv S )NF>   ÚTIMESÚLPARENTrÅ   >   rÅ   rÆ   ©rÉ   )r   rë   ré   s      r   Ú_starts_declaratorzCParser._starts_declarator:  s=   € Ø—?‘?Ó$ˆØÐØØÐ*Ñ*ØÙØ˜tÑ#Ð#ØÐ+Ð+Ð+r!   c                 ór   — | j                  «       }| j                  «       \  }}| j                  |«       ||fS rT   )rÖ   Ú_scan_declarator_name_inforÚ   )r   rÕ   ré   Ú	saw_parens       r   Ú_peek_declarator_name_infoz"CParser._peek_declarator_name_infoD  s7   € Ø�z‰z‹|ˆØ"×=Ñ=Ó?Ñˆ�)Ø�‰�DÔØ˜Ð"Ð"r!   Úallow_abstractÚtypeid_paren_as_abstractc                 ó†  — | j                  «       \  }}|�	|rh|dk(  rc|ra|sK| j                  «       }|�| j                  |«      n| j                  j                  }| j                  d|«       | j                  «       }|dfS |dk(  r*|r| j                  «       }|dfS | j                  «       }|dfS | j                  «       }|dfS )NrÆ   zInvalid declaratorFT)
rô   rI   rL   r;   rC   rJ   Ú_parse_abstract_declarator_optÚ _parse_typeid_noparen_declaratorÚ_parse_typeid_declaratorÚ_parse_id_declarator)r   rõ   rö   Ú	name_typeró   rN   rQ   rk   s           r   Ú_parse_any_declaratorzCParser._parse_any_declaratorJ  sÙ   € ð  $×>Ñ>Ó@Ñˆ	�9ØÐÙ$¨°hÒ)>Á9á!Ø—j‘j“l�Ø03°˜Ÿ™¨Ô,ÀTÇYÁY×EWÑEW�Ø×!Ñ!Ð"6¸Ô>Ø×6Ñ6Ó8ˆDØ˜�;Ðà˜Ò Ù'Ø×<Ñ<Ó>�ð
 �TˆzÐð ×4Ñ4Ó6�ð �TˆzÐð ×,Ñ,Ó.ˆDØ�TˆzÐr!   c                 ó¾  — d}| j                  d«      r_| j                  «        | j                  «       t        v r'| j	                  «        | j                  «       t        v rŒ'| j                  d«      rŒ_| j                  «       }|€d |fS |j                  dv r| j	                  «        |j                  |fS |j                  dk(  r—d}| j	                  «        | j                  «       \  }}|rd}d}	 | j                  «       }|€d |fS |j                  dk(  r|dz  }n/|j                  dk(  r |dz  }| j	                  «        |dk(  r	 ||fS Œ[| j	                  «        Œkd |fS )	NFrí   >   rÅ   rÆ   rî   Tr   ÚRPARENr   )rÑ   ræ   rÉ   Ú_TYPE_QUALIFIERrÍ   rI   rn   rò   )r   ró   rN   ré   Únested_parenÚdepths         r   rò   z"CParser._scan_declarator_name_infoe  sW  € Øˆ	Ø�l‰l˜7Ô#Ø×4Ñ4Ô6Ø—/‘/Ó#¤Ñ6Ø—‘”ð —/‘/Ó#¤Ò6ð �l‰l˜7Õ#ð
 �j‰j‹lˆØˆ;Ø˜�?Ð"Ø�8‰8Ð'Ñ'Ø�M‰MŒOØ—8‘8˜YÐ&Ð&Ø�8‰8�xÒØˆIØ�M‰MŒOØ%)×%DÑ%DÓ%FÑ"ˆH�lÙØ �	ØˆEØØ—j‘j“l�Ø�;Ø ˜?Ð*Ø—8‘8˜xÒ'Ø˜Q‘J‘EØ—X‘X Ò)Ø˜Q‘J�EØ—M‘M”OØ ’zØð ˜YÐ&Ð&ð Ø—‘”ð ð �YˆÐr!   c                 ó&   — | j                  «       dv S )N>   rî   ÚLBRACKETrï   rV   s    r   Ú"_starts_direct_abstract_declaratorz*CParser._starts_direct_abstract_declarator‰  s   € Ø�‰Ó Ð$:Ð:Ð:r!   c                 óR   — | j                  «       }|d uxr |j                  t        v S rT   )rI   rn   Ú_ASSIGNMENT_OPSrÇ   s     r   Ú_is_assignment_opzCParser._is_assignment_opŒ  s%   € Ø�j‰j‹lˆØ˜$ˆÒ> 3§8¡8¬Ð#>Ð>r!   c                 ó¼  — | j                  «       }|�|j                  dk7  ry| j                  «       }| j                  «        | j	                  «       s| j                  |«       yg }| j                  «       t        v rr| j                  «       }| j                  dk7  r!| j                  d| j                  |«      «       |j                  |j                  «       | j                  «       t        v rŒr| j                  «       }| j                  d«      €| j                  |«       y|r4| j                  «       dk7  r!| j                  d| j                  |«      «       ||||fS )aá  Parse and return a parenthesized type name if present.

        Returns (typ, mark, lparen_tok, storage) 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. C23 storage specifiers may precede the type name, but require a
        following '{' for a compound literal. Returns None if no parenthesized
        type name is present.
        Nrî   Úc23z9Storage class specifiers in compound literals require C23rÿ   ÚLBRACEz?Storage class specifiers require a compound literal initializer)rI   rn   rÖ   rÍ   rà   rÚ   rÉ   Ú_STORAGE_CLASSr<   rJ   rL   rU   rK   Ú_parse_type_namerÑ   )r   Ú
lparen_tokrÕ   r�   rN   rƒ   s         r   Ú_try_parse_paren_type_namez"CParser._try_parse_paren_type_name�  s*  € ð —Z‘Z“\ˆ
àÐ §¡°HÒ!<ØØ�z‰z‹|ˆØ�‰ŒØ×'Ñ'Ô)Ø�K‰K˜ÔØØˆØ�o‰oÓ¤>Ñ1Ø—-‘-“/ˆCØ�}‰} Ò%Ø×!Ñ!ØOØ—O‘O CÓ(ôð �N‰N˜3Ÿ9™9Ô%ð �o‰oÓ¤>Ò1ð ×#Ñ#Ó%ˆØ�<‰<˜Ó!Ð)Ø�K‰K˜ÔØÙ�t—‘Ó(¨HÒ4Ø×ÑØQØ—‘ 
Ó+ôð �D˜* gÐ-Ð-r!   c                 ó2  — g }| j                  «       dk(  �r€| j                  «       }| j                  dk7  r!| j                  d| j	                  |«      «       g }| j                  «       dk7  rÑ| j                  d«      rŒ%| j                  «       }d }| j                  d«      r|j                  }| j                  «       }| j                  d«      }|j                  t        j                  |j                  ||�|j                  nd |j                  «      «       | j                  d«      sn| j                  «       dk7  rŒÑ| j                  d«       |j                  t        j                  || j	                  |«      «      «       | j                  «       dk(  r�Œ€|S )Nrå   r
  zAttributes require C23ÚATTRIBUTE_ENDÚCOMMAÚ
COLONCOLONÚATTRIBUTE_ARGUMENTS)rÉ   rÍ   r<   rJ   rL   rÑ   Ú_parse_identifier_or_typeidr\   rU   r   Ú	AttributerK   rQ   rÓ   ÚAttributeSpecifier)r   ÚgroupsÚopeningÚ
attributesr\   Ú	namespaceÚ	argumentss          r   ræ   z+CParser._parse_attribute_specifier_sequence¼  sW  € ØˆØ�o‰oÓÐ#4Ó4Ø—m‘m“oˆGØ�}‰} Ò%Ø×!Ñ!Ð":¸D¿O¹OÈGÓ<TÔUØˆJØ—/‘/Ó# Ò6Ø—<‘< Ô(ØØ×7Ñ7Ó9�Ø �	Ø—<‘< Ô-Ø $§	¡	�IØ×;Ñ;Ó=�DØ ŸL™LÐ)>Ó?�	Ø×!Ñ!Ü—O‘OØŸ	™	Ø!Ø+4Ð+@˜	ŸšÀdØŸ
™
ó	ôð —|‘| GÔ,Øð% —/‘/Ó# Ó6ð& �L‰L˜Ô)Ø�M‰MÜ×(Ñ(¨°T·_±_ÀWÓ5MÓNôð3 �o‰oÓÐ#4Ô4ð8 ˆr!   Únodesr  c                 ó¶  — |rt        |d   t        j                  «      r| j                  d|d   j                  «       |D ]•  }t        |t        j                  «      rŒt        |t        j
                  «      r|j                  n|}t        |t        j                  t        j                  f«      s| j                  d|d   j                  «       ||_	        Œ— |S )zCAttach declaration prefixes, shared by comma-separated declarators.r   z%Expected declaration after attributes)
ro   r   ÚPragmarJ   rQ   r¸   rk   r«   rª   r  )r   r  r  Únoderk   s        r   Ú_attribute_declarationszCParser._attribute_declarationsÜ  sµ   € ñ œ
 5¨¡8¬U¯\©\Ô:Ø×ÑØ7¸ÀA¹×9LÑ9Lôð ò 
	)ˆDô ˜$¤§¡Ô-ØÜ *¨4´·±Ô ?�4—9’9ÀTˆDÜ˜d¤U§Z¡Z´·±Ð$?Ô@Ø×!Ñ!Ø;¸ZÈ¹]×=PÑ=Pôð )ˆD�Oð
	)ð ˆr!   Ústmtc                 óÎ   — t        |t        j                  t        j                  t        j                  f«      r	||_        |S t        j                  |||d   j                  «      S ©Nr   )ro   r   ÚLabelÚCaseÚDefaultr  ÚAttributedStatementrQ   )r   r"  r  s      r   Ú_attribute_statementzCParser._attribute_statementñ  sL   € ô �dœUŸ[™[¬%¯*©*´e·m±mÐDÔEØ(ˆDŒOØˆKÜ×(Ñ(¨°T¸:Àa¹=×;NÑ;NÓOÐOr!   c                 óð  — |d   rð|}t        |j                  t        j                  t        j                  t        j
                  t        j                  f«      r_|j                  }t        |j                  t        j                  t        j                  t        j
                  t        j                  f«      rŒ_t        j                  |j                  |d   |j                  j                  «      |_        |S )zDKeep attributes after the base type, inside pointer/array modifiers.r’   )	ro   rn   r   ÚPtrDeclÚ	ArrayDeclr‚   rp   ÚAttributedTyperQ   )r   rk   r†   Útargets       r   r™   zCParser._attach_type_attributesù  s«   € ð Ð!Ò"ØˆFÜØ—‘Ü—‘¤§¡´·±ÄÇÁÐPôð  Ÿ™�ô	 Ø—‘Ü—‘¤§¡´·±ÄÇÁÐPõô
  ×.Ñ.Ø—‘˜TÐ"3Ñ4°f·k±k×6GÑ6GóˆFŒKð ˆr!   c                 ó’   — | j                  «       €t        j                  g «      S t        j                  | j                  «       «      S rT   )rI   r   ÚFileASTÚ_parse_translation_unitrV   s    r   rH   z(CParser._parse_translation_unit_or_empty
  s5   € Ø�:‰:‹<ÐÜ—=‘= Ó$Ð$Ü�}‰}˜T×9Ñ9Ó;Ó<Ð<r!   c                 óŠ   — g }| j                  «       �0|j                  | j                  «       «       | j                  «       �Œ0|S rT   )rI   r�   Ú_parse_external_declaration)r   Úexts     r   r1  zCParser._parse_translation_unit  s;   € ØˆØ�j‰j‹lÐ&Ø�J‰J�t×7Ñ7Ó9Ô:ð �j‰j‹lÑ&àˆ
r!   c                 ó®  — | j                  «       dk(  re| j                  «       }| j                  d«      r$t        j                  ||d   j
                  «      gS | j                  | j                  «       |«      S | j                  «       }|€g S |j                  dk(  r| j                  «        g S |j                  dv r| j                  «       gS | j                  d«      rg S |j                  dk(  r| j                  «       gS | j                  |«      s|| j                  «       }| j                  «       dk7  r| j                  d|j
                  «       g g g t        j                   d	g|j
                  ¬
«      gg g dœ}| j#                  ||«      gS | j%                  d¬«      \  }}}| j'                  |«      r"| j)                  |«      }| j+                  |«      S | j-                  «       \  }}	|dk7  r#| j/                  ||«      }| j+                  |«      S | j                  «       }| j                  «       dk(  s| j                  «       r4|d   st        j                   d	g|¬
«      g|d<   | j#                  ||«      gS d|i}
| j                  d«      r| j1                  «       |
d<   | j3                  |
¬«      }| j5                  ||d¬«      }| j+                  |«      S )Nrå   ÚSEMIr   ÚPPHASH>   Ú_PRAGMAÚPPPRAGMAÚ_STATIC_ASSERTr  úInvalid function definitionr(   rz   )rŽ   r‘   r�   rn   r�   r’   T©Úallow_no_typerÅ   rn   rk   ÚEQUALSr¥   )Úfirstr·   )rÉ   ræ   rÑ   r   ÚAttributeDeclarationrQ   r!  r3  rI   rn   Ú_parse_pp_directiveÚ_parse_pppragma_directiveÚ_parse_static_assertrà   rû   rJ   r~   Ú_parse_function_definitionÚ_parse_declaration_specifiersÚ_is_inferred_autoÚ_parse_auto_declarationÚ_parse_declaration_endrô   Ú_parse_decl_body_with_specÚ_parse_initializerÚ_parse_init_declarator_listr³   )r   r  rN   rk   r†   Úsaw_typeÚ
spec_coordr›   rü   Ú_Ú	decl_dicts              r   r3  z#CParser._parse_external_declaration  sÍ  € Ø�?‰?ÓÐ 1Ò1Ø×AÑAÓCˆJØ�|‰|˜FÔ#Ü×2Ñ2°:¸zÈ!¹}×?RÑ?RÓSÐTÐTØ×/Ñ/Ø×0Ñ0Ó2°Jóð ð �j‰j‹lˆØˆ;ØˆIØ�8‰8�xÒØ×$Ñ$Ô&ØˆIØ�8‰8Ð.Ñ.Ø×2Ñ2Ó4Ð5Ð5Ø�<‰<˜ÔØˆIØ�8‰8Ð'Ò'Ø×-Ñ-Ó/Ð0Ð0à×'Ñ'¨Ô,ð ×,Ñ,Ó.ˆDØ�‰Ó  HÒ,Ø×!Ñ!Ð"?ÀÇÁÔLàØØÜ×-Ñ-¨u¨g¸T¿Z¹ZÔHÐIØØ#%ñˆDð ×3Ñ3°D¸$Ó?Ð@Ð@ð &*×%GÑ%GØð &Hó &
Ñ"ˆˆh˜
ð ×!Ñ! $Ô'Ø×0Ñ0°Ó6ˆEØ×.Ñ.¨uÓ5Ð5à×6Ñ6Ó8‰ˆ	�1Ø˜ÒØ×3Ñ3°D¸(ÓCˆEØ×.Ñ.¨uÓ5Ð5à×(Ñ(Ó*ˆà�?‰?Ó Ò(¨D×,DÑ,DÔ,FØ˜’<Ü %× 4Ñ 4°e°WÀJÔ OÐP��V‘Ø×3Ñ3°D¸$Ó?Ð@Ð@à &¨˜~ˆ	Ø�<‰<˜Ô!Ø $× 7Ñ 7Ó 9ˆI�fÑØ×0Ñ0°yÐ0ÓAˆØ×(Ñ(¨d¸%ÐSWÐ(ÓXˆØ×*Ñ*¨5Ó1Ð1r!   c                 ó
  — | j                  «        t        |t        j                  «      rS|j                  �G|j                  j
                  D ].  }t        |dd «      }|sŒ| j                  ||j                  «       Œ0 | j                  «       r| j                  «       nd }| j                  «       dk7  r| j                  d|j                  «       | j                  d¬«      }| j                  «        | j                  ||||«      S )Nr\   r  r;  F©Ú	new_scope)rW   ro   r   r‚   ÚargsÚparamsÚgetattrrd   rQ   rà   Ú_parse_declaration_listrÉ   rJ   Ú_parse_compound_statementr[   r¹   )r   r†   rk   Úparamr\   r´   rµ   s          r   rD  z"CParser._parse_function_definitionb  sß   € ð
 	×ÑÔÜ�dœEŸN™NÔ+°·	±	Ð0EØŸ™×)Ñ)ò <�Ü˜u f¨dÓ3�ÚØ×(Ñ(¨¨u¯{©{Õ;ð<ð
 /3×.FÑ.FÔ.HˆD×(Ñ(Ô*Èdð 	ð �?‰?Ó Ò(Ø×ÑÐ;¸T¿Z¹ZÔHØ×-Ñ-¸Ð-Ó>ˆØ�‰ÔØ×.Ñ.¨t°T¸;ÈÓMÐMr!   c                 ó|  — | j                  «       dk(  re| j                  «       }| j                  d«      r$t        j                  ||d   j
                  «      gS | j                  | j                  «       |«      S | j                  «       dk(  r| j                  «       gS | j                  «       }| j                  |«      S ©Nrå   r6  r   r:  )rÉ   ræ   rÑ   r   r@  rQ   r!  Ú_parse_declarationrC  Ú_parse_decl_bodyrH  )r   r  r›   s      r   r[  zCParser._parse_declaration  s©   € Ø�?‰?ÓÐ 1Ò1Ø×AÑAÓCˆJØ�|‰|˜FÔ#Ü×2Ñ2°:¸zÈ!¹}×?RÑ?RÓSÐTÐTØ×/Ñ/°×0GÑ0GÓ0IÈ:ÓVÐVØ�?‰?ÓÐ 0Ò0Ø×-Ñ-Ó/Ð0Ð0Ø×%Ñ%Ó'ˆØ×*Ñ*¨5Ó1Ð1r!   c                 óN   — | j                  «       }| j                  d«       ||z   S )a1  Consume a declaration's semicolon and retain preceding pragmas.

        Macro expansions can place diagnostic pragmas just before the final
        semicolon (issue #478). Represent them after the completed declarations
        in the surrounding list, just like pragmas following the semicolon.
        r6  )Ú_parse_pppragma_directive_listrÓ   )r   r›   Úpragmass      r   rH  zCParser._parse_declaration_endŠ  s(   € ð ×5Ñ5Ó7ˆØ�‰�VÔØ�w‰Ðr!   c                 óR   — | j                  d¬«      \  }}}| j                  ||«      S )NTr<  )rE  rI  )r   r†   rL  rN  s       r   r\  zCParser._parse_decl_body–  s/   € Ø ×>Ñ>ÈTÐ>ÓRÑˆˆh˜Ø×.Ñ.¨t°XÓ>Ð>r!   rL  c                 óz  — | j                  |«      r| j                  |«      S d }|r!| j                  «       r5| j                  «       }n$| j                  d¬«      r| j                  d¬«      }|€¹|d   }t        j
                  t        j                  t        j                  f}t        |«      dk(  r^t        |d   |«      rOt	        j                  d |d   |d   |d   |d	   |d   d d |d   j                  ¬
«	      }| j                  ||«      g}|S | j                  |dd igd¬«      }|S | j                  ||d¬«      }|S )NT©rë   rn   r   r   rŽ   r‘   r�   r�   r¦   rk   r·   )rF  rG  rð   rK  r   r¼   r½   ÚEnumrY   ro   r«   rQ   r™   r³   )r   r†   rL  Ú
decl_infosÚtyÚs_u_or_erk   r›   s           r   rI  z"CParser._parse_decl_body_with_specœ  sd  € ð ×!Ñ! $Ô'Ø×/Ñ/°Ó5Ð5ð .2ˆ
ÙØ×&Ñ&Ô(Ø!×=Ñ=Ó?‘
à×&Ñ&¨tÐ&Ô4Ø!×=Ñ=ÀdÐ=ÓK�
ð ÐØ�f‘ˆBÜŸ™¤e§k¡k´5·:±:Ð>ˆHÜ�2‹w˜!Š|¤
¨2¨a©5°(Ô ;Ü—z‘zØØ˜v™,Ø˜{Ñ+Ø  ™OØ! *Ñ-Ø˜A™ØØ Ø˜Q™%Ÿ+™+ô
�ð ×5Ñ5°d¸DÓAÐB�ð ˆð ×0Ñ0ØØ" D˜>Ð*Ø&*ð 1ó �ð ˆð	 ×,Ñ,Ø ¸tð -ó ˆEð ˆr!   c                 óB   — | j                   dk(  xr d|d   v xr |d    S )Nr
  Úautor�   rn   )r<   )r   r†   s     r   rF  zCParser._is_inferred_autoÊ  s,   € Ø�}‰} Ñ%ÒX¨&°D¸±OÐ*CÒXÈDÐQWÉLÐHXÐXr!   c                 óH  — | j                  «       }t        |t        j                  «      s| j	                  d|j
                  «       | j                  d«       | j                  «       }t        j                  |j
                  ¬«      g|d<   | j                  |||dœgd¬«      S )Nz5Inferred auto declaration requires a plain identifierr>  rz   rn   ©rk   r¥   Tr·   )
rû   ro   r   rp   rJ   rQ   rÓ   Ú_parse_assignment_expressionÚInferredTyper³   )r   r†   rk   r¥   s       r   rG  zCParser._parse_auto_declarationÏ  s•   € Ø×(Ñ(Ó*ˆÜ˜$¤§¡Ô/Ø×ÑØGÈÏÉôð 	�‰�XÔØ×0Ñ0Ó2ˆÜ×*Ñ*°·±Ô<Ð=ˆˆV‰à×'Ñ'ØØ ¨$Ñ/Ð0Ø"ð (ó 
ð 	
r!   c                 óÈ   — g }| j                  «       rO|j                  | j                  «       «       |j                  | j                  «       «       | j                  «       rŒO|S rT   )rà   r�   r[  r^  ©r   r›   s     r   rV  zCParser._parse_declaration_listà  sT   € ØˆØ×&Ñ&Ô(Ø�L‰L˜×0Ñ0Ó2Ô3ð �L‰L˜×<Ñ<Ó>Ô?ð	 ×&Ñ&Õ(ð
 ˆr!   r=  c                 ó´   — | j                  d¬«      \  }}}|€&| j                  d| j                  j                  «       |s|s| j                  d|«       |||fS )aÆ  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/type_attributes 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).
        T©Úallow_storage_and_functionr£   ry   ©Ú_parse_specifiersrJ   r;   rC   )r   r=  r†   rL  Úfirst_coords        r   rE  z%CParser._parse_declaration_specifiersî  sh   € ð '+×&<Ñ&<Ø'+ð '=ó '
Ñ#ˆˆh˜ð ˆ<Ø×ÑÐ3°T·Y±Y×5GÑ5GÔHÙ¡Ø×ÑÐ;¸[ÔIØ�X˜{Ð*Ð*r!   c                 ó´   — | j                  d¬«      \  }}}|€&| j                  d| j                  j                  «       |s|d   s| j                  d|«       |S )NFrp  zInvalid specifier listr‘   ry   rr  )r   r†   rL  rt  s       r   Ú_parse_specifier_qualifier_listz'CParser._parse_specifier_qualifier_list  sc   € Ø&*×&<Ñ&<Ø',ð '=ó '
Ñ#ˆˆh˜ð ˆ<Ø×ÑÐ6¸¿	¹	×8JÑ8JÔKÙ  [Ò 1Ø×ÑÐ;¸[ÔIØˆr!   rq  z_DeclSpec | Nonec                óÂ  — d}d}d}	 | j                  «       }|€�n@|j                  dk(  r|�| j                  «       |d<   �n|j                  dk(  r|r�n|j                  dk(  xr | j                  d«      d	k(  }|€| j	                  |«      }d
}|j                  dk(  rd}| j                  «       }�nŽ|r| j                  «       }�nz|j                  t        v r| j                  «       }�nV|j                  dk(  r| j                  «       }�n5|j                  t        v rd}| j                  «       j                  }�n|r/|j                  t        v rd}| j                  «       j                  }nÔ|r/|j                  t        v rd}| j                  «       j                  }n£|j                  t        v s|j                  dk(  rB| j                  «       }t!        j"                  |j                  g| j	                  |«      ¬«      }n@|j                  dv r| j%                  «       }n!|j                  dk(  r| j'                  «       }nn| j)                  |||«      }|d
k(  rd}�ŒT|||fS )zàConsume specifiers shared by declarations, members, and type names.

        Storage classes and function specifiers are only accepted in
        declarations. Callers handle their own missing-specifier diagnostics.
        NFTrå   r’   rÆ   Ú_ATOMICr¡   rî   rn   Ú_ALIGNASr‘   Ú_BITINTrŽ   r�   r�   rz   >   ÚUNIONÚSTRUCTÚENUM)rI   rn   ræ   rÉ   rL   Ú_parse_alignment_specifierÚ_parse_atomic_specifierÚ_TYPEOF_SPECÚ_parse_typeof_specifierÚ_parse_bitint_specifierr   rÍ   rK   r  Ú_FUNCTION_SPECÚ_TYPE_SPEC_SIMPLEr   r~   Ú _parse_struct_or_union_specifierÚ_parse_enum_specifierr•   )	r   rq  r†   rL  rt  rN   Úis_atomic_specifierr‹   rŠ   s	            r   rs  zCParser._parse_specifiers  s'  € ð ˆØˆØˆàØ—*‘*“,ˆCØˆ{Ùà�x‰xÐ,Ò,°Ð1AØ*.×*RÑ*RÓ*T�Ð&Ñ'Ùð �x‰x˜8Ò#©Ùð —‘˜IÑ%ÒH¨$¯/©/¸!Ó*<ÀÑ*Hð  ð Ð"Ø"Ÿo™o¨cÓ2�à"(ˆDà�x‰x˜:Ò%Ø"�Ø×9Ñ9Ó;’Ù$Ø×6Ñ6Ó8’Ø—‘œ\Ñ)Ø×6Ñ6Ó8’Ø—‘˜YÒ&Ø×6Ñ6Ó8’Ø—‘œ_Ñ,Ø�ØŸ-™-›/×/Ñ/’Ù+°·±¼NÑ0JØ �ØŸ-™-›/×/Ñ/‘Ù+°·±¼NÑ0JØ!�ØŸ-™-›/×/Ñ/‘Ø—‘Ô.Ñ.°#·(±(¸hÒ2FØ—m‘m“o�Ü×.Ñ.°·	±	¨{À$Ç/Á/ÐRUÓBVÔW‘Ø—‘Ð0Ñ0Ø×?Ñ?ÓA‘Ø—‘˜VÒ#Ø×4Ñ4Ó6‘àà×2Ñ2°4¸À$ÓGˆDØ�vŠ~Ø�ñk ðn �X˜{Ð*Ð*r!   c                 ó¶   — g }| j                  «       t        v r@|j                  | j                  «       j                  «       | j                  «       t        v rŒ@|S rT   )rÉ   r   rU   rÍ   rK   )r   r|   s     r   Ú_parse_type_qualifier_listz"CParser._parse_type_qualifier_listX  sD   € ØˆØ�o‰oÓ¤?Ñ2Ø�L‰L˜Ÿ™›×.Ñ.Ô/ð �o‰oÓ¤?Ò2àˆr!   c                 ó~  — | j                  d«      }| j                  d«       | j                  «       rF| j                  «       }| j                  d«       t        j                  || j                  |«      «      S | j                  «       }| j                  d«       t        j                  || j                  |«      «      S )Nry  rî   rÿ   )rÓ   rà   r  r   r”   rL   Ú_parse_constant_expression©r   rN   rƒ   Úexprs       r   r~  z"CParser._parse_alignment_specifier_  s�   € Ø�l‰l˜:Ó&ˆØ�‰�XÔà×#Ñ#Ô%Ø×'Ñ'Ó)ˆCØ�L‰L˜Ô"Ü—=‘=  d§o¡o°cÓ&:Ó;Ð;à×.Ñ.Ó0ˆØ�‰�XÔÜ�}‰}˜T 4§?¡?°3Ó#7Ó8Ð8r!   c                 óÂ   — | j                  d«       | j                  d«       | j                  «       }| j                  d«       |j                  j                  d«       |S )Nrx  rî   rÿ   Ú_Atomic)rÓ   r  r|   rU   )r   rƒ   s     r   r  zCParser._parse_atomic_specifierm  sK   € Ø�‰�YÔØ�‰�XÔØ×#Ñ#Ó%ˆØ�‰�XÔØ�	‰	×Ñ˜Ô#Øˆ
r!   c                 ó(  — | j                  «       }| j                  d«       | j                  «       r| j                  «       }n| j	                  «       }| j                  d«       t        j                  |j                  || j                  |«      «      S )Nrî   rÿ   )	rÍ   rÓ   rà   r  Ú_parse_expressionr   ÚTypeOfrK   rL   ©r   rN   r�  s      r   r�  zCParser._parse_typeof_specifierv  sm   € Ø�m‰m‹oˆØ�‰�XÔØ×#Ñ#Ô%Ø×(Ñ(Ó*‰Dà×)Ñ)Ó+ˆDØ�‰�XÔÜ�|‰|˜CŸI™I t¨T¯_©_¸SÓ-AÓBÐBr!   c                 óÔ   — | j                  d«      }| j                  d«       | j                  «       }| j                  d«       t        j                  |d | j	                  |«      «      S )Nrz  rî   rÿ   )rÓ   r‹  r   r}   rL   )r   rN   r€   s      r   r‚  zCParser._parse_bitint_specifier�  sT   € Ø�l‰l˜9Ó%ˆØ�‰�XÔØ×/Ñ/Ó1ˆØ�‰�XÔÜ×Ñ  t¨T¯_©_¸SÓ-AÓBÐBr!   r?  c                 ó¾   — |�|gn| j                  |¬«      g}| j                  d«      r3|j                  | j                  |¬«      «       | j                  d«      rŒ3|S )Nrb  r  )Ú_parse_init_declaratorrÑ   rU   )r   r?  rë   r›   s       r   rK  z#CParser._parse_init_declarator_list‰  se   € ð
 Ð ð ‰Gà×-Ñ-°gÐ-Ó>Ð?ð 	ð �l‰l˜7Ô#Ø�L‰L˜×4Ñ4¸WÐ4ÓEÔFð �l‰l˜7Õ#àˆr!   c                 ó–   — |r| j                  «       n| j                  «       }| j                  d«      r|| j                  «       dœS d|iS )Nr>  rj  rk   )rû   Ú_parse_declaratorrÑ   rJ  )r   rë   rk   s      r   r–  zCParser._parse_init_declarator—  sG   € Ù.5ˆt×(Ñ(Ô*¸4×;QÑ;QÓ;SˆØ�<‰<˜Ô!Ø ¨$×*AÑ*AÓ*CÑDÐDØ˜ˆ~Ðr!   c                 óž  — | j                  «       }| j                  «       }| j                  |j                  «      }| j	                  «       dv rÔ| j                  «       }| j	                  «       dk(  rŒ| j                  «        | j                  d«      r% |||j                  g | j                  |«      ¬«      S | j                  «       }| j                  d«        |||j                  || j                  |«      ¬«      S  |||j                  d | j                  |«      ¬«      S | j	                  «       dk(  rx| j                  «       }| j                  d«      r ||d g | j                  |«      ¬«      S | j                  «       }| j                  d«        ||d || j                  |«      ¬«      S | j                  d| j                  |«      «       y )N>   rÅ   rÆ   r  ÚRBRACE)r  r\   r›   rQ   z Invalid struct/union declaration)
rÍ   ræ   r¾   rK   rÉ   rÑ   rL   Ú_parse_struct_declaration_listrÓ   rJ   )r   rN   r  ÚklassÚname_tokr›   Ú	brace_toks          r   r…  z(CParser._parse_struct_or_union_specifier¢  s¢  € Ø�m‰m‹oˆØ×=Ñ=Ó?ˆ
Ø×/Ñ/°·	±	Ó:ˆà�?‰?ÓÐ 0Ñ0Ø—}‘}“ˆHØ�‰Ó  HÒ,Ø—‘”Ø—<‘< Ô)Ù Ø#-Ø%Ÿ^™^Ø Ø"Ÿo™o¨hÓ7ô	ð ð ×;Ñ;Ó=�Ø—‘˜XÔ&ÙØ)Ø!Ÿ™ØØŸ/™/¨(Ó3ô	ð ñ Ø%Ø—^‘^ØØ—o‘o hÓ/ô	ð ð �?‰?Ó Ò(ØŸ™›ˆIØ�|‰|˜HÔ%ÙØ)ØØØŸ/™/¨)Ó4ô	ð ð ×7Ñ7Ó9ˆEØ�L‰L˜Ô"ÙØ%ØØØ—o‘o iÓ0ô	ð ð 	×ÑÐ<¸d¿o¹oÈcÓ>RÕSr!   c                 óœ   — g }| j                  «       dvr7| j                  «       }|€Œ%|j                  |«       | j                  «       dvrŒ7|S ©N>   Nrš  )rÉ   Ú_parse_struct_declarationr�   )r   r›   Úitemss      r   r›  z&CParser._parse_struct_declaration_list×  sR   € ØˆØ�o‰oÓÐ'7Ñ7Ø×2Ñ2Ó4ˆEØˆ}ØØ�L‰L˜Ôð	 �o‰oÓÐ'7Ò7ð
 ˆr!   c                 óŽ  — | j                  «       dk(  r4| j                  «       }| j                  | j                  «       xs g |«      S | j                  «       dk(  r| j	                  «       gS | j                  «       dk(  r| j                  «        y | j                  «       dv r| j                  «       gS | j                  «       }d|j                  dg «      vsJ ‚d }| j                  «       s| j                  «       dk(  r| j                  «       }|�"| j                  | j                  ||¬«      «      S t        |d	   «      d
k(  r_|d	   d   }t        |t        j                   «      r|}nt        j"                  |«      }| j                  | j                  |d|ig¬«      «      S | j                  | j                  |dd ig¬«      «      S )Nrå   r:  r6  >   r8  r9  rŸ   r�   ÚCOLON©r†   r›   rn   r   r   rk   )rÉ   ræ   r!  r¡  rC  rÍ   rB  rv  r`   rð   Ú_parse_struct_declarator_listrH  r³   rY   ro   r   r“   r~   )r   r  r†   r›   r   Ú	decl_types         r   r¡  z!CParser._parse_struct_declarationä  sÇ  € Ø�?‰?ÓÐ 1Ò1Ø×AÑAÓCˆJØ×/Ñ/Ø×.Ñ.Ó0Ò6°B¸
óð ð �?‰?ÓÐ 0Ò0Ø×-Ñ-Ó/Ð0Ð0Ø�?‰?Ó Ò&Ø�M‰MŒOØØ�?‰?ÓÐ 7Ñ7Ø×2Ñ2Ó4Ð5Ð5à×3Ñ3Ó5ˆØ §¡¨°BÓ 7Ñ7Ð7Ð7àˆØ×"Ñ"Ô$¨¯©Ó(9¸WÒ(DØ×6Ñ6Ó8ˆEØÐØ×.Ñ.Ø×(Ñ(¨d¸%Ð(Ó@óð ô ˆt�F‰|Ó Ò!Ø˜‘< ‘?ˆDÜ˜$¤§
¡
Ô+Ø ‘	ä!×0Ñ0°Ó6�	Ø×.Ñ.Ø×(Ñ(¨d¸FÀIÐ;NÐ:OÐ(ÓPóð ð ×*Ñ*Ø×$Ñ$¨$¸À°~Ð6FÐ$ÓGó
ð 	
r!   c                 ó¬   — | j                  «       g}| j                  d«      r1|j                  | j                  «       «       | j                  d«      rŒ1|S ©Nr  )Ú_parse_struct_declaratorrÑ   rU   rn  s     r   r¦  z%CParser._parse_struct_declarator_list  sG   € Ø×.Ñ.Ó0Ð1ˆØ�l‰l˜7Ô#Ø�L‰L˜×6Ñ6Ó8Ô9ð �l‰l˜7Õ#àˆr!   c                 óî   — | j                  d«      r+| j                  «       }t        j                  d d d d «      |dœS | j	                  «       }| j                  d«      r| j                  «       }||dœS d|iS )Nr¤  )rk   r    rk   )rÑ   r‹  r   rp   r˜  )r   r    rk   s      r   rª  z CParser._parse_struct_declarator  sz   € Ø�<‰<˜Ô Ø×5Ñ5Ó7ˆGäŸ™ t¨T°4¸Ó>Ø"ñð ð
 ×%Ñ%Ó'ˆØ�<‰<˜Ô Ø×5Ñ5Ó7ˆGØ ¨WÑ5Ð5à˜ˆ~Ðr!   c                 ó  — | j                  d«      }| j                  «       }d }| j                  «       dv r| j                  «       j                  }d }| j                  «       dk(  r0| j                  | j                  d«      «      r| j                  «       }d }|�| j                  «       dk(  r2| j                  d«       | j                  «       }| j                  d«       t        j                  |||| j                  |«      |¬«      S )Nr}  >   rÅ   rÆ   r¤  r¡   r  rš  ©r  )rÓ   ræ   rÉ   rÍ   rK   rà   rI   Ú_parse_enum_type_specifierÚ_parse_enumerator_listr   rc  rL   )r   rN   r  r\   Úunderlying_typeÚenumss         r   r†  zCParser._parse_enum_specifier%  så   € Ø�l‰l˜6Ó"ˆØ×=Ñ=Ó?ˆ
ØˆØ�?‰?ÓÐ 0Ñ0Ø—=‘=“?×(Ñ(ˆDàˆð �?‰?Ó Ò'¨D×,DÑ,DÀTÇZÁZÐPQÃ]Ô,SØ"×=Ñ=Ó?ˆOàˆØˆ<˜4Ÿ?™?Ó,°Ò8Ø�L‰L˜Ô"Ø×/Ñ/Ó1ˆEØ�L‰L˜Ô"Ü�z‰zØØØØ�O‰O˜CÓ Ø!ô
ð 	
r!   c                 ó  — | j                  d«      }| j                  dk7  r!| j                  d| j                  |«      «       | j	                  «       }|d   r|d   d   j
                  n| j                  |«      }| j                  |d |«      S )Nr¤  r
  z'Fixed underlying enum types require C23rn   r   )rÓ   r<   rJ   rL   rv  rQ   rš   )r   Úcolonr†   rQ   s       r   r®  z"CParser._parse_enum_type_specifier@  s�   € Ø—‘˜WÓ%ˆØ�=‰=˜EÒ!Ø×ÑØ9¸4¿?¹?È5Ó;Qôð
 ×3Ñ3Ó5ˆØ)-¨fª��V‘˜Q‘×%Ò%¸4¿?¹?È5Ó;QˆØ×$Ñ$ T¨4°Ó7Ð7r!   c                 ó²  — | j                  «       }| j                  «       }|j                  |«       |j                  }	 |j	                  | j                  «       «       | j                  d«      snS|j	                  | j                  «       «       | j                  «       dk(  rn |j                  | j                  «       «       Œ„t        j                  ||«      S )Nr  rš  )	r^  Ú_parse_enumeratorrU   rQ   r�   rÑ   rÉ   r   ÚEnumeratorList)r   ÚmembersÚenumrQ   s       r   r¯  zCParser._parse_enumerator_listO  s´   € Ø×5Ñ5Ó7ˆð ×%Ñ%Ó'ˆØ�‰�tÔØ—
‘
ˆØð �N‰N˜4×>Ñ>Ó@ÔAØ—<‘< Ô(ØØ�N‰N˜4×>Ñ>Ó@ÔAØ�‰Ó  HÒ,ØØ�N‰N˜4×1Ñ1Ó3Ô4ð ô ×#Ñ# G¨UÓ3Ð3r!   c                 ó@  — | j                  d«      }| j                  «       }| j                  d«      r| j                  «       }nd }t	        j
                  |j                  || j                  |«      |¬«      }| j                  |j                  |j                  «       |S )NrÅ   r>  r­  )rÓ   ræ   rÑ   r‹  r   Ú
EnumeratorrK   rL   rd   r\   rQ   )r   r�  r  rK   r¸  s        r   rµ  zCParser._parse_enumeratorc  s…   € Ø—<‘< Ó%ˆØ×=Ñ=Ó?ˆ
Ø�<‰<˜Ô!Ø×3Ñ3Ó5‰EàˆEÜ×ÑØ�N‰NØØ�O‰O˜HÓ%Ø!ô	
ˆð 	×Ñ˜TŸY™Y¨¯
©
Ô3Øˆr!   c                 ó:   — | j                  dd¬«      \  }}|€J ‚|S )NF©rõ   rö   )rý   )r   rk   rN  s      r   r˜  zCParser._parse_declaratorw  s3   € Ø×,Ñ,Ø ¸5ð -ó 
‰ˆˆað ÐÐÐØˆr!   c                 ó(   — | j                  dd¬«      S )NÚidT©r‹   Úallow_paren©Ú_parse_declarator_kindrV   s    r   rû   zCParser._parse_id_declarator  s   € Ø×*Ñ*°À$Ð*ÓGÐGr!   c                 ó(   — | j                  dd¬«      S )NÚtypeidTr¿  rÁ  rV   s    r   rú   z CParser._parse_typeid_declaratorƒ  s   € Ø×*Ñ*°ÀdÐ*ÓKÐKr!   c                 ó(   — | j                  dd¬«      S )NrÄ  Fr¿  rÁ  rV   s    r   rù   z(CParser._parse_typeid_noparen_declarator‡  s   € Ø×*Ñ*°ÀeÐ*ÓLÐLr!   rÀ  c                 óž   — d }| j                  «       dk(  r| j                  «       }| j                  ||¬«      }|�| j                  ||«      S |S )Nrí   ©rÀ  )rÉ   Ú_parse_pointerÚ_parse_direct_declaratorrt   )r   r‹   rÀ  ÚptrÚdirects        r   rÂ  zCParser._parse_declarator_kind‹  sV   € ØˆØ�?‰?Ó Ò'Ø×%Ñ%Ó'ˆCØ×.Ñ.¨tÀÐ.ÓMˆØˆ?Ø×)Ñ)¨&°#Ó6Ð6Øˆr!   c           	      ót  — |r6| j                  d«      r%| j                  |d¬«      }| j                  d«       np|dk(  r| j                  d«      }n| j                  d«      }t        j                  |j
                  d d d | j                  |«      ¬«      }| j                  «       |_        | j                  |«      S )	Nrî   TrÇ  rÿ   r¾  rÅ   rÆ   r¤   )
rÑ   rÂ  rÓ   r   rp   rK   rL   ræ   r  Ú_parse_decl_suffixes)r   r‹   rÀ  rk   r�  s        r   rÉ  z CParser._parse_direct_declarator—  s£   € ñ ˜4Ÿ<™<¨Ô1Ø×.Ñ.¨tÀÐ.ÓFˆDØ�L‰L˜Õ"à�tŠ|ØŸ<™<¨Ó-‘àŸ<™<¨Ó1�Ü—>‘>Ø!Ÿ™ØØØØ—o‘o hÓ/ôˆDð #×FÑFÓHˆDŒOà×(Ñ(¨Ó.Ð.r!   c                 óâ   — 	 | j                  «       dk(  r"| j                  || j                  |«      «      }Œ6| j                  «       dk(  r$| j                  |«      }| j                  ||«      }Œm	 |S )zAParse a chain of array/function suffixes and attach them to decl.r  rî   )rÉ   rt   Ú_parse_array_declÚ_parse_function_decl)r   rk   Úfuncs      r   rÍ  zCParser._parse_decl_suffixes­  sp   € àØ�‰Ó  JÒ.Ø×-Ñ-¨d°D×4JÑ4JÈ4Ó4PÓQ�ØØ�‰Ó  HÒ,Ø×0Ñ0°Ó6�Ø×-Ñ-¨d°DÓ9�ØØØˆr!   Ú	base_declc                 ó<   — | j                  d |j                  ¬«      S ©N)Ú	base_typerQ   )Ú_parse_array_decl_commonrQ   )r   rÒ  s     r   rÏ  zCParser._parse_array_decl»  s   € Ø×,Ñ,°tÀ9Ç?Á?Ð,ÓSÐSr!   rÕ  c                 ó:  ‡ ‡‡— ‰ j                  d«      }‰€‰ j                  |«      Šˆˆˆ fd„}‰ j                  d«      rBdg‰ j                  «       xs g z   }‰ j	                  «       }‰ j                  d«        |||«      S ‰ j                  «       t        v rí‰ j                  «       xs g }‰ j                  d«      r0|dgz   }‰ j	                  «       }‰ j                  d«        |||«      S ‰ j                  d«      }|rI‰ j                  d«       t        j                  |j                  ‰ j                  |«      «      } |||«      S d}‰ j                  «       r‰ j	                  «       }‰ j                  d«        |||«      S ‰ j                  d«      }|rI‰ j                  d«       t        j                  |j                  ‰ j                  |«      «      } ||g «      S d}‰ j                  «       r‰ j	                  «       }‰ j                  d«        ||g «      S )a9  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.
        r  Nc                 óT   •— t        j                  ‰| |‰‰j                  «       ¬«      S )N)rn   ÚdimÚ	dim_qualsrQ   r  )r   r,  ræ   )rÙ  rÚ  rÕ  rQ   r   s     €€€r   Úmake_array_declz9CParser._parse_array_decl_common.<locals>.make_array_declÎ  s,   ø€ Ü—?‘?ØØØ#ØØ×CÑCÓEôð r!   ÚSTATICÚstaticÚRBRACKETrí   )rÓ   rL   rÑ   r‰  rk  rÉ   r   r   rÅ   rK   rã   )r   rÕ  rQ   Ú
lbrack_tokrÛ  rÚ  rÙ  Ú	times_toks   ```     r   rÖ  z CParser._parse_array_decl_common¾  sÙ  ú€ ð —\‘\ *Ó-ˆ
Øˆ=Ø—O‘O JÓ/ˆEö	ð �<‰<˜Ô!Ø!˜
 d×&EÑ&EÓ&GÒ&MÈ2ÑNˆIØ×3Ñ3Ó5ˆCØ�L‰L˜Ô$Ù" 3¨	Ó2Ð2à�?‰?Ó¤Ñ/Ø×7Ñ7Ó9Ò?¸RˆIØ�|‰|˜HÔ%Ø%¨¨
Ñ2�	Ø×7Ñ7Ó9�Ø—‘˜ZÔ(Ù& s¨IÓ6Ð6ØŸ™ WÓ-ˆIÙØ—‘˜ZÔ(Ü—h‘h˜yŸ™°·±À	Ó0JÓK�Ù& s¨IÓ6Ð6ØˆCØ×&Ñ&Ô(Ø×7Ñ7Ó9�Ø�L‰L˜Ô$Ù" 3¨	Ó2Ð2à—L‘L Ó)ˆ	ÙØ�L‰L˜Ô$Ü—(‘(˜9Ÿ?™?¨D¯O©O¸IÓ,FÓGˆCÙ" 3¨Ó+Ð+àˆØ×"Ñ"Ô$Ø×3Ñ3Ó5ˆCØ�‰�ZÔ Ù˜s BÓ'Ð'r!   c                 óZ  — | j                  d«       | j                  d«      rd }nT| j                  «       s| j                  «       dk(  r| j	                  «       n| j                  «       }| j                  d«       t        j                  |d |j                  | j                  «       ¬«      }|S )Nrî   rÿ   ÚELLIPSIS©rS  rn   rQ   r  )
rÓ   rÑ   rà   rÉ   Ú_parse_parameter_type_listÚ_parse_identifier_list_optr   r‚   rQ   ræ   )r   rÒ  rS  rÑ  s       r   rÐ  zCParser._parse_function_declü  s–   € Ø�‰�XÔØ�<‰<˜Ô!Ø‰Dð ×+Ñ+Ô-°·±Ó1BÀjÒ1Pð ×/Ñ/Ô1à×4Ñ4Ó6ð ð
 �L‰L˜Ô"ä�~‰~ØØØ—/‘/Ø×?Ñ?ÓAô	
ˆð ˆr!   c                 ó8  — g }| j                  d«      }|r[| j                  «       }| j                  «       xs g }|j                  || j	                  |«      |f«       | j                  d«      }|rŒ[|sy d }|D ]  \  }}}t        j                  ||||¬«      }Œ! |S )Nrí   )r|   rn   rQ   r  )rÑ   ræ   r‰  rU   rL   r   r+  )r   Ústarsrà  r  r|   rÊ  rQ   s          r   rÈ  zCParser._parse_pointer  s©   € ØˆØ—L‘L Ó)ˆ	ÙØ×AÑAÓCˆJØ×3Ñ3Ó5Ò;¸ˆEØ�L‰L˜% §¡°Ó!;¸ZÐHÔIØŸ™ WÓ-ˆIò	 ñ ØàˆØ(-ò 	Ñ$ˆE�5˜*Ü—-‘-Ø #¨U¸zô‰Cð	ð ˆ
r!   c                 ó  — | j                  d«      }|r\| j                  |«      }| j                  dk7  r| j                  d|«       t	        j
                  t	        j                  |«      g|«      S | j                  «       }| j                  «       dk(  rq| j                  d«      dk(  r]| j                  «        | j                  «       }|j                  j                  t	        j                  | j                  |«      «      «       |S )Nrâ  r
  z)Ellipsis-only parameter lists require C23r  r¡   )rÑ   rL   r<   rJ   r   Ú	ParamListÚEllipsisParamÚ_parse_parameter_listrÉ   rÍ   rT  rU   )r   Úell_tokrQ   rT  s       r   rä  z"CParser._parse_parameter_type_list'  sÉ   € à—,‘,˜zÓ*ˆÙØ—O‘O GÓ,ˆEØ�}‰} Ò%Ø×!Ñ!Ð"MÈuÔUÜ—?‘?¤E×$7Ñ$7¸Ó$>Ð#?ÀÓGÐGà×+Ñ+Ó-ˆØ�?‰?Ó Ò'¨D¯O©O¸AÓ,>À*Ò,LØ�M‰MŒOØ—m‘m“oˆGØ�M‰M× Ñ ¤×!4Ñ!4°T·_±_ÀWÓ5MÓ!NÔOØˆr!   c                 óx  — | j                  «       }t        j                  |g|j                  «      }| j	                  «       dk(  ru| j	                  d«      dk7  ra| j                  «        |j                  j                  | j                  «       «       | j	                  «       dk(  r| j	                  d«      dk7  rŒa|S )Nr  r¡   râ  )Ú_parse_parameter_declarationr   ré  rQ   rÉ   rÍ   rT  rU   ©r   r?  rT  s      r   rë  zCParser._parse_parameter_list8  s‘   € Ø×1Ñ1Ó3ˆÜ—‘ % ¨%¯+©+Ó6ˆØ�o‰oÓ 7Ò*¨t¯©¸qÓ/AÀZÒ/OØ�M‰MŒOØ�M‰M× Ñ  ×!BÑ!BÓ!DÔEð �o‰oÓ 7Ò*¨t¯©¸qÓ/AÀZÓ/Oð ˆr!   c                 ó¬   — | j                  «       }| j                  «       }t        |t        j                  t        j
                  f«      sJ ‚||_        |S rT   )ræ   Ú!_parse_parameter_declaration_bodyro   r   r«   r˜   r  )r   r  rk   s      r   rî  z$CParser._parse_parameter_declarationB  sG   € Ø×=Ñ=Ó?ˆ
Ø×5Ñ5Ó7ˆÜ˜$¤§¡¬U¯^©^Ð <Ô=Ð=Ð=Ø$ˆŒØˆr!   c                 óÖ  — | j                  d¬«      \  }}}| j                  |«      r| j                  d|«       d|d   v r| j                  d|«       |d   st        j                  dg|¬	«      g|d<   | j                  «       rD| j                  dd¬
«      \  }}|r| j                  |d|ig¬«      d   S | j                  |||«      S | j                  «       }| j                  |||«      S )NTr<  z$Cannot infer the type of a parameterrŸ   r�   z%Invalid storage class for a parameterrn   r(   rz   r¼  rk   r¥  r   )
rE  rF  rJ   r   r~   rð   rý   r³   Ú_build_parameter_declarationrø   )r   r†   rN  rM  rk   Úis_nameds         r   rñ  z)CParser._parse_parameter_declaration_bodyI  s  € Ø"×@Ñ@ÈtÐ@ÓTÑˆˆa�à×!Ñ! $Ô'Ø×ÑÐDÀjÔQà˜˜Y™Ñ'Ø×ÑÐEÀzÔRà�FŠ|Ü!×0Ñ0°%°À
ÔKÐLˆD�‰Là×"Ñ"Ô$Ø!×7Ñ7Ø#¸dð 8ó ‰NˆD�(ñ Ø×/Ñ/ØØ" D˜>Ð*ð 0ó ð ñð ð ×4Ñ4°T¸4ÀÓLÐLà×2Ñ2Ó4ˆØ×0Ñ0°°t¸ZÓHÐHr!   rM  c                 ó@  — t        |d   «      dkD  r{t        |d   d   t        j                  «      r[t        |d   d   j                  «      dk(  r=| j                  |d   d   j                  d   «      r| j                  |d|ig¬«      d   S | j                  |||«      S )Nrn   r   r^   r   rk   r¥  )rY   ro   r   r~   r   rh   r³   rš   )r   r†   rk   rM  s       r   ró  z$CParser._build_parameter_declarationc  s£   € ô ��V‘Ó Ò!Ü˜4 ™<¨Ñ+¬U×-AÑ-AÔBÜ�D˜‘L Ñ$×*Ñ*Ó+¨qÒ0Ø×&Ñ& t¨F¡|°BÑ'7×'=Ñ'=¸aÑ'@ÔAà×+Ñ+°¸vÀt¸nÐ=MÐ+ÓNÈqÑQÐQà×$Ñ$ T¨4°Ó<Ð<r!   c                 óJ   — | j                  «       dk(  ry | j                  «       S ©Nrÿ   )rÉ   Ú_parse_identifier_listrV   s    r   rå  z"CParser._parse_identifier_list_optq  s#   € Ø�?‰?Ó Ò(ØØ×*Ñ*Ó,Ð,r!   c                 ó   — | j                  «       }t        j                  |g|j                  «      }| j	                  d«      r;|j
                  j                  | j                  «       «       | j	                  d«      rŒ;|S r©  )Ú_parse_identifierr   ré  rQ   rÑ   rT  rU   rï  s      r   rø  zCParser._parse_identifier_listw  s`   € Ø×&Ñ&Ó(ˆÜ—‘ % ¨%¯+©+Ó6ˆØ�l‰l˜7Ô#Ø�M‰M× Ñ  ×!7Ñ!7Ó!9Ô:ð �l‰l˜7Õ#àˆr!   c                 ó¸   — | j                  «       }| j                  «       }d }|�|j                  }n|d   r|d   d   j                  }| j                  |||«      S )Nrn   r   )rv  rø   rQ   rš   )r   r†   rk   rQ   s       r   r  zCParser._parse_type_name‚  sa   € Ø×3Ñ3Ó5ˆØ×2Ñ2Ó4ˆàˆØÐØ—J‘J‰EØ�&Š\Ø˜‘L ‘O×)Ñ)ˆEà×$Ñ$ T¨4°Ó7Ð7r!   c                 ó(  — | j                  «       dk(  r_| j                  «       }| j                  «       r| j                  «       }nt	        j
                  d d d d «      }|€J ‚| j                  ||«      S | j                  «       r| j                  «       S y )Nrí   )rÉ   rÈ  r  Ú!_parse_direct_abstract_declaratorr   rp   rt   )r   rÊ  rk   s      r   rø   z&CParser._parse_abstract_declarator_opt�  sˆ   € Ø�?‰?Ó Ò'Ø×%Ñ%Ó'ˆCØ×6Ñ6Ô8Ø×=Ñ=Ó?‘ä—~‘~ d¨D°$¸Ó=�Ø�?Ð"�?Ø×)Ñ)¨$°Ó4Ð4à×2Ñ2Ô4Ø×9Ñ9Ó;Ð;àr!   c           	      óH  — | j                  d«      }|rµ| j                  «       s| j                  «       dv rn| j                  «       }| j	                  d«       t        j                  |t        j                  d d d d «      | j                  |«      | j                  «       ¬«      }no| j                  «       }| j	                  d«       |€LJ ‚| j                  «       dk(  r| j                  «       }n&| j                  d| j                  j                  «       | j                  «      S )Nrî   >   rÿ   râ  rÿ   rã  r  zInvalid abstract declarator)rÑ   rà   rÉ   Ú_parse_parameter_type_list_optrÓ   r   r‚   rp   rL   ræ   rø   Ú_parse_abstract_array_baserJ   r;   rC   rÍ  )r   r  rT  rk   s       r   rý  z)CParser._parse_direct_abstract_declarator¡  sû   € Ø—\‘\ (Ó+ˆ
ÙØ×'Ñ'Ô)¨T¯_©_Ó->ð Cñ .ð ×<Ñ<Ó>�Ø—‘˜XÔ&Ü—~‘~ØÜŸ™¨¨d°D¸$Ó?ØŸ/™/¨*Ó5Ø#×GÑGÓIô	‘ð ×:Ñ:Ó<�Ø—‘˜XÔ&ØÐ'Ð'Ð'Ø�_‰_Ó *Ò,Ø×2Ñ2Ó4‰Dà×ÑÐ;¸T¿Y¹Y×=OÑ=OÔPà×(Ñ(¨Ó.Ð.r!   c                 óJ   — | j                  «       dk(  ry | j                  «       S r÷  )rÉ   rä  rV   s    r   rÿ  z&CParser._parse_parameter_type_list_opt¼  s#   € Ø�?‰?Ó Ò(ØØ×.Ñ.Ó0Ð0r!   c                 óT   — | j                  t        j                  d d d d «      d ¬«      S rÔ  )rÖ  r   rp   rV   s    r   r   z"CParser._parse_abstract_array_baseÂ  s.   € Ø×,Ñ,Ü—n‘n T¨4°°tÓ<ÀDð -ó 
ð 	
r!   c                 ó  — | j                  «       dk(  rd| j                  «       }| j                  d«      r#t        j                  ||d   j
                  «      S | j                  | j                  «       |«      S | j                  «       }|xxdk(  rnxdk(  rn n  | j                  «       S xdk(  r%| j                  d«      dk(  r | j                  «       S xd	k(  r | j                  «       S xxd
k(  rnxdk(  rn n  | j                  «       S xxdk(  rnxdk(  rnxdk(  rn n  | j                  «       S xxdk(  rnxdk(  rnxdk(  rnxdk(  rn n  | j                  «       S xdk(  rnxdk(  rn n | j                  «       S 	 | j                  «       S )Nrå   r6  r   ÚCASEÚDEFAULTrÅ   r¡   r¤  r  ÚIFÚSWITCHÚWHILEÚDOÚFORÚGOTOÚBREAKÚCONTINUEÚRETURNr9  r8  )rÉ   ræ   rÑ   r   r@  rQ   r)  Ú_parse_statementÚ_parse_labeled_statementrW  Ú_parse_selection_statementÚ_parse_iteration_statementÚ_parse_jump_statementrB  Ú_parse_expression_statement)r   r  ré   s      r   r  zCParser._parse_statementÎ  s<  € Ø�?‰?ÓÐ 1Ò1Ø×AÑAÓCˆJØ�|‰|˜FÔ#Ü×1Ñ1°*¸jÈ¹m×>QÑ>QÓRÐRØ×,Ñ,¨T×-BÑ-BÓ-DÀjÓQÐQØ—?‘?Ó$ˆØØ#•�)Ó#Ø×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ØØ×7Ñ7Ó9Ð9r!   c                 óÖ   — | j                  «       dv rH| j                  «       }| j                  «       }t        j                  ||gz   |d   j
                  ¬«      S | j                  «       S )N>   r8  r9  r   ©Úblock_itemsrQ   )rÉ   r^  r  r   ÚCompoundrQ   )r   r_  r"  s      r   Ú_parse_pragmacomp_or_statementz&CParser._parse_pragmacomp_or_statementè  s_   € Ø�?‰?ÓÐ 7Ñ7Ø×9Ñ9Ó;ˆGØ×(Ñ(Ó*ˆDÜ—>‘>¨g¸¸Ñ.>ÀgÈaÁj×FVÑFVÔWÐWØ×$Ñ$Ó&Ð&r!   c                 óö  — | j                  «       dk(  r”| j                  «       }| j                  d«      r#t        j                  ||d   j
                  «      S | j                  «       r | j                  | j                  «       |«      S | j                  | j                  «       |«      S | j                  «       dk(  r| j                  «       S | j                  «       r| j                  «       S | j                  «       S rZ  )rÉ   ræ   rÑ   r   r@  rQ   rà   r!  r[  r)  r  rC  )r   r  s     r   Ú_parse_block_itemzCParser._parse_block_itemð  sÝ   € Ø�?‰?ÓÐ 1Ò1Ø×AÑAÓCˆJØ�|‰|˜FÔ#Ü×1Ñ1°*¸jÈ¹m×>QÑ>QÓRÐRØ×'Ñ'Ô)Ø×3Ñ3Ø×+Ñ+Ó-¨zóð ð ×,Ñ,¨T×-BÑ-BÓ-DÀjÓQÐQØ�?‰?ÓÐ 0Ò0Ø×,Ñ,Ó.Ð.Ø×#Ñ#Ô%Ø×*Ñ*Ó,Ð,Ø×$Ñ$Ó&Ð&r!   c                 óú   — g }| j                  «       dvrf| j                  «       }t        |t        j                  «      r|j                  |«       n|d gk7  r|j                  |«       | j                  «       dvrŒf|S r   )rÉ   r  ro   r   r“   rU   r�   )r   r¢  Úitems      r   Ú_parse_block_item_listzCParser._parse_block_item_list  sm   € Ø"$ˆØ�o‰oÓÐ'7Ñ7Ø×)Ñ)Ó+ˆDÜ˜$¤§
¡
Ô+Ø—‘˜TÕ"Ø˜$˜’Ø—‘˜TÔ"ð �o‰oÓÐ'7Ò7ð ˆr!   rQ  rR  c                ó   — | j                  d«      }|r| j                  «        d }| j                  d«      s!| j                  «       }| j                  d«       |r| j	                  «        t        j                  || j                  |«      ¬«      S )Nr  rš  r  )rÓ   rW   rÑ   r  r[   r   r  rL   )r   rR  Ú
lbrace_tokr  s       r   rW  z!CParser._parse_compound_statement  sv   € Ø—\‘\ (Ó+ˆ
ÙØ×ÑÔØˆØ�|‰|˜HÔ%Ø×5Ñ5Ó7ˆKØ�L‰L˜Ô"ÙØ�O‰OÔÜ�~‰~Ø#¨4¯?©?¸:Ó+Fô
ð 	
r!   c                 ó  — | j                  «       }|xdk(  r— | j                  «       }| j                  d«       | j                  «       r| j	                  «       }n$t        j                  | j                  |«      «      }t        j                  |j                  || j                  |«      «      S xdk(  rž | j                  «       }| j                  «       }| j                  d«       | j                  «       r| j	                  «       }n$t        j                  | j                  |«      «      }t        j                  ||g| j                  |«      «      S dk(  rŒ| j                  «       }| j                  d«       | j                  «       r| j	                  «       }n$t        j                  | j                  |«      «      }t        j                  |g| j                  |«      «      S 	 | j                  d| j                  j                  «       y )NrÅ   r¤  r  r  zInvalid labeled statement)rÉ   rÍ   rÓ   rê   r  r   ÚEmptyStatementrL   r%  rK   r‹  r&  r'  rJ   r;   rC   )r   ré   r�  r"  Úcase_tokr�  Údef_toks          r   r  z CParser._parse_labeled_statement  s~  € Ø—?‘?Ó$ˆØÝØŸ=™=›?�Ø—‘˜WÔ%Ø×)Ñ)Ô+Ø×>Ñ>Ó@‘Dä ×/Ñ/°·±ÀÓ0IÓJ�DÜ—{‘{ 8§>¡>°4¸¿¹ÈÓ9RÓSÐSÝØŸ=™=›?�Ø×6Ñ6Ó8�Ø—‘˜WÔ%Ø×)Ñ)Ô+Ø×>Ñ>Ó@‘Dä ×/Ñ/°·±ÀÓ0IÓJ�DÜ—z‘z $¨¨°·±ÀÓ0IÓJÐJÛØŸ-™-›/�Ø—‘˜WÔ%Ø×)Ñ)Ô+Ø×>Ñ>Ó@‘Dä ×/Ñ/°·±ÀÓ0HÓI�DÜ—}‘} d V¨T¯_©_¸WÓ-EÓFÐFØØ×!Ñ!Ð"=¸t¿y¹y×?QÑ?QÕRr!   c           	      óÖ  — | j                  «       }|j                  xdk(  r² | j                  d«       | j                  «       }| j                  d«       | j	                  «       }| j                  d«      r7| j	                  «       }t        j                  |||| j                  |«      «      S t        j                  ||d | j                  |«      «      S dk(  rq| j                  d«       | j                  «       }| j                  d«       | j	                  «       }t        t        j                  ||| j                  |«      «      «      S 	 | j                  d| j                  |«      «       y )Nr  rî   rÿ   ÚELSEr  zInvalid selection statement)rÍ   rn   rÓ   r‘  r  rÑ   r   ÚIfrL   r   ÚSwitchrJ   )r   rN   ÚcondÚ	then_stmtÚ	else_stmtr�  r"  s          r   r  z"CParser._parse_selection_statement>  s  € Ø�m‰m‹oˆØ�h‰hÝØ—‘˜XÔ&Ø×-Ñ-Ó/�Ø—‘˜XÔ&Ø ×?Ñ?ÓA�	Ø—<‘< Ô'Ø $× CÑ CÓ E�IÜ Ÿ8™8 D¨)°YÀÇÁÐPSÓ@TÓUÐUÜ—x‘x  i°°t·±ÀsÓ7KÓLÐLÛØ—‘˜XÔ&Ø×-Ñ-Ó/�Ø—‘˜XÔ&Ø×:Ñ:Ó<�Ü'¬¯©°T¸4ÀÇÁÐQTÓAUÓ(VÓWÐWØØ×!Ñ!Ð"?ÀÇÁÐQTÓAUÕVr!   c           	      óÀ  — | j                  «       }|j                  xdk(  ri | j                  d«       | j                  «       }| j                  d«       | j	                  «       }t        j                  ||| j                  |«      «      S xdk(  r‹ | j	                  «       }| j                  d«       | j                  d«       | j                  «       }| j                  d«       | j                  d«       t        j                  ||| j                  |«      «      S dk(  �rž| j                  d«       | j                  «       dk(  s| j                  «       rÏ| j                  «        | j                  «       }t        j                  || j                  |«      «      }| j                  «       }| j                  d«       | j                  «       }| j                  d«       | j	                  «       }| j                  «        t        j                   ||||| j                  |«      «      S | j                  «       }| j                  d«       | j                  «       }| j                  d«       | j                  «       }| j                  d«       | j	                  «       }t        j                   ||||| j                  |«      «      S 	 | j#                  d| j                  |«      «       y )	Nr  rî   rÿ   r	  r6  r
  r:  zInvalid iteration statement)rÍ   rn   rÓ   r‘  r  r   ÚWhilerL   ÚDoWhilerÉ   rà   rW   r[  ÚDeclListÚ_parse_expression_optr[   ÚForrJ   )r   rN   r)  r"  r›   r¥   Ú	next_exprs          r   r  z"CParser._parse_iteration_statementW  s6  € Ø�m‰m‹oˆØ�h‰hÝØ—‘˜XÔ&Ø×-Ñ-Ó/�Ø—‘˜XÔ&Ø×:Ñ:Ó<�Ü—{‘{ 4¨¨t¯©¸sÓ/CÓDÐDÝØ×:Ñ:Ó<�Ø—‘˜WÔ%Ø—‘˜XÔ&Ø×-Ñ-Ó/�Ø—‘˜XÔ&Ø—‘˜VÔ$Ü—}‘} T¨4°·±ÀÓ1EÓFÐFÜØ—‘˜XÔ&Ø—?‘?Ó$Ð(8Ò8¸D×<TÑ<TÔ<Và×$Ñ$Ô&Ø ×3Ñ3Ó5�EÜ Ÿ>™>¨%°·±ÀÓ1EÓF�DØ×5Ñ5Ó7�DØ—L‘L Ô(Ø $× :Ñ :Ó <�IØ—L‘L Ô*Ø×>Ñ>Ó@�DØ—O‘OÔ%Ü Ÿ9™9 T¨4°¸DÀ$Ç/Á/ÐRUÓBVÓWÐWà×1Ñ1Ó3�Ø—‘˜VÔ$Ø×1Ñ1Ó3�Ø—‘˜VÔ$Ø ×6Ñ6Ó8�	Ø—‘˜XÔ&Ø×:Ñ:Ó<�Ü—y‘y  t¨Y¸¸d¿o¹oÈcÓ>RÓSÐSØØ×!Ñ!Ð"?ÀÇÁÐQTÓAUÕVr!   c                 ó  — | j                  «       }|j                  xdk(  rR | j                  d«      }| j                  d«       t        j                  |j
                  | j                  |«      «      S xdk(  r6 | j                  d«       t        j                  | j                  |«      «      S xdk(  r6 | j                  d«       t        j                  | j                  |«      «      S dk(  r|| j                  d«      r%t        j                  d | j                  |«      «      S | j                  «       }| j                  d«       t        j                  || j                  |«      «      S 	 | j                  d| j                  |«      «       y )Nr  rÅ   r6  r  r  r  zInvalid jump statement)rÍ   rn   rÓ   r   ÚGotorK   rL   ÚBreakÚContinuerÑ   ÚReturnr‘  rJ   )r   rN   r�  r�  s       r   r  zCParser._parse_jump_statement„  s  € Ø�m‰m‹oˆØ�h‰hÝØŸ<™<¨Ó-�Ø—‘˜VÔ$Ü—z‘z (§.¡.°$·/±/À#Ó2FÓGÐGÝØ—‘˜VÔ$Ü—{‘{ 4§?¡?°3Ó#7Ó8Ð8ÝØ—‘˜VÔ$Ü—~‘~ d§o¡o°cÓ&:Ó;Ð;ÛØ—<‘< Ô'Ü Ÿ<™<¨¨d¯o©o¸cÓ.BÓCÐCØ×-Ñ-Ó/�Ø—‘˜VÔ$Ü—|‘| D¨$¯/©/¸#Ó*>Ó?Ð?ØØ×!Ñ!Ð":¸D¿O¹OÈCÓ<PÕQr!   c                 ó”   — | j                  «       }| j                  d«      }|€$t        j                  | j	                  |«      «      S |S )Nr6  )r0  rÓ   r   r"  rL   )r   r�  Úsemi_toks      r   r  z#CParser._parse_expression_statement›  sB   € Ø×)Ñ)Ó+ˆØ—<‘< Ó'ˆØˆ<Ü×'Ñ'¨¯©¸Ó(AÓBÐBØˆr!   c                 óD   — | j                  «       r| j                  «       S y rT   )rã   r‘  rV   s    r   r0  zCParser._parse_expression_opt¦  s    € Ø×"Ñ"Ô$Ø×)Ñ)Ó+Ð+Ør!   c                 ó0  — | j                  «       }| j                  d«      s|S || j                  «       g}| j                  d«      r1|j                  | j                  «       «       | j                  d«      rŒ1t        j                  ||j
                  «      S r©  ©rk  rÑ   rU   r   ÚExprListrQ   ©r   r�  Úexprss      r   r‘  zCParser._parse_expression¬  sx   € Ø×0Ñ0Ó2ˆØ�|‰|˜GÔ$ØˆKØ�t×8Ñ8Ó:Ð;ˆØ�l‰l˜7Ô#Ø�L‰L˜×:Ñ:Ó<Ô=ð �l‰l˜7Õ#ä�~‰~˜e T§Z¡ZÓ0Ð0r!   c                 óÞ   — | j                  «       }| j                  «       rL| j                  «       j                  }| j	                  «       }t        j                  ||||j                  «      S |S rT   )Ú_parse_conditional_expressionr  rÍ   rK   rk  r   Ú
AssignmentrQ   )r   r�  ÚopÚrhss       r   rk  z$CParser._parse_assignment_expression·  s[   € Ø×1Ñ1Ó3ˆØ×!Ñ!Ô#Ø—‘“×&Ñ&ˆBØ×3Ñ3Ó5ˆCÜ×#Ñ# B¨¨c°4·:±:Ó>Ð>Øˆr!   c                 óî   — | j                  «       }| j                  d«      rS| j                  «       }| j                  d«       | j	                  «       }t        j                  ||||j                  «      S |S )NÚCONDOPr¤  )Ú_parse_binary_expressionrÑ   r‘  rÓ   rA  r   Ú	TernaryOprQ   )r   r�  ÚiftrueÚiffalses       r   rA  z%CParser._parse_conditional_expressionÁ  sb   € Ø×,Ñ,Ó.ˆØ�<‰<˜Ô!Ø×+Ñ+Ó-ˆFØ�L‰L˜Ô!Ø×8Ñ8Ó:ˆGÜ—?‘? 4¨°¸$¿*¹*ÓEÐEØˆr!   Úmin_precÚlhsc                 óð  — |€| j                  «       }	 | j                  «       }|�|j                  t        vr	 |S t        |j                     }||k  r	 |S |j                  }| j                  «        | j                  «       }	 | j                  «       }|�|j                  t        vrn-t        |j                     }||kD  r| j                  ||«      }nnŒRt        j                  ||||j                  «      }ŒärT   )
Ú_parse_cast_expressionrI   rn   Ú_BINARY_PRECEDENCErK   rÍ   rG  r   ÚBinaryOprQ   )	r   rK  rL  rN   ÚprecrC  rD  Únext_tokÚ	next_precs	            r   rG  z CParser._parse_binary_expressionË  sõ   € ð ˆ;Ø×-Ñ-Ó/ˆCàØ—*‘*“,ˆCØˆ{˜cŸh™hÔ.@Ñ@Øð* ˆ
ô) & c§h¡hÑ/ˆDØ�hŠØð$ ˆ
ð! —‘ˆBØ�M‰MŒOØ×-Ñ-Ó/ˆCàØŸ:™:›<�ØÐ# x§}¡}Ô<NÑ'NØÜ.¨x¯}©}Ñ=�	Ø˜tÒ#Ø×7Ñ7¸	À3ÓG‘Càð ô —.‘.  S¨#¨s¯y©yÓ9ˆCð- r!   c                 ó(  — | j                  «       }|�q|\  }}}}| j                  «       dk(  r!| j                  |«       | j                  «       S | j                  «       }t	        j
                  ||| j                  |«      «      S | j                  «       S )Nr  )r  rÉ   rÚ   rN  r   ÚCastrL   Ú_parse_unary_expression)r   Úresultrƒ   rÕ   r  rN  r�  s          r   rN  zCParser._parse_cast_expressioní  s�   € Ø×0Ñ0Ó2ˆØÐØ'-Ñ$ˆC��z 1Ø�‰Ó  HÒ,ð —‘˜DÔ!ð ×+Ñ+Ó-Ð-ð ×2Ñ2Ó4�Ü—z‘z # t¨T¯_©_¸ZÓ-HÓIÐIØ×+Ñ+Ó-Ð-r!   c                 óð  — | j                  «       }|dv rK| j                  «       }| j                  «       }t        j                  |j
                  ||j                  «      S |dv rK| j                  «       }| j                  «       }t        j                  |j
                  ||j                  «      S |dk(  r½| j                  «       }| j                  «       }|�[|\  }}}}| j                  «       dk7  r0t        j                  |j
                  || j                  |«      «      S | j                  |«       | j                  «       }t        j                  |j
                  || j                  |«      «      S |dk(  rr| j                  «       }| j                  d«       | j                  «       }| j                  d«       t        j                  |j
                  || j                  |«      «      S | j                  «       S )N>   ÚPLUSPLUSÚ
MINUSMINUS>   ÚANDÚNOTÚLNOTÚPLUSÚMINUSrí   ÚSIZEOFr  Ú_ALIGNOFrî   rÿ   )rÉ   rÍ   rV  r   ÚUnaryOprK   rQ   rN  r  rL   rÚ   rÓ   r  Ú_parse_postfix_expression)r   ré   rN   r�  rW  rƒ   rÕ   rN  s           r   rV  zCParser._parse_unary_expression  s�  € Ø—?‘?Ó$ˆØÐ1Ñ1Ø—-‘-“/ˆCØ×/Ñ/Ó1ˆDÜ—=‘= §¡¨D°$·*±*Ó=Ð=àÐGÑGØ—-‘-“/ˆCØ×.Ñ.Ó0ˆDÜ—=‘= §¡¨D°$·*±*Ó=Ð=à�xÒØ—-‘-“/ˆCØ×4Ñ4Ó6ˆFØÐ!Ø"(‘��T˜1˜aØ—?‘?Ó$¨Ò0Ü Ÿ=™=¨¯©°C¸¿¹ÈÓ9MÓNÐNð —‘˜DÔ!Ø×/Ñ/Ó1ˆDÜ—=‘= §¡¨D°$·/±/À#Ó2FÓGÐGà�zÒ!Ø—-‘-“/ˆCØ�L‰L˜Ô"Ø×'Ñ'Ó)ˆCØ�L‰L˜Ô"Ü—=‘= §¡¨C°·±ÀÓ1EÓFÐFà×-Ñ-Ó/Ð/r!   c                 óÐ  — d }| j                  «       }|�c|\  }}}}| j                  «       dk(  r8| j                  «       }t        j                  |||| j                  |«      «      }n| j                  |«       |€| j                  «       }	 | j                  «       }|dk(  rS| j                  «        | j                  «       }	| j                  d«       t        j                  ||	|j                  «      }Œi|dk(  ry| j                  «        | j                  «       dk(  r| j                  «        d }
n!| j                  «       }
| j                  d«       t        j                  ||
|j                  «      }Œç|dv r¬| j                  «       }| j                  «       }|j                  dvr!| j!                  d| j                  |«      «       t        j"                  |j$                  | j                  |«      «      }t        j&                  ||j$                  ||j                  «      }�Œ—|d	v r@| j                  «       }t        j(                  d
|j$                  z   ||j                  «      }�ŒÛ	 |S )Nr  r  rÞ  rî   rÿ   >   ÚARROWÚPERIOD>   rÅ   rÆ   zInvalid struct reference>   rY  rZ  Úp)r  rÉ   rJ  r   ÚCompoundLiteralrL   rÚ   Ú_parse_primary_expressionrÍ   r‘  rÓ   ÚArrayRefrQ   Ú_parse_argument_expression_listÚFuncCallrn   rJ   rÅ   rK   Ú	StructRefrb  )r   r�  rW  rƒ   rÕ   r  r�   r¥   ré   ÚsubrS  Úop_tokr�  ÚfieldrN   s                  r   rc  z!CParser._parse_postfix_expression(  s  € ØˆØ×0Ñ0Ó2ˆØÐØ-3Ñ*ˆC��z 7ð �‰Ó  HÒ,Ø×.Ñ.Ó0�Ü×,Ñ,Ø˜˜w¨¯©¸
Ó(Có‘ð —‘˜DÔ!àˆ<Ø×1Ñ1Ó3ˆDØØ—‘Ó(ˆHØ˜:Ò%Ø—‘”Ø×,Ñ,Ó.�Ø—‘˜ZÔ(Ü—~‘~ d¨C°·±Ó<�ØØ˜8Ò#Ø—‘”Ø—?‘?Ó$¨Ò0Ø—M‘M”OØ‘Dà×?Ñ?ÓA�DØ—L‘L Ô*Ü—~‘~ d¨D°$·*±*Ó=�ØØÐ.Ñ.ØŸ™›�ØŸ=™=›?�Ø—=‘=Ð(8Ñ8Ø×%Ñ%Ø2°D·O±OÀHÓ4Môô Ÿ™ §¡°·±ÀÓ1JÓK�Ü—‘ t¨V¯\©\¸5À$Ç*Á*ÓM�ÙØÐ5Ñ5Ø—m‘m“o�Ü—}‘} S¨3¯9©9¡_°d¸D¿J¹JÓG�ÙØØˆr!   c                 ó  — | j                  «       }|dk(  r| j                  «       S |t        v s|t        v s|t        v s|t
        v r| j                  «       S |t        v r| j                  «       S |dk(  rW| j                  «        | j                  «       dk(  r| j                  «       }n| j                  «       }| j                  d«       |S |dk(  r| j                  «       S |dk(  r¿| j                  «       }| j                  d«       | j                  «       }| j                  d«       | j                  «       }| j                  d«       | j!                  |«      }t#        j$                  t#        j&                  |j(                  |«      t#        j*                  ||g|«      |«      S |dk(  r¿| j                  «       }| j                  d«       | j                  «       }| j                  d«       | j-                  «       }| j                  d«       | j!                  |«      }t#        j$                  t#        j&                  |j(                  |«      t#        j*                  ||g|«      |«      S | j/                  d	| j0                  j2                  «       y )
NrÅ   rî   r  rÿ   Ú_GENERICÚ__BUILTIN_VA_ARGr  ÚOFFSETOFzInvalid expression)rÉ   rú  Ú
_INT_CONSTÚ_FLOAT_CONSTÚ_CHAR_CONSTÚ_PREDEFINED_CONSTÚ_parse_constantÚ_STRING_LITERALÚ_parse_unified_string_literalrÍ   rW  r‘  rÓ   Ú_parse_generic_selectionrk  r  rL   r   rl  rÅ   rK   r=  Ú!_parse_offsetof_member_designatorrJ   r;   rC   )r   ré   r�  rN   rƒ   rQ   Úoff_tokÚ
designators           r   ri  z!CParser._parse_primary_expressionb  s%  € Ø—?‘?Ó$ˆØ�tÒØ×)Ñ)Ó+Ð+àœ
Ñ"Øœ<Ñ'Øœ;Ñ&ØÔ,Ñ,à×'Ñ'Ó)Ð)Ø”Ñ&Ø×5Ñ5Ó7Ð7Ø�xÒØ�M‰MŒOØ�‰Ó  HÒ,ð ×5Ñ5Ó7‘à×-Ñ-Ó/�Ø�L‰L˜Ô"ØˆKØ�zÒ!Ø×0Ñ0Ó2Ð2ØÐ)Ò)Ø—-‘-“/ˆCØ�L‰L˜Ô"Ø×4Ñ4Ó6ˆDØ�L‰L˜Ô!Ø×'Ñ'Ó)ˆCØ�L‰L˜Ô"Ø—O‘O CÓ(ˆEÜ—>‘>Ü—‘˜Ÿ™ EÓ*Ü—‘  c˜{¨EÓ2Øóð ð
 �zÒ!Ø—m‘m“oˆGØ�L‰L˜Ô"Ø×'Ñ'Ó)ˆCØ�L‰L˜Ô!Ø×?Ñ?ÓAˆJØ�L‰L˜Ô"Ø—O‘O GÓ,ˆEÜ—>‘>Ü—‘˜Ÿ™¨Ó.Ü—‘  ZÐ0°%Ó8Øóð ð 	×ÑÐ.°·	±	×0BÑ0BÕCr!   c                 óœ  — | j                  d«      }| j                  d«       | j                  «       }| j                  d«       | j                  «       g}| j                  d«      r1|j	                  | j                  «       «       | j                  d«      rŒ1| j                  d«       t        j                  ||| j                  |«      «      S )Nrr  rî   r  rÿ   )rÓ   rk  Ú_parse_generic_associationrÑ   rU   r   ÚGenericSelectionrL   )r   rN   r�  Úassociationss       r   r|  z CParser._parse_generic_selectionš  s¢   € Ø�l‰l˜:Ó&ˆØ�‰�XÔØ×0Ñ0Ó2ˆØ�‰�WÔØ×7Ñ7Ó9Ð:ˆØ�l‰l˜7Ô#Ø×Ñ × ?Ñ ?Ó AÔBð �l‰l˜7Õ#à�‰�XÔÜ×%Ñ% d¨L¸$¿/¹/È#Ó:NÓOÐOr!   c                 óF  — | j                  «       }|€&| j                  d| j                  j                  «       | j	                  d«      rd n| j                  «       }| j                  d«       | j                  «       }t        j                  ||| j                  |«      «      S )NrË   r  r¤  )rI   rJ   r;   rC   rÑ   r  rÓ   rk  r   ÚGenericAssociationrL   rŒ  s       r   r�  z"CParser._parse_generic_association§  s€   € Ø�j‰j‹lˆØˆ;Ø×ÑÐ/°·±×1CÑ1CÔDØ—l‘l 9Ô-‰d°4×3HÑ3HÓ3JˆØ�‰�WÔØ×0Ñ0Ó2ˆÜ×'Ñ'¨¨T°4·?±?À3Ó3GÓHÐHr!   c                 óZ  — | j                  «       }	 | j                  d«      r3| j                  «       }t        j                  |d||j                  «      }ŒE| j                  d«      rC| j                  «       }| j                  d«       t        j                  |||j                  «      }Œ™	 |S )Nrf  ú.r  rÞ  )r  rÑ   r   rm  rQ   r‘  rÓ   rj  )r   r   rp  r�  s       r   r}  z)CParser._parse_offsetof_member_designator²  s�   € Ø×/Ñ/Ó1ˆØØ�|‰|˜HÔ%Ø×8Ñ8Ó:�Ü—‘ t¨S°%¸¿¹ÓD�ØØ�|‰|˜JÔ'Ø×-Ñ-Ó/�Ø—‘˜ZÔ(Ü—~‘~ d¨D°$·*±*Ó=�ØØØˆr!   c                 óì   — | j                  «       }|g}| j                  d«      r1|j                  | j                  «       «       | j                  d«      rŒ1t        j                  ||j
                  «      S r©  r<  r>  s      r   rk  z'CParser._parse_argument_expression_listÂ  s[   € Ø×0Ñ0Ó2ˆØ�ˆØ�l‰l˜7Ô#Ø�L‰L˜×:Ñ:Ó<Ô=ð �l‰l˜7Õ#ä�~‰~˜e T§Z¡ZÓ0Ð0r!   c                 ó"   — | j                  «       S rT   )rA  rV   s    r   r‹  z"CParser._parse_constant_expressionÊ  s   € Ø×1Ñ1Ó3Ð3r!   c                 ó‚   — | j                  d«      }t        j                  |j                  | j	                  |«      «      S )NrÅ   )rÓ   r   rÅ   rK   rL   rÇ   s     r   rú  zCParser._parse_identifierÑ  s.   € Ø�l‰l˜4Ó ˆÜ�x‰x˜Ÿ	™	 4§?¡?°3Ó#7Ó8Ð8r!   c                 óÞ   — | j                  «       }|j                  dvr!| j                  d| j                  |«      «       t	        j
                  |j                  | j                  |«      «      S )N>   rÅ   rÆ   zExpected identifier)rÍ   rn   rJ   rL   r   rÅ   rK   rÇ   s     r   r  z#CParser._parse_identifier_or_typeidÖ  sR   € Ø�m‰m‹oˆØ�8‰8Ð+Ñ+Ø×ÑÐ3°T·_±_ÀSÓ5IÔJÜ�x‰x˜Ÿ	™	 4§?¡?°3Ó#7Ó8Ð8r!   c                 ó®  — | j                  «       }|j                  t        v rAt        j                  t        |j                     |j
                  | j                  |«      «      S |j                  t        v �r |j
                  dd  j                  «       }|j                  d«      rh| j                  dk7  r!| j                  d| j                  |«      «       d|v rdnd}t        j                  ||j
                  | j                  |«      «      S d}d}|j
                  dd  D ]  }|d	v r|d
z  }Œ|dv sŒ|d
z  }Œ |d
kD  rt        d«      ‚|dkD  rt        d«      ‚d|z  d|z  z   }t        j                  |dz   |j
                  | j                  |«      «      S |j                  t        v rÊ|j
                  dd  dv rd}nR|j
                  dd  dv rd}n>|j
                  dd  dv rd}n*|j
                  d   dv rd}n|j
                  d   d	v rd}nd}|dv r0| j                  dk7  r!| j                  d| j                  |«      «       t        j                  ||j
                  | j                  |«      «      S |j                  t        v r0t        j                  d |j
                  | j                  |«      «      S | j                  d!| j                  |«      «       y )"Néýÿÿÿ)ÚwbÚwbur
  z)Bit-precise integer constants require C23Úuzunsigned _BitIntÚ_BitIntr   )ÚlÚLr   )r�  ÚUz.Constant cannot have more than one u/U suffix.r¡   z.Constant cannot have more than two l/L suffix.z	unsigned zlong r(   éþÿÿÿ>   ÚDFÚdfÚ
_Decimal32>   ÚDDÚddÚ
_Decimal64>   ÚDLÚdlÚ_Decimal128r^   )ÚfÚFÚfloatzlong doubleÚdouble>   r˜  r›  rž  z&Decimal floating constants require C23ÚcharzInvalid constant)rÍ   rn   rx  r   ÚConstantrK   rL   ru  ÚlowerÚendswithr<   rJ   Ú
ValueErrorrv  rw  )r   rN   Úsuffixr®   Úu_countÚl_countÚchÚprefixs           r   ry  zCParser._parse_constantÝ  s‘  € Ø�m‰m‹oˆØ�8‰8Ô(Ñ(Ü—>‘>Ü! #§(¡(Ñ+¨S¯Y©Y¸¿¹ÈÓ8Lóð ð �8‰8”zÒ!à—Y‘Y˜r˜s�^×)Ñ)Ó+ˆFØ�‰˜}Ô-Ø—=‘= EÒ)Ø×%Ñ%ØCØŸ™¨Ó,ôð +.°©-Ñ&¸Y�Ü—~‘~ a¨¯©°D·O±OÀCÓ4HÓIÐIàˆGØˆGØ—i‘i  �nò !�Ø˜Ñ#Ø˜q‘L‘GØ˜:Ò%Ø˜q‘L‘Gð	!ð
 ˜Š{Ü Ð!QÓRÐRØ˜Š{Ü Ð!QÓRÐRØ  7Ñ*¨W°wÑ->Ñ>ˆFÜ—>‘> &¨5¡.°#·)±)¸T¿_¹_ÈSÓ=QÓRÐRà�8‰8”|Ñ#Ø�y‰y˜˜ˆ~ Ñ-Ø ‘Ø—‘˜2˜3� <Ñ/Ø ‘Ø—‘˜2˜3� <Ñ/Ø!‘Ø—‘˜2‘ *Ñ,Ø‘Ø—‘˜2‘ *Ñ,Ø!‘à�àÐ@Ñ@Ø—M‘M UÒ*à×!Ñ!Ø<¸d¿o¹oÈcÓ>Rôô —>‘> ! S§Y¡Y°·±ÀÓ0DÓEÐEà�8‰8”{Ñ"Ü—>‘> &¨#¯)©)°T·_±_ÀSÓ5IÓJÐJà×ÑÐ,¨d¯o©o¸cÓ.BÕCr!   c                 óˆ  — | j                  «       }|j                  t        vr!| j                  d| j	                  |«      «       |j
                  j                  dd«      \  }}|d d g}| j                  «       t        v r…| j                  «       }|j
                  j                  dd«      \  }}|xs |}|d d }| j                  |d   |«      r|j                  |«       n|dxx   |z  cc<   | j                  «       t        v rŒ…|dz   dj                  |«      z   dz   }t        j                  d|| j	                  |«      «      S )NzInvalid string literalú"r   r^   z" "Ústring)rÍ   rn   rz  rJ   rL   rK   ÚsplitrÉ   Ú_string_literal_needs_separatorrU   Újoinr   r¤  )	r   rN   r¬  ÚcontentsÚpartsÚtok2Únext_prefixÚnext_contentsrK   s	            r   r{  z%CParser._parse_unified_string_literal	  s%  € ð �m‰m‹oˆØ�8‰8œ?Ñ*Ø×ÑÐ6¸¿¹ÈÓ8LÔMð Ÿ9™9Ÿ?™?¨3°Ó2Ñˆ�Ø˜#˜2��ˆØ�o‰oÓ¤?Ñ2Ø—=‘=“?ˆDØ)-¯©×)9Ñ)9¸#¸qÓ)AÑ&ˆK˜ð Ò*˜{ˆFØ)¨#¨2Ð.ˆMð ×3Ñ3°E¸"±I¸}ÔMØ—‘˜]Õ+à�b“	˜]Ñ*“	ð �o‰oÓ¤?Ò2ð$ ˜‘˜uŸz™z¨%Ó0Ñ0°3Ñ6ˆÜ�~‰~˜h¨¨t¯©¸sÓ/CÓDÐDr!   ÚleftÚrightc                 óÎ  ‡‡— | r|sy| dd |dd z   Št        ˆfd„dD «       «      ry| j                  d«      }|d	k(  ry|}|d
kD  r!| |dz
     dk(  r|dz  }|d
kD  r| |dz
     dk(  rŒ||z
  dz   dz  d
k(  ry| |dz   d }|j                  d«      r"dŠ|d
   ‰v xr t        ˆfd„|dd D «       «      S dt	        |«      cxk  xr dk  nc xr t        d„ |D «       «      xr |d
   dv S )zAWhether joining two literal bodies would change their C spelling.Fr•  Nr¡   c              3   ó,   •K  — | ]  }d |z   ‰v –— Œ y­w)z??Nr)   )Ú.0r«  Úboundarys     €r   ú	<genexpr>z:CParser._string_literal_needs_separator.<locals>.<genexpr>I	  s   øè ø€ Ò;¨ˆt�b‰y˜HÔ$Ñ;ùs   ƒz	=/'()!<>-Tú\r^   r   r   ÚxÚ0123456789abcdefABCDEFc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wrT   r)   )r¼  r«  Ú
hex_digitss     €r   r¾  z:CParser._string_literal_needs_separator.<locals>.<genexpr>]	  s   øè ø€ Ò1XÀr°"¸
Ô2BÑ1Xùs   ƒé   c              3   ó$   K  — | ]  }|d v –— Œ
 y­w)Ú01234567Nr)   )r¼  r«  s     r   r¾  z:CParser._string_literal_needs_separator.<locals>.<genexpr>c	  s   è ø€ Ò6¨�B˜*Ô$Ñ6ùs   ‚rÆ  )ÚanyÚrfindÚ
startswithÚallrY   )r¸  r¹  Úescape_startÚ	run_startÚescaper½  rÃ  s        @@r   r±  z'CParser._string_literal_needs_separator@	  s3  ù€ ñ ™5Øð ˜˜�9˜u R a˜yÑ(ˆÜÓ;¨{Ô;Ô;Øð —z‘z $Ó'ˆØ˜2ÒØð !ˆ	Ø˜!Šm  Y°¡]Ñ 3°tÒ ;Ø˜‰NˆIð ˜!Šm  Y°¡]Ñ 3°tÓ ;à˜9Ñ$ qÑ(¨AÑ-°Ò2Øà�l QÑ&Ð(Ð)ˆØ×Ñ˜SÔ!à1ˆJØ˜‘8˜zÐ)ÒX¬cÓ1XÈVÐTUÐTVÈZÔ1XÓ.XÐXð
 ”�V“Ö ˜qÔ ò 'ÜÑ6¨vÔ6Ó6ò'à�a‘˜JÐ&ð	
r!   c                 ó  — | j                  d«      }|rj| j                  d«      r%t        j                  g | j                  |«      «      S | j	                  «       }| j                  d«       | j                  d«       |S | j                  «       S )Nr  rš  r  )rÑ   r   ÚInitListrL   Ú_parse_initializer_listrÓ   rk  )r   r   Ú	init_lists      r   rJ  zCParser._parse_initializerm	  st   € Ø—\‘\ (Ó+ˆ
ÙØ�|‰|˜HÔ%Ü—~‘~ b¨$¯/©/¸*Ó*EÓFÐFØ×4Ñ4Ó6ˆIØ�L‰L˜Ô!Ø�L‰L˜Ô"ØÐà×0Ñ0Ó2Ð2r!   c                 ó  — | j                  «       g}| j                  d«      rE| j                  «       dk(  rn1|j                  | j                  «       «       | j                  d«      rŒEt	        j
                  ||d   j                  «      S )Nr  rš  r   )Ú_parse_initializer_itemrÑ   rÉ   rU   r   rÏ  rQ   )r   r¢  s     r   rÐ  zCParser._parse_initializer_listz	  so   € Ø×-Ñ-Ó/Ð0ˆØ�l‰l˜7Ô#Ø�‰Ó  HÒ,ØØ�L‰L˜×5Ñ5Ó7Ô8ð �l‰l˜7Õ#ô �~‰~˜e U¨1¡X§^¡^Ó4Ð4r!   c                 óž   — d }| j                  «       dv r| j                  «       }| j                  «       }|�t        j                  ||«      S |S ©N>   rf  r  )rÉ   Ú_parse_designationrJ  r   ÚNamedInitializer)r   Údesignationr¥   s      r   rÓ  zCParser._parse_initializer_itemƒ	  sQ   € ØˆØ�?‰?ÓÐ 6Ñ6Ø×1Ñ1Ó3ˆKØ×&Ñ&Ó(ˆØÐ"Ü×)Ñ)¨+°tÓ<Ð<Øˆr!   c                 óH   — | j                  «       }| j                  d«       |S )Nr>  )Ú_parse_designator_listrÓ   ©r   Údesignatorss     r   rÖ  zCParser._parse_designation�	  s"   € Ø×1Ñ1Ó3ˆØ�‰�XÔØÐr!   c                 ó’   — g }| j                  «       dv r2|j                  | j                  «       «       | j                  «       dv rŒ2|S rÕ  )rÉ   rU   Ú_parse_designatorrÛ  s     r   rÚ  zCParser._parse_designator_list“	  sF   € ØˆØ�o‰oÓÐ#9Ñ9Ø×Ñ˜t×5Ñ5Ó7Ô8ð �o‰oÓÐ#9Ò9àÐr!   c                 óD  — | j                  d«      x}rF| j                  «       }| j                  d«       t        j                  || j                  |«      «      S | j                  d«      r| j                  «       S | j                  d| j                  j                  «       y )Nr  rÞ  rf  zInvalid designator)
rÑ   r‹  rÓ   r   ÚArrayDesignatorrL   r  rJ   r;   rC   r“  s      r   rÞ  zCParser._parse_designator›	  s‚   € Ø—,‘,˜zÓ*Ð*ˆ3Ð*Ø×2Ñ2Ó4ˆDØ�L‰L˜Ô$Ü×(Ñ(¨¨t¯©¸sÓ/CÓDÐDØ�<‰<˜Ô!Ø×3Ñ3Ó5Ð5Ø×ÑÐ.°·	±	×0BÑ0BÕCr!   c                 óh   — | j                  d«      }| j                  d| j                  |«      «       y )Nr7  zDirectives not supported yet)rÓ   rJ   rL   rÇ   s     r   rA  zCParser._parse_pp_directive¨	  s*   € Ø�l‰l˜8Ó$ˆØ×ÑÐ8¸$¿/¹/È#Ó:NÕOr!   c                 óx  — | j                  «       dk(  r‡| j                  «       }| j                  «       dk(  r?| j                  «       }t        j                  |j                  | j                  |«      «      S t        j                  d| j                  |«      «      S | j                  «       dk(  rg| j                  «       }| j                  d«      }| j                  «       }| j                  d«       t        j                  || j                  |«      «      S | j                  d| j                  j                  «       y )Nr9  ÚPPPRAGMASTRr.   r8  rî   rÿ   zInvalid pragma)rÉ   rÍ   r   r  rK   rL   rÓ   r{  rJ   r;   rC   )r   rN   Ústr_tokÚlparenÚliterals        r   rB  z!CParser._parse_pppragma_directive®	  så   € Ø�?‰?Ó 
Ò*Ø—-‘-“/ˆCØ�‰Ó  MÒ1ØŸ-™-›/�Ü—|‘| G§M¡M°4·?±?À7Ó3KÓLÐLÜ—<‘<  D§O¡O°CÓ$8Ó9Ð9à�?‰?Ó 	Ò)Ø—-‘-“/ˆCØ—\‘\ (Ó+ˆFØ×8Ñ8Ó:ˆGØ�L‰L˜Ô"Ü—<‘< ¨¯©¸Ó)@ÓAÐAà×ÑÐ*¨D¯I©I×,>Ñ,>Õ?r!   c                 ó’   — g }| j                  «       dv r2|j                  | j                  «       «       | j                  «       dv rŒ2|S )N>   r8  r9  )rÉ   rU   rB  )r   r_  s     r   r^  z&CParser._parse_pppragma_directive_listÀ	  sC   € ØˆØ�o‰oÓÐ#:Ñ:Ø�N‰N˜4×9Ñ9Ó;Ô<ð �o‰oÓÐ#:Ò:àˆr!   c                 ó<  — | j                  d«      }| j                  d«       | j                  «       }d }| j                  d«      r| j                  «       }| j                  d«       | j                  d«       t	        j
                  ||| j                  |«      «      S )Nr:  rî   r  rÿ   r6  )rÓ   r‹  rÑ   r{  r   ÚStaticAssertrL   )r   rN   r)  rP   s       r   rC  zCParser._parse_static_assertÉ	  s€   € Ø�l‰lÐ+Ó,ˆØ�‰�XÔØ×.Ñ.Ó0ˆØˆØ�<‰<˜Ô Ø×4Ñ4Ó6ˆCØ�‰�XÔØ�‰�VÔÜ×!Ñ! $¨¨T¯_©_¸SÓ-AÓBÐBr!   )r.   F)r   N)F©r   rT   )FF)r   r‰   rÞ   )r   rœ   )T)r   N)¥r"   r#   r$   r%   r   Úboolrn   r&   r   rB   r   r0  rO   r   r   rJ   rW   r[   rb   rd   rh   r(   r:   r   r“   rt   r«   rª   r˜   Úlistr‡   r	   r•   rš   r³   r¹   r¾   r   rI   rÂ   rÉ   rÍ   rÑ   rÓ   rÖ   rÚ   rL   rà   rã   rê   rð   Útuplerô   rý   rò   r  r  r  r  ræ   r!  r)  r™   rH   r1  r3  rD  r[  rH  r\  rI  rF  rG  rV  rE  rv  rs  r‰  r”   r~  r  r’  r�  r}   r‚  rK  r–  r…  r›  r¡  r¦  rª  r†  r®  r¯  rµ  r˜  rû   rú   rù   rÂ  rÉ  rÍ  rÏ  rÖ  rÐ  rÈ  ré  rä  rë  rî  rñ  ró  rå  rø  r  rø   rý  rÿ  r   r  r  r  r  rW  r  r  r  r  r  r0  r‘  rk  rA  rG  rN  rV  rc  ri  r‚  r|  r…  r�  r}  rk  r‹  rú  rÅ   r  ry  r¤  r{  Ústaticmethodr±  rJ  rÐ  rÓ  rÖ  rÚ  rÞ  rA  rB  r^  ré  rC  r)   r!   r   r-   r-   2   s8  „ ñð" "Ø$Ø(Ø"Ø*Ø ØðCð $òCàðCð �F‰|ðCð ð	Cð
 ðCð ðCð ðCð ðCð ðCð 
óCðB <AñØðØ#&ðØ48ðà	�‰óð8, ð ,¨E°C©K¸$Ñ,>ð ,À8ó ,ó+ó+ð
+ cð +°%¸$±,ð +À4ó +ð
+ Cð 
+°¸±ð 
+Àó 
+ð cð ¨dó ðY 3ð Y¨cð Y¸3ð YÀ4ó YðJ cð °Sð ¸U¿Z¹Zó ðX9à�j‰j˜5Ÿ=™=Ñ(¨5¯>©>Ñ9ð9ð �u—z‘zÑ"ð9ð 
�‰�e—m‘mÑ	# e§n¡nÑ	4ó	9ðvà˜;Ñ'ðð �u—z‘zÑ!ðð ð	ð
 
óð<
Øð
Ø',§z¡z°DÑ'8ð
ØAFÈÁð
à	�‰ó
ð4 #(ñ	^àð^ð �KÑ ð^ð  ð	^ð
 
ˆe�j‰jÑ	ó^ð@
àð
ð �j‰jð
ð ˜%Ÿ*™*Ñ%¨Ñ,ð	
ð
 �j‰jð
ð 
�‰ó
ð*°ð ¸ó ñ�sð  5¨4¡<ó ð*¨°©ð *¸ó *ñ5˜Cð 5¨¨d©
ó 5ð
˜%ó ð	 #ð 	¨%°$©,ó 	ð #ð ¨%ó ð#�só #ð!˜3ð ! 4ó !ðL˜eð L¨ó Lñ' u¨t¡|ð '¸tó 'ñ. e¨d¡lð .¸dó .ð) 4ó )ñ,¨$ð ,¸4ó ,ð#¨E°#¸±*¸dÐ2BÑ,Có #ð NSñØ"ðØFJðà	ˆu�z‰z˜DÑ  $Ð&Ñ	'óð6"¨E°#¸±*¸dÐ2BÑ,Có "ðH;°Dó ;ð? 4ó ?ð'.à	ˆu�~‰~˜s E¨4°©9Ð4Ñ	5¸Ñ	<ó'.ðX°T¸%×:RÑ:RÑ5Só ð@Ø˜%Ÿ*™*Ñ%ðØ37¸×8PÑ8PÑ3Qðà	ˆe�j‰jÑ	óð*PØ—J‘JðPØ,0°×1IÑ1IÑ,JðPà	�‰óPðØ—J‘J §¡Ñ.°·±Ñ?ðØGRðà	�‰�e—m‘mÑ	# e§n¡nÑ	4óð"=°%·-±-ó =ð¨¨e¯j©jÑ)9ó ðD2¨T°%·*±*Ñ-=ó D2ðLNØðNØ',§z¡zðNà	�‰óNð:	2 D¨¯©Ñ$4ó 	2ð	¨D°·±Ñ,<ð 	ÀÀeÇjÁjÑAQó 	ð? $ u§z¡zÑ"2ó ?ð,Øð,Ø+/ð,à	ˆe�j‰jÑ	ó,ð\Y kð Y°dó Yð

¨Kð 
¸DÀÇÁÑ<Ló 
ð"¨¨e¯j©jÑ)9ó ð %*ñ+Ø!ð+à	ˆ{˜D %¨$¡,Ð.Ñ	/ó+ó4ðC+Ø-1ðC+à	Ð! 4¨°©Ð5Ñ	6óC+ðL¨D°©Ió ð9¨E¯M©Mó 9ð¨¯©ó ðC¨¯©ó CðC¨×)9Ñ)9ó Cð DIñØ˜kÑ*ðØ<@ðà	ˆkÑ	óñ¨dð ¸{ó ð2T°%·*±*ó 2Tðj°°U·Z±ZÑ0@ó ð%
¨4°·
±
Ñ+;¸dÑ+Bó %
ðP¨t°KÑ/@ó óð"
 u§z¡zó 
ð6
8¨E¯N©Nó 
8ð4¨¯
©
ó 4ð( 5§:¡:ó ð( 5§:¡:ó ðH e§j¡jó HðL¨%¯*©*ó LðM°%·*±*ó Mð¨3ð ¸Tð ÀeÇjÁjó ð .2ñ/Øð/Ø&*ð/à	�‰ó/ð,¨¯©ð ¸¿
¹
ó ðT¨5¯:©:ð T¸%¿*¹*ó Tð CGñ;(ØŸ™ dÑ*ð;(Ø38¸4±<ð;(à	�‰ó;(ð|¨e¯j©jð ¸U¿Z¹Zó ð, §
¡
¨TÑ 1ó ð*¨E¯O©Oó ð" u§¡ó ð¨e¯j©jó ðI°5·:±:ó Ið4=Øð=Ø',§z¡z°DÑ'8ð=ØFKÈdÁlð=à	�‰ó=ð-¨E¯J©J¸Ñ,=ó -ð¨¯
©
ó ð
8 %§.¡.ó 
8ð°·
±
¸TÑ0Aó ð$/°5·:±:ó /ð61°·±À$Ñ0Fó 1ð
¨E¯J©Jó 
ð: %§*¡*ó :ð4'°·
±
ó 'ð' 5§:¡:°°U·Z±ZÑ0@Ñ#@ó 'ð"¨¨U¯Z©ZÑ(8ó ð >Bò 
°dð 
ÀeÇjÁjó 
ð"S¨%¯*©*ó SðBW¨E¯J©Jó Wð2)W¨E¯J©Jó )WðZR u§z¡zó Rð.¨U¯Z©Zó ð u§z¡z°DÑ'8ó ð1 5§:¡:ó 1ð¨e¯j©jó ð¨u¯z©zó ð ;?ñØðØ&+§j¡j°4Ñ&7ðà	�‰óðD.¨¯
©
ó .ð* 0¨¯©ó  0ðL3¨5¯:©:ó 3ðt4D¨5¯:©:ó 4Dðp	P¨%×*@Ò*@ó 	PðI¨E×,DÒ,Dó Ið°5·:±:ó ð 1°·±ó 1ð4¨E¯J©Jó 4ð9 5§:¡:ó 9ð
9¨U¯XªXó 9ð<D §¡ó <DðB E¨u¯~ª~ó  EðD ð$
¨cð $
¸#ð $
À$ò $
ó ð$
ðX
3 E§J¡Jó 
3ð5¨¯©ó 5ð¨¯©ó ð D¨¯©Ñ$4ó ð¨¨U¯Z©ZÑ(8ó ðD 5§:¡:ó DðP Xó Pð@¨5¯:©:ó @ð$°°U·Z±ZÑ0@ó ð	C e×&8Ò&8ô 	Cr!   r-   >   r>  ÚOREQUALÚANDEQUALÚDIVEQUALÚMODEQUALÚXOREQUALÚ	PLUSEQUALÚ
MINUSEQUALÚ
TIMESEQUALÚLSHIFTEQUALÚRSHIFTEQUALÚLORÚLANDÚORr¡   ÚXORrÄ  r[  é   ÚEQé   ÚNEÚGTé   ÚGEÚLTÚLEÚRSHIFTé   ÚLSHIFTr^  é   r_  rí   é	   ÚDIVIDEÚMOD>   ÚAUTOÚEXTERNrÜ  ÚTYPEDEFÚREGISTERÚ	CONSTEXPRÚ_THREAD_LOCALÚINLINEÚ	_NORETURN>   ÚCONSTrx  ÚRESTRICTÚVOLATILEÚTYPEOFÚTYPEOF_UNQUAL>   ÚINTÚCHARÚLONGÚVOIDÚFLOATÚSHORTÚ_BOOLÚDOUBLEÚSIGNEDÚUNSIGNEDÚ_COMPLEXÚ__INT128Ú
_DECIMAL32Ú
_DECIMAL64Ú_DECIMAL128>   r}  r{  r|  rÆ   rx  rz  ry  rå   >   rÅ   r[  r\  r]  r^  r_  rí   rî   r`  rt  rY  ra  rr  rZ  rs  >   ÚINT_CONST_BINÚINT_CONST_DECÚINT_CONST_HEXÚINT_CONST_OCTÚINT_CONST_CHARÚFLOAT_CONSTÚHEX_FLOAT_CONSTrë  Ú	nullptr_t)Ú
BOOL_CONSTÚNULLPTR>   Ú
CHAR_CONSTÚWCHAR_CONSTÚU8CHAR_CONSTÚU16CHAR_CONSTÚU32CHAR_CONST>   ÚSTRING_LITERALÚWSTRING_LITERALÚU8STRING_LITERALÚU16STRING_LITERALÚU32STRING_LITERAL>   r	  r  r
  r  r  r6  r  r  r  r  r  r  r8  r  r9  c                   ó†   — e Zd ZdZdeg edz  f   ddfd„Zddededz  fd„Zdedz  fd„Z	defd	„Z
d
eddfd„Zdeddfd„Zy)r?   z8Provides buffered access to tokens supplied by a reader.Ú
read_tokenNr   c                 ó.   — || _         g | _        d| _        y r$  )Ú_read_tokenÚ_bufferÚ_index)r   r>  s     r   rB   z_TokenStream.__init__
  s   € Ø%ˆÔØ+-ˆŒØˆ�r!   r¿   c                 ó¢   — |dk  ry| j                   |z   dz
  }|t        | j                  «      k\  r| j                  |«       | j                  |   S )z¼Peek 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.
        r   Nr   ©rB  rY   rA  Ú_fill)r   r¿   Úposs      r   rÁ   z_TokenStream.peek„
  sK   € ð �Š6ØØ�k‰k˜A‰o Ñ!ˆØ”#�d—l‘lÓ#Ò#Ø�J‰J�qŒMØ�|‰|˜CÑ Ð r!   c                 óÈ   — | j                   t        | j                  «      k\  r| j                  d«       | j                  | j                      }| xj                   dz  c_         |S )z%Consume a single token and return it.r   rD  rÇ   s     r   rÌ   z_TokenStream.next’
  sG   € à�;‰;œ#˜dŸl™lÓ+Ò+Ø�J‰J�qŒMØ�l‰l˜4Ÿ;™;Ñ'ˆØ�Š�qÑ�Øˆ
r!   c                 ó   — | j                   S rT   ©rB  rV   s    r   rÕ   z_TokenStream.markŸ
  s   € Ø�{‰{Ðr!   rÕ   c                 ó   — || _         y rT   rI  rÙ   s     r   rØ   z_TokenStream.reset¢
  s	   € Øˆ�r!   Únc                 óø   — t        | j                  «      | j                  |z   k  rU| j                  «       }| j                  j	                  |«       |€y t        | j                  «      | j                  |z   k  rŒTy y rT   )rY   rA  rB  r@  rU   )r   rK  rN   s      r   rE  z_TokenStream._fill¥
  s^   € Ü�$—,‘,Ó $§+¡+°¡/Ò1Ø×"Ñ"Ó$ˆCØ�L‰L×Ñ Ô$Øˆ{Øô	 �$—,‘,Ó $§+¡+°¡/Õ1r!   rê  )r"   r#   r$   r%   r   r   rB   r(   rÁ   rÌ   rÕ   rØ   rE  r)   r!   r   r?   r?   |
  s   „ ÙBð 8¨B°¸±Ð,<Ñ#=ð À$ó ñ
!�cð ! %¨$¡,ó !ð�e˜d‘ló ð�có ð˜#ð  $ó ð�sð ˜tô r!   r?   c                   óª   — e Zd ZU ee   ed<   ee   ed<   eej                     ed<   ee   ed<   eej                     ed<   eej                     ed<   y)r‰   rŽ   r�   rn   r�   r‘   r’   N)
r"   r#   r$   rì  r&   r'   r   r“   r”   r  r)   r!   r   r‰   r‰   ´
  sN   … Ø
ˆs‰)ƒOØ�#‰YÓØ
ˆu�z‰zÑ
ÓØ�3‰iÓØ�E—M‘MÑ"Ó"Ø˜%×2Ñ2Ñ3Ô3r!   r‰   )rŽ   r�   rn   r�   r‘   c                   ó†   — e Zd ZU ej                  dz  ed<   eej                  dz     ed<   eej                  dz     ed<   y)rœ   Nrk   r¥   r    )r"   r#   r$   r   r“   r'   r   r)   r!   r   rœ   rœ   À
  s;   … ð
 �*‰*�tÑ
ÓØ
�e—j‘j 4Ñ'Ñ
(Ó(Ø˜Ÿ™ dÑ*Ñ+Ô+r!   rœ   N)3Úcollections.abcr   Údataclassesr   Útypingr   r   r   r   r	   r
   r   r.   r   Úast_transformsr   r   Úc_lexerr   r   r   r   Ú	Exceptionr+   r-   r  rO  r  rƒ  r   r€  r„  rp   r+  r,  r‚   r©   rß   Ú_EXPR_STARTru  rv  rx  rw  rz  Úkeysrâ   rç   r?   r‰   rŒ   rœ   r)   r!   r   ú<module>rW     sw  ðõ %Ý !÷÷ ñ õ ß Cß +Ñ +ñ �Ô÷ð ó ðô$	�ô 	÷`&Cñ `&CòFM€ð"Ø	ˆ1ðà
ˆAðð 	ˆ!ðð 
ˆ1ð	ð
 
ˆ1ðð 	ˆ!ðð 	ˆ!ðð 	ˆ!ðð 	ˆ!ðð 	ˆ!ðð 	ˆ!ðð ˆaðð ˆaðð ˆAðð ˆQðð  ˆQð!ð" ˆað#ð$ 
ˆ1ñ%Ð ò*€ð ˜KÐ(€â>€à˜/Ð*€òÐ ð& —^‘^ U§]¡]°E·O±OÀUÇ^Á^ÐTÐ ð Øñàñð ñð ñ	ò
	ñð ò$€ò$€
ð Ð0Ð1€à#)°kÑBÐ ò€ò€ð Øñàñð ñð ñ	ð
 ×ÑÓñð òÐ ÷&.ñ .ôp4�	ô 4ð ÐJÑK€ô,�	õ ,r!   