
    }c;                        d Z ddlZddlmZ ddlmZmZmZmZm	Z	m
Z
mZmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ  ej        e          Zeegef         Z ej        d
          Z ej        d          Z ej        d          Z ej        d          Z  ej        d          Z! ej        d          Z" ej        d          Z# ej        d          Z$ ej        d          Z% ej        d          Z& ej        d          Z'deddfdZ( G d de)          Z* G d d          Z+ G d de+          Z, G d de,          Z- G d  d!e+          Z. G d" d#e,          Z/ G d$ d%e,          Z0 G d& d'e,          Z1 G d( d)e+          Z2 G d* d+e+          Z3 G d, d-e)          Z4 G d. d/e)          Z5 G d0 d1          Z6dS )2z2Utility functions common to the C and C++ domains.    Ndeepcopy)AnyCallableListMatchOptionalPatternTupleUnion)nodes)TextElement)addnodes)Config)loggingz(?u)\s+z(@[a-zA-Z0-9_])[a-zA-Z0-9_]*\ba
  (?x)
    (   # This 'extends' _anon_identifier_re with the ordinary identifiers,
        # make sure they are in sync.
        (~?\b[a-zA-Z_])  # ordinary identifiers
    |   (@[a-zA-Z0-9_])  # our extension for names of anonymous entities
    )
    [a-zA-Z0-9_]*\b
z[1-9][0-9]*(\'[0-9]+)*z0[0-7]*(\'[0-7]+)*z"0[xX][0-9a-fA-F]+(\'[0-9a-fA-F]+)*z0[bB][01]+(\'[01]+)*a%  (?x)
    # unsigned and/or (long) long, in any order, but at least one of them
    (
        ([uU]    ([lL]  |  (ll)  |  (LL))?)
        |
        (([lL]  |  (ll)  |  (LL))    [uU]?)
    )\b
    # the ending word boundary is important for distinguishing
    # between suffixes and UDLs in C++
a  (?x)
    [+-]?(
    # decimal
      ([0-9]+(\'[0-9]+)*[eE][+-]?[0-9]+(\'[0-9]+)*)
    | (([0-9]+(\'[0-9]+)*)?\.[0-9]+(\'[0-9]+)*([eE][+-]?[0-9]+(\'[0-9]+)*)?)
    | ([0-9]+(\'[0-9]+)*\.([eE][+-]?[0-9]+(\'[0-9]+)*)?)
    # hex
    | (0[xX][0-9a-fA-F]+(\'[0-9a-fA-F]+)*[pP][+-]?[0-9a-fA-F]+(\'[0-9a-fA-F]+)*)
    | (0[xX]([0-9a-fA-F]+(\'[0-9a-fA-F]+)*)?\.
        [0-9a-fA-F]+(\'[0-9a-fA-F]+)*([pP][+-]?[0-9a-fA-F]+(\'[0-9a-fA-F]+)*)?)
    | (0[xX][0-9a-fA-F]+(\'[0-9a-fA-F]+)*\.([pP][+-]?[0-9a-fA-F]+(\'[0-9a-fA-F]+)*)?)
    )
z[fFlL]\bz(?x)
    ((?:u8)|u|U|L)?
    '(
      (?:[^\\'])
    | (\\(
        (?:['"?\\abfnrtv])
      | (?:[0-7]{1,3})
      | (?:x[0-9a-fA-F]{2})
      | (?:u[0-9a-fA-F]{4})
      | (?:U[0-9a-fA-F]{8})
      ))
    )'
modereturnc                 2    | dvrt          d| z            d S )N)
lastIsName
noneIsNamemarkTypemarkNameparamudlz!Description mode '%s' is invalid.)	Exception)r   s    3lib/python3.11/site-packages/sphinx/util/cfamily.pyverify_description_moder   I   s1    WW D;dBCCCD D    c                       e Zd ZdS )NoOldIdErrorN__name__
__module____qualname__ r   r   r    r    N   s        Dr   r    c                   ~    e Zd ZU dedefdZdZeg ef         e	d<   defdZ
dedefdZdefd	Zdefd
ZdefdZdS )ASTBaseBaseotherr   c                     t          |           t          |          urdS 	 | j                                        D ]\  }}|t          ||          k    r dS n# t          $ r Y dS w xY wdS )NFT)type__dict__itemsgetattrAttributeError)selfr(   keyvalues       r   __eq__zASTBaseBase.__eq__T   s    ::T%[[( 	5	"m1133 ! !
UGE3/// ! 55!!  	 	 	55	ts   3A A 
A'&A'N__hash__c                      t          |           S Nr   r/   s    r   clonezASTBaseBase.clonea   s    ~~r   	transformc                 :    t          t          |                     r5   NotImplementedErrorreprr/   r8   s     r   
_stringifyzASTBaseBase._stringifyd       !$t**---r   c                 .    |                      d           S )Nc                      t          |           S r5   )strasts    r   <lambda>z%ASTBaseBase.__str__.<locals>.<lambda>h   s    3s88 r   r>   r6   s    r   __str__zASTBaseBase.__str__g   s    33444r   c                 .    |                      d           S )Nc                 *    |                                  S r5   )get_display_stringrC   s    r   rE   z0ASTBaseBase.get_display_string.<locals>.<lambda>k   s    3+A+A+C+C r   rF   r6   s    r   rJ   zASTBaseBase.get_display_stringj   s    CCDDDr   c                      d| j         j        z  S )Nz<%s>)	__class__r"   r6   s    r   __repr__zASTBaseBase.__repr__m   s    ///r   )r"   r#   r$   r   boolr2   r3   r   int__annotations__r7   StringifyTransformrB   r>   rG   rJ   rM   r%   r   r   r'   r'   S   s         	C 	D 	 	 	 	 #'Hhr3w&&&s    .$6 .3 . . . .5 5 5 5 5EC E E E E0# 0 0 0 0 0 0r   r'   c                       e Zd ZdeddfdZdS )ASTAttributesignoder   Nc                 :    t          t          |                     r5   r:   r/   rT   s     r   describe_signaturezASTAttribute.describe_signaturev   r?   r   )r"   r#   r$   r   rW   r%   r   r   rS   rS   u   s6        .+ .$ . . . . . .r   rS   c                   >    e Zd ZdeddfdZdedefdZdeddfdZdS )	ASTCPPAttributeargr   Nc                     || _         d S r5   rZ   )r/   rZ   s     r   __init__zASTCPPAttribute.__init__{   s    r   r8   c                     d| j         z   dz   S Nz[[z]]r\   r=   s     r   r>   zASTCPPAttribute._stringify~   s    dh%%r   rT   c                     |                     t          j        dd                     |                     t          j        | j                             |                     t          j        dd                     d S r_   )appendr   desc_sig_punctuationr   TextrZ   rV   s     r   rW   z"ASTCPPAttribute.describe_signature   sd    x4T4@@AAAuz$(++,,,x4T4@@AAAAAr   )	r"   r#   r$   rB   r]   rQ   r>   r   rW   r%   r   r   rY   rY   z   s        C D    &$6 &3 & & & &B+ B$ B B B B B Br   rY   c                   >    e Zd Zdeded         ddfdZdedefdZdS )	ASTGnuAttributenameargsASTBaseParenExprListr   Nc                 "    || _         || _        d S r5   )rf   rg   )r/   rf   rg   s      r   r]   zASTGnuAttribute.__init__   s    				r   r8   c                     | j         g}| j        r#|                     || j                             d                    |          S )N )rf   rg   ra   join)r/   r8   ress      r   r>   zASTGnuAttribute._stringify   sC    yk9 	-JJyy++,,,wws||r   )r"   r#   r$   rB   r	   r]   rQ   r>   r%   r   r   re   re      sf        S 1G(H T    $6 3      r   re   c                   J    e Zd Zdee         ddfdZdedefdZde	ddfdZ
dS )	ASTGnuAttributeListattrsr   Nc                     || _         d S r5   rp   r/   rp   s     r   r]   zASTGnuAttributeList.__init__       


r   r8   c                     dg}d}| j         D ]9}|s|                    d           d}|                     ||                     :|                    d           d                    |          S )Nz__attribute__((Tz, Fz))rk   )rp   ra   rl   )r/   r8   rm   firstattrs        r   r>   zASTGnuAttributeList._stringify   s~     !J 	( 	(D !

4   EJJyy''''

4wws||r   rT   c                 r    t          |           }|                    t          j        |                     d S r5   rB   ra   r   rc   r/   rT   txts      r   rW   z&ASTGnuAttributeList.describe_signature   -    $iiuz#'''''r   )r"   r#   r$   r   re   r]   rQ   rB   r>   r   rW   r%   r   r   ro   ro      s        d?3     	$6 	3 	 	 	 	(+ ($ ( ( ( ( ( (r   ro   c                   B    e Zd ZdZdeddfdZdedefdZdeddfd	Z	dS )
ASTIdAttributez*For simple attributes defined by the user.idr   Nc                     || _         d S r5   r   )r/   r   s     r   r]   zASTIdAttribute.__init__   s    r   r8   c                     | j         S r5   r   r=   s     r   r>   zASTIdAttribute._stringify   s	    wr   rT   c                 ^    |                     t          j        | j                             d S r5   )ra   r   rc   r   rV   s     r   rW   z!ASTIdAttribute.describe_signature   s&    uz$'**+++++r   
r"   r#   r$   __doc__rB   r]   rQ   r>   r   rW   r%   r   r   r~   r~      s        443 4    $6 3    ,+ ,$ , , , , , ,r   r~   c                   F    e Zd ZdZdededdfdZdedefdZd	eddfd
Z	dS )ASTParenAttributez)For paren attributes defined by the user.r   rZ   r   Nc                 "    || _         || _        d S r5   r   rZ   )r/   r   rZ   s      r   r]   zASTParenAttribute.__init__   s    r   r8   c                 ,    | j         dz   | j        z   dz   S )N()r   r=   s     r   r>   zASTParenAttribute._stringify   s    w}tx'#--r   rT   c                 r    t          |           }|                    t          j        |                     d S r5   ry   rz   s      r   rW   z$ASTParenAttribute.describe_signature   r|   r   r   r%   r   r   r   r      s        333 S T    .$6 .3 . . . .(+ ($ ( ( ( ( ( (r   r   c                   ^    e Zd Zdee         ddfdZdefdZddZde	de
fd	Zd
eddfdZdS )ASTAttributeListrp   r   Nc                     || _         d S r5   rr   rs   s     r   r]   zASTAttributeList.__init__   rt   r   c                 *    t          | j                  S r5   )lenrp   r6   s    r   __len__zASTAttributeList.__len__   s    4:r   r(   c                 :    t          | j        |j        z             S r5   )r   rp   )r/   r(   s     r   __add__zASTAttributeList.__add__   s    
U[ 8999r   r8   c                 P    d                     fd| j        D                       S )N c              3   .   K   | ]} |          V  d S r5   r%   ).0rw   r8   s     r   	<genexpr>z.ASTAttributeList._stringify.<locals>.<genexpr>   s+      ??D		$??????r   )rl   rp   r=   s    `r   r>   zASTAttributeList._stringify   s,    xx????DJ??????r   rT   c                 H   t          | j                  dk    rd S | j        d                             |           t          | j                  dk    rd S | j        dd          D ]=}|                    t	          j                               |                    |           >d S )Nr      )r   rp   rW   ra   r   desc_sig_space)r/   rT   rw   s      r   rW   z#ASTAttributeList.describe_signature   s    tz??a 	F
1((111tz??a 	FJqrrN 	- 	-DNN8244555##G,,,,	- 	-r   )r(   r   r   r   )r"   r#   r$   r   rS   r]   rO   r   r   rQ   rB   r>   r   rW   r%   r   r   r   r      s        d<0 T        : : : :@$6 @3 @ @ @ @-+ -$ - - - - - -r   r   c                       e Zd ZdS )rh   Nr!   r%   r   r   rh   rh              Dr   rh   c                       e Zd ZdS )$UnsupportedMultiCharacterCharLiteralNr!   r%   r   r   r   r      r   r   r   c                       e Zd ZdS )DefinitionErrorNr!   r%   r   r   r   r      r   r   r   c                      e Zd Zdedeej        eeef         ef         ddddfdZ	de
e         d	edefd
Zedefd            ZdeddfdZdeddfdZdeddfdZdedefdZdedefdZdedefdZdefdZdedefdZdedefdZedefd            Zedefd            Zedefd            ZdefdZdddeddfd Zed!             Z ed"             Z!d#e
e         defd$Z"de#e$         fd%Z%de&fd&Z'de(fd'Z)dS )(
BaseParser
definitionlocationconfigr   r   Nc                    |                                 | _        || _        || _        d| _        t          | j                  | _        d | _        d| _        g | _	        d| _
        d S )Nr   )r   NT)stripr   r   r   posr   end
last_match_previous_stateotherErrorsallowFallbackExpressionParsing)r/   r   r   r   s       r   r]   zBaseParser.__init__   sd     %**,, t''!%2;24 /3+++r   errorsheaderc                 4   t          |          dk    rit          |          dk    r.t          |dz   t          |d         d                   z             S t          t          |d         d                             S |dg}|D ]}t          |d                   dk    rd}|                    |d                    |                    d           t          |d                                       d          D ]U}t          |          dk    r|                    |           |                    |           |                    d           V|                    t          |d                              t          d                    |                    S )Nr   r   
z  z:
rk   )r   r   rB   ra   splitrl   )r/   r   r   resulteindentlines          r   _make_multi_errorzBaseParser._make_multi_error   sx   v;;! 	:6{{Q :&v}s6!9Q<7H7H'HIII&s6!9Q<'8'8999$ 	) 	)A1Q4yy1} )ad###e$$$!IIOOD11 ( (D4yyA~ ! MM&)))MM$'''MM$''''( c!A$ii((((rwwv///r   c                     t           r5   r;   r6   s    r   languagezBaseParser.language      !!r   msgc                 X    d| j         z  dz   }t          |d| j        d|           d S )N-^r   )r   printr   )r/   r   	indicators      r   statuszBaseParser.status  s9    $(NS(	ccc4???II>?????r   c                    g }d| j         z  dz   }t          d| j        || j         | j        |fz            }|                    |df           | j        D ]}|                    |df           g | _        |                     |d          )Nr   r   z2Invalid %s declaration: %s [error at %d]
  %s
  %sz
Main errorzPotential other errorrk   )r   r   r   r   ra   r   r   )r/   r   r   r   exMainerrs         r   failzBaseParser.fail  s    $(NS(	 B]C4?IFGH H 	v|,---# 	: 	:CMM3 789999$$VR000r   c                 H    t                               || j                   d S )N)r   )loggerwarningr   )r/   r   s     r   warnzBaseParser.warn'  s     sT]33333r   regexc                     |                     | j        | j                  }|5| j        | j        f| _        |                                | _        || _        dS dS NTF)matchr   r   r   r   r   )r/   r   r   s      r   r   zBaseParser.match*  sR    DOTX66 	$(Hdo#>D yy{{DH#DO4ur   stringc                     t          |          }| j        | j        | j        |z            |k    r| xj        |z  c_        dS dS r   )r   r   r   )r/   r   strlens      r   skip_stringzBaseParser.skip_string3  sI    V?48DHv$556&@ 	HHHH4ur   wordc                 z    |                      t          j        dt          j        |          z                      S )Nz\b%s\b)r   recompileescaper/   r   s     r   	skip_wordzBaseParser.skip_word:  s+    zz"*Y4%@AABBBr   c                 6    |                      t                    S r5   )r   _whitespace_rer6   s    r   skip_wszBaseParser.skip_ws=  s    zz.)))r   c                 \    |                      |          r|                                  dS dS r   )r   r   r   s     r   skip_word_and_wszBaseParser.skip_word_and_ws@  s-    >>$ 	LLNNN4ur   c                 \    |                      |          r|                                  dS dS r   )r   r   )r/   r   s     r   skip_string_and_wszBaseParser.skip_string_and_wsF  s/    F## 	LLNNN4ur   c                 "    | j         | j        k    S r5   )r   r   r6   s    r   eofzBaseParser.eofL  s    x48##r   c                 J    	 | j         | j                 S # t          $ r Y dS w xY w)NEOF)r   r   
IndexErrorr6   s    r   current_charzBaseParser.current_charP  s8    	?48,, 	 	 	55	s    
""c                 F    | j         | j                                         S d S r5   )r   groupr6   s    r   matched_textzBaseParser.matched_textW  s%    ? 	?((***4r   c                 F    | j         | j        d          }| j        | _        |S r5   )r   r   r   )r/   rvs     r   	read_restzBaseParser.read_rest^  s"    _TXYY'8	r   F)allowSemicolonr   c                    |                                   |r:| j        s/| j        | j        d          dk    r|                     d           d S d S d S | j        s|                     d           d S d S )N;z Expected end of definition or ;.zExpected end of definition.)r   r   r   r   r   )r/   r   s     r   
assert_endzBaseParser.assert_endc  s     	98 >		 :c A >		<=====> > > > 8 9		7888889 9r   c                     t           r5   r   r6   s    r   id_attributeszBaseParser.id_attributesn  r   r   c                     t           r5   r   r6   s    r   paren_attributeszBaseParser.paren_attributesr  r   r   r   c                 2   dddd}| j         }g }| j        st          |          dk    r
| j        |v rn| j        |                                v r!|                    || j                            n_t          |          dk    r&| j        |d         k    r|                                 n&| j        dv r|                     d| j        z             | xj         d	z  c_         | j        | j        r|                     d
|z             | j        || j                  S )Nr   ]})r   [{r   z)]}z&Unexpected '%s' in balanced-token-seq.r   z8Could not find end of balanced-token-seq starting at %d.)	r   r   r   r   keysra   popr   r   )r/   r   bracketsstartPossymbolss        r   _parse_balanced_token_seqz$BaseParser._parse_balanced_token_seqv  sA   3S118( 		7||q  T%6#%=  HMMOO3 Xx(9:;;;;W! Xd&772;&F X"e+ X		BTEVVWWWHHMHH ( 		 8 	"IIP ! " " "x011r   c                    |                                   | j        }|                     d          r|                     d          s|| _        nz|                     dg          }|                     d          s|                     d           |                     d          s|                     d           t          |          S |                     d          r*|                     d          s|                     d           |                     d          s|                     d	           g }	 |                     t                    r>| j
        }|                                 }|                    t          ||                     |                     d          ro|                     d          rn|                     d           |                     d          s|                     d           t          |          S | j        D ](}|                     |          rt!          |          c S )| j        D ]}|                     |          s|                     d          s|                     d           |                     dg          }|                     d          s|                     d           t%          ||          c S d S )Nr   r   )r   z!Expected ']' in end of attribute.z-Expected ']' in end of attribute after [[...]__attribute__r   z#Expected '(' after '__attribute__'.z$Expected '(' after '__attribute__('.r   ,r   z2Expected identifier, ')', or ',' in __attribute__.z(Expected ')' after '__attribute__((...)'z0Expected '(' after user-defined paren-attribute.z1Expected ')' to end user-defined paren-attribute.)r   r   r   r   r  r   rY   r   r   identifier_rer   _parse_paren_expression_listra   re   ro   r   r~   r   r   )r/   r  rZ   rp   rf   exprsr   s          r   _parse_attributezBaseParser._parse_attribute  s   8""3'' 
	,##C(( 	,# 44#4??..s33 CIIABBB..s33 OIIMNNN&s+++   11 	.**3// A		?@@@**3// B		@AAAE
T::m,, ?,D ==??ELLu!=!=>>>**3// T,,S11 TIIRSSS
T **3// F		DEEE&u--- $ 	* 	*B$$R(( *%b)))))* ' 	. 	.B**2.. ##C(( N		LMMM00cU0;;C##C(( O		MNNN$R-----tr   c                     g }	 |                                  }|n|                    |           -t          |          S r5   )r
  ra   r   )r/   rm   rw   s      r   _parse_attribute_listz BaseParser._parse_attribute_list  sO    	((**D JJt		
  $$$r   c                     t           r5   r   r6   s    r   r  z'BaseParser._parse_paren_expression_list  s    !!r   )*r"   r#   r$   rB   r   r   Noder   rO   r]   r   r   r   r   propertyr   r   r   r   r
   rN   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	   rS   r
  r   r  rh   r  r%   r   r   r   r      s^       33 3 U38_c!AB3!3&*3 3 3 3 0S	 03 0? 0 0 0 0, "# " " " X"@# @$ @ @ @ @

1 
1 
1 
1 
1 
14 4 4 4 4 47 t    # $    Cc Cd C C C C* * * * *S T          $T $ $ $ X$ c    X c    X3    
 49 9 9 9D 9T 9 9 9 9 " " X" " " X"2T#Y 23 2 2 2 2(6(<"8 6 6 6 6p%'7 % % % %".B " " " " " "r   r   )7r   r   copyr   typingr   r   r   r   r	   r
   r   r   docutilsr   docutils.nodesr   sphinxr   sphinx.configr   sphinx.utilr   	getLoggerr"   r   rB   rQ   r   r   anon_identifier_rer  integer_literal_reoctal_literal_rehex_literal_rebinary_literal_reintegers_literal_suffix_refloat_literal_refloat_literal_suffix_rechar_literal_rer   r   r    r'   rS   rY   re   ro   r~   r   r   rh   r   r   r   r%   r   r   <module>r!     s-   8 8 				       N N N N N N N N N N N N N N N N N N N N       & & & & & &                        		8	$	$seSj)  J''RZ ABB 
     RZ 9:: 2:344 ABBBJ677 'RZ 	) 	 	  2:     %"*[11 "*   D# D$ D D D D
	 	 	 	 	9 	 	 	
0 0 0 0 0 0 0 0D. . . . .; . . .

B 
B 
B 
B 
Bl 
B 
B 
B	 	 	 	 	k 	 	 	( ( ( ( (, ( ( ((
, 
, 
, 
, 
,\ 
, 
, 
,( ( ( ( ( ( ( (- - - - -{ - - -4	 	 	 	 	; 	 	 		 	 	 	 	9 	 	 		 	 	 	 	i 	 	 	a" a" a" a" a" a" a" a" a" a"r   