
    kj~J              
          S SK Jr  S SK Jr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  \ " S	 S
5      5       r\ " S S5      5       r\ " S S5      5       r\ " S S5      5       r\ " S S5      5       r " S S\5      rS\S\S\4S jr " S S5      rS\S\4S jrS\S\\   4S jrS\S\4S jrS\S\4S  jrS\S\4S! jrS\S"\S\\   4S# jrS\S\4S$ jrS\S%\S&\S'\S\4
S( jrS\S%\S&\S'\S\4
S) jrS\S\4S* jr g+),    )	dataclass)field)Path)Dict)List)NoReturn)Optional)Lexerc                        \ rS rSr% \\S'   Srg)Constant   declaration N__name__
__module____qualname____firstlineno__str__annotations____static_attributes__r       J/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Meta/Utils/webidl_parser.pyr   r      s    r   r   c                   *    \ rS rSr% \\S'   \\S'   Srg)SpecialOperation   identifier_typer   r   Nr   r   r   r   r   r      s    r   r   c                   $   \ rS rSr% \\S'   \\S'   \" \S9r	\
\\4   \S'   Sr\\S'   Sr\\S'   S	r\\S
'   \" \S9r\\   \S'   Sr\\   \S'   Sr\\   \S'   Sr\\S'   S	r\\S'   S	r\\S'   S	r\\S'   S	r\\S'   S	r\\S'   S\4S jrSS jrSrg)	Interface   namepath)default_factoryextended_attributesFis_namespaceis_callback_interface parent_name	constantsNnamed_property_getterindexed_property_getterhas_special_memberimplemented_namenamespaced_nameconstructor_classprototype_classnamespace_classreturnc                     U R                   S L$ N)r*   selfs    r   supports_named_properties#Interface.supports_named_properties-   s    ))55r   c                 f   U R                   R                  S5      nU(       a  U SU R                   3U l        OU R                  U l        U R                   R                  SU R                  5      U l        U R                   S3U l        U R                   S3U l        U R                   S3U l        g )NLegacyNamespace.ImplementedAsConstructor	Prototype	Namespace)r$   getr!   r.   r-   r/   r0   r1   )r6   legacy_namespaces     r   finalizeInterface.finalize0   s    33778IJ&6%7q#DD #'99D  $ 8 8 < <_dii X$($9$9#:+!F"&"7"7!8	B"&))I6r   )r/   r-   r1   r.   r0   r2   N) r   r   r   r   r   r   r   r   dictr$   r   r%   boolr&   r(   listr)   r   r   r*   r	   r   r+   r,   r-   r.   r/   r0   r1   r7   rB   r   r   r   r   r   r      s    
I
J*/*Ec3hEL$"'4'K %d ;ItH~;8<8$45<:>X&67>$$cOSsOSOS64 6
7r   r   c                   4    \ rS rSr% \\S'   Sr\\   \S'   Sr	g)Module=   r"   N	interfacer   )
r   r   r   r   r   r   rK   r	   r   r   r   r   r   rI   rI   =   s    
J%)Ix	")r   rI   c                   n    \ rS rSr% Sr\\S'   Sr\\S'   Sr\\S'   Sr	\\S'   S\
4S jrS	\SS
4S jrSrg
)NestingStateC   r   parentheses_depthbracket_depthbrace_depthangle_depthr2   c                 z    [        U R                  U R                  U R                  U R                  45      (       + $ r4   )anyrO   rP   rQ   rR   r5   s    r   is_at_top_levelNestingState.is_at_top_levelJ   s2    ..0B0BDDTDTVZVfVfghhhr   	characterNc                    US:X  a  U =R                   S-  sl         g US:X  a  [        U R                   S-
  S5      U l         g US:X  a  U =R                  S-  sl        g US:X  a  [        U R                  S-
  S5      U l        g US:X  a  U =R                  S-  sl        g US:X  a  [        U R                  S-
  S5      U l        g US	:X  a  U =R                  S-  sl        g US
:X  a  [        U R                  S-
  S5      U l        g g )N(   )r   []{}<>)rO   maxrP   rQ   rR   )r6   rW   s     r   update_for_character!NestingState.update_for_characterM   s    ""a'"#%()?)?!)CQ%GD"#!##!$T%7%7!%;Q!?D#!#"4#3#3a#7;D#!#"4#3#3a#7;D r   )rR   rQ   rP   rO   )r   r   r   r   rO   intr   rP   rQ   rR   rF   rU   r   rc   r   r   r   r   rM   rM   C   sL    sM3KKi i<c <d <r   rM   c                       \ rS rSrSrg)
ParseError`   r   N)r   r   r   r   r   r   r   r   rg   rg   `   s    r   rg   r"   contentsr2   c                 4    [        X5      R                  5       $ r4   )Parserparse)r"   ri   s     r   parse_modulerm   d   s    $!''))r   c            	       ^   \ rS rSrS\S\SS4S jrS\4S jrS\	\
   S	\
S\
4S
 jrS$S jr  S%S\\\4   S\S\S\
4S jjrS\
S\SS4S jrS\\\4   4S jrS\4S jrS$S jrS\4S jrS\4S jrS\4S jrS\S\4S jrS$S jrS\S\4S jrS\SS4S jrS\SS4S  jrS!\S\4S" jrS#rg)&rk   h   r"   ri   r2   Nc                 <    Xl         X l        [        U5      U l        g r4   )r"   ri   r
   lexer)r6   r"   ri   s      r   __init__Parser.__init__i   s    	 8_
r   c                    [        U R                  S9nU R                  5         U R                  R	                  5       (       Gd  0 nU R                  R                  S5      (       a  U R                  5       nU R                  S5      (       d  U R                  S5      (       a  U R                  5         GOU R                  S5      (       a  U R                  5         GOU R                  S5      (       a#  U R                  S5        U R                  5         GOU R                  S5      (       a  U R                  5         GOU R                  S5      (       a  U R                  5         GOkU R                  S	5      (       a  U R                  5         GOCU R                  S
5      (       a  U R                  5         GOU R                  S5      (       a0  U R                  UR                  U R                  USS95      Ul        OU R                  S5      (       a"  U R                  S5        U R                  5         OU R                  S5      (       a0  U R                  UR                  U R                  USS95      Ul        OWU R                  S5      (       a1  U R                  UR                  U R                  U5      5      Ul        OU R                  5         U R                  5         U R                  R	                  5       (       d  GM  U$ )N)r"   r\   
dictionaryzpartial dictionaryenumtypedefzpartial interface mixinzpartial interfacezinterface mixinzpartial namespacezcallback interfaceT)r&   callback	namespace)r%   rK   )rI   r"   consume_whitespacerq   is_eofconsume_specificparse_extended_attributesnext_is_keywordskip_braced_declarationconsume_keywordconsume_statement_textset_or_check_module_interfacerK   parse_interfaceparse_includes_statement)r6   moduler$   s      r   rl   Parser.parsen   sn   TYY'!**##%%24zz**3//&*&D&D&F###L11T5I5IJ^5_5_,,.%%f--,,.%%i00$$Y/++-%%&?@@,,.%%&9::,,.%%&788,,.%%&9::,,.%%&:;;#'#E#E$$(()<TX(Y$  %%j11$$Z0++-%%k22#'#E#E$$(()<4(P$  %%k22#'#E#E$$(()<=$ 
 --/##%S **##%%V r   existing_interfacecandidate_interfacec                     Uc  U$ UR                   (       d  UR                  UR                  :X  a  U$ U R                  S5        g )NzYencountered multiple interface, callback interface, or namespace declarations in one file)r%   r!   raise_parse_error)r6   r   r   s      r   r   $Parser.set_or_check_module_interface   sE     %&&!..3E3J3JNaNfNf3f%%g	
r   c                 8   U R                  5         U R                  5         U R                  S5      (       d  U R                  S5        U R	                  S5        U R                  5         U R                  S5        U R                  5         U R                  S5        g )Nincludesz/expected a declaration or an includes statement;)"parse_identifier_ending_with_spacerz   r~   r   r   %parse_identifier_ending_with_space_orassert_specificr5   s    r   r   Parser.parse_includes_statement   s|    //1!##J//""#TUZ(!2237!S!r   r$   r%   r&   c                    U(       a3  U R                  S5        U R                  5         U R                  S5        O*U(       a  U R                  S5        OU R                  S5        U R                  5         [        U R                  SS5      U R                  UUUS9nU R                  5         U(       dV  U R
                  R                  S5      (       a6  U R                  5         U R                  S5      Ul        U R                  5         U R                  5       nU R                  5         U R                  S5        U(       d  U R                  XE5        UR                  5         U$ )Nrx   rK   ry   :r^   )r!   r"   r$   r%   r&   r   )r   rz   r   r   r"   rq   r|   r(   consume_braced_blockr   parse_interface_bodyrB   )r6   r$   r%   r&   rK   	body_texts         r   r   Parser.parse_interface   s    !  ,##%  -  -  -!;;CE 3%"7
	 	!

 ; ;C @ @##%$($N$Ns$SI!##%--/	!S!%%i;r   rK   r   c                    [        [        U5      5       GH%  nU(       d  M  [        U5      R                  5       nU(       d  M/  UR	                  S5      (       a&  UR
                  R                  [        U5      5        Mk  UR	                  S5      (       dB  UR	                  S5      (       d,  UR	                  S5      (       d  UR	                  S5      (       a  SUl        UR	                  S5      (       d  M  [        U5      n[        XTS9nUS	:X  a  Xal        O"US
:X  a  Xal        OU R                  SU S35        GM(     g )Nzconst z	iterable<zasync iterable<zmaplike<zsetlike<Tzgetter )r   r   	DOMStringzunsigned longzHnamed/indexed property getter must use DOMString or unsigned long, got '')split_top_level_statementsremove_line_comments!strip_leading_extended_attributesstrip
startswithr)   appendr   r,   'parse_special_operation_identifier_typer   r*   r+   r   )r6   rK   r   	statementstripped_statementr   special_operations          r   r   Parser.parse_interface_body   s   34H4STI!B9!M!S!S!U%!,,X66##**84F+GH #--k::%001BCC%00<<%00<</3	,!,,Y77"IJ\"]$4_$u!"k16G3$78I5**bcrbsstu A Ur   c                 v   0 n U R                  5         U R                  R                  S5      (       a  OtU R                  SSS5      nSnU R                  R                  S5      (       a  U R	                  5       R                  5       nX1U'   U R                  R                  S5        M  U R                  5         U$ )Nr]   =,r'   )rz   rq   r|   r    consume_extended_attribute_valuer   )r6   r$   r!   values       r   r}    Parser.parse_extended_attributes  s    .0##%zz**3//==c3LDEzz**3//==?EEG(-%JJ'',  	!""r   c                    U R                   R                  5       nSnU R                   R                  5       (       d  U R                   R                  5       nUS:X  a  US-  nOUS:X  a  US:  a  US-  nOUS:X  a  US;   a  O;U R                   R	                  5         U R                   R                  5       (       d  M  U R
                  XR                   R                  5        $ )Nr   rY   rZ   r[   )r   r]   )rq   tellr{   peekconsumeri   )r6   startrO   rW   s       r   r   'Parser.consume_extended_attribute_value  s    

!**##%%

)IC!Q&!c!$q(%*%"a'I,CJJ  **##%% }}UZZ__%677r   c                    U R                   R                  5       (       dw  U R                   R                  5       S:w  aY  U R                   R                  5         U R                   R                  5       (       d   U R                   R                  5       S:w  a  MY  U R                   R                  5       (       a  U R	                  S5        U R                  5         U R                  5         U R                  S5        g )Nr^   z'expected '{' while skipping declarationr   )rq   r{   r   r   r   r   rz   r   r5   s    r   r   Parser.skip_braced_declaration*  s    **##%%$**//*;s*BJJ  **##%%$**//*;s*B ::""#LM!!#!S!r   c                    U R                  S5        U R                  R                  5       nSnSnU R                  R                  5       (       Gd  U R                  R	                  5       nU(       a	  XC:X  a  SnMJ  US:X  as  U R                  R                  5       S:X  aU  U R                  R                  S5        U R                  R                  5       S:X  a  U R                  R                  5         M  US;   a  UnM  US:X  a  US-  nO<US:X  a6  US-  nUS:X  a+  U R                  R                  5       S-
  nU R                  X $ U R                  R                  5       (       d  GM  U R                  S	5        g )
Nr^   rZ   r'   /
"r   r_   r   zunterminated declaration body)
r   rq   r   r{   r   r   ignore_untilignoreri   r   )r6   r   rQ   active_quoterW   ends         r   r   Parser.consume_braced_block5  s8   S!

!**##%%

**,I,#%LCDJJOO$5$<

''-::??$,JJ%%'J&(Cq c!q !#**//+a/C==331 **##%%4 	>?r   c                    U R                   R                  5       n[        5       nSnU R                   R                  5       (       Gd&  U R                   R	                  5       nU(       a	  XC:X  a  SnMJ  US:X  as  U R                   R                  5       S:X  aU  U R                   R                  S5        U R                   R                  5       S:X  a  U R                   R                  5         M  US;   a  UnM  US:X  a@  UR                  5       (       a+  U R                   R                  5       S-
  nU R                  X $ UR                  U5        U R                   R                  5       (       d  GM&  U R                  S5        g )Nr'   r   r   r   r   rZ   zunterminated statement)rq   r   rM   r{   r   r   r   r   rU   ri   rc   r   )r6   r   nesting_stater   rW   r   s         r   r   Parser.consume_statement_textX  s$   

!$**##%%

**,I,#%LCDJJOO$5$<

''-::??$,JJ%%'J&(CM$A$A$C$Cjjoo'!+}}U//..y9+ **##%%. 	78r   c                 "    U R                  5       $ r4   )r   r5   s    r   r   )Parser.parse_identifier_ending_with_spacev  s    99;;r   terminatorsc                 d   ^ U R                   R                  U4S j5      nUR                  S5      $ )Nc                 <   > U R                  5       =(       d    U T;   $ r4   )isspace)rW   r   s    r   <lambda>>Parser.parse_identifier_ending_with_space_or.<locals>.<lambda>z  s    	@Q@Q@S@oW`doWo@or   _)rq   consume_untillstrip)r6   r   
identifiers    ` r   r   ,Parser.parse_identifier_ending_with_space_ory  s)    ZZ--.op
  %%r   c                 |   SnU(       a  SnU R                   R                  [        R                  5      nU(       a  SnU R                   R	                  S5      (       aU  U R                   R                  S5        U R                   R                  5       S:X  a  U R                   R                  5         SnU(       a  M  g g )NTF//r   )rq   consume_whiler   r   r|   r   r   r   )r6   consumed
whitespaces      r   rz   Parser.consume_whitespace}  s    H11#++>Jzz**400

''-::??$,JJ%%' hr   keywordc                    U R                   R                  U5      (       d  gU R                   R                  5       [        U5      -   nU[        U R                  5      :  a  gU R                  U   nUR                  5       =(       d    US;   $ )NFTz{([;:)rq   next_isr   lenri   r   )r6   r   r   trailing_characters       r   r~   Parser.next_is_keyword  sp    zz!!'**jjoo#g,.#dmm$$!]]3/!))+L/AW/LLr   c                     U R                  U5      (       d  U R                  SU S35        U R                  R                  [	        U5      5        g Nz
expected 'r   )r~   r   rq   r   r   )r6   r   s     r   r   Parser.consume_keyword  s@    ##G,,""Zy#:;

#g,'r   expected_characterc                 p    U R                   R                  U5      (       d  U R                  SU S35        g g r   )rq   r|   r   )r6   r   s     r   r   Parser.assert_specific  s6    zz**+=>>""Z0B/C1#EF ?r   messagec           	          SnSn[        U R                  5       H8  u  pEX@R                  R                  5       :X  a    OUS:X  a	  US-  nSnM3  US-  nM:     [	        U R
                   SU SU SU 35      e)NrZ   r   r   z	: error: )	enumerateri   rq   r   rg   r"   )r6   r   line_numbercolumn_numberindexrW   s         r   r   Parser.raise_parse_error  s     )$-- 8E

))D q  !" !9 DII;a}Am_IgYWXXr   )ri   rq   r"   rD   )FF)r   r   r   r   r   r   rr   rI   rl   r	   r   r   r   r   rF   r   r   r}   r   r   r   r   r   r   rz   r~   r   r   r   r   r   r   r   r   rk   rk   h   s`   %T %S %T %
/v /b
"*9"5
LU
	
"  #&+	'!#s(^' '  $	'
 
'R!i !C !D !F#4S> #&8# 8$	"!@c !@F9 9<<C <&# &# & 	Ms 	Mt 	M(s (t (
G# G$ GY Y Yr   rk   textc                     / nU R                  5        H0  nUR                  S5      nUS:w  a  US U nUR                  U5        M2     SR                  U5      $ )Nr   r   )
splitlinesfindr   join)r   lineslinecomment_indexs       r   r   r     sV    E!		$B'DT	 "
 99Ur   c                 ~   / nSn[        5       nSn[        U 5       Hs  u  pVU(       a	  Xd:X  a  SnM  US;   a  UnM  US:X  a=  UR                  5       (       a(  UR                  XU R	                  5       5        US-   nMb  UR                  U5        Mu     XS  R	                  5       nU(       a  UR                  U5        U$ )Nr   r'   r   r   rZ   )rM   r   rU   r   r   rc   )r   
statementsr   r   r   r   rW   trailing_texts           r   r   r     s    JE NML%dO(!
"$L = = ? ?d/5578AIE**95 ," L&&(M-(r   c                     U R                  5       nUR                  S5      (       a;  [        USSS5      nXS-   S  R                  5       nUR                  S5      (       a  M;  U$ )Nr\   r   r]   rZ   )r   r   find_matching_closer)r   remaining_textclosing_brackets      r   r   r     sb    [[]N

#
#C
(
(.~q#sK'!(;(=>EEG 
#
#C
(
( r   r   c                     [        U 5      n[        US5      S   R                  5       n[        U5      n[	        U5      nUS:X  a  [        SU  S35      e[        US U 5      $ )Nr   r   r   z1could not determine getter identifier type from 'r   )!extract_final_parenthesized_groupsplit_top_level_itemsr   r   find_last_top_level_whitespacerg   normalize_whitespace)r   parenthesized_textparameter_text
last_spaces       r   r   r     sl    :9E*+=sCAFLLNN6~FN/?JRLYKWXYZZ{
 ;<<r   c                     U R                  5       nUR                  S5      (       d  [        SU  S35      e[        U5      S-
  n[	        XSS5      nXS-   U $ )Nr[   z'expected a trailing parameter list in 'r   rZ   rY   )rstripendswithrg   r   find_matching_opener)r   stripped_textclosing_indexopening_indexs       r   r   r     s`    KKMM!!#&&B4&JKK&*M(sCPM*];;r   	delimiterc                 2   / nSn[        5       nSn[        U 5       Hd  u  pgU(       a	  Xu:X  a  SnM  US;   a  UnM  Xq:X  a/  UR                  5       (       a  UR                  XU 5        US-   nMS  UR	                  U5        Mf     UR                  XS  5        U$ )Nr   r'   r   rZ   )rM   r   rU   r   rc   )r   r  itemsr   r   r   r   rW   s           r   r   r     s    EE NML%dO(!
"$L!m&C&C&E&ELLE*+AIE**95 ," 
LLfLr   c                     Sn[        5       n[        U 5       HB  u  p4UR                  5       (       a  UR                  5       (       a  UnUR	                  U5        MD     U$ )Nr   )rM   r   r   rU   rc   )r   r   r   r   rW   s        r   r   r     sW    J NM%dO=#@#@#B#BJ**95 ,
 r   start_indexopenercloserc                     Sn[        U[        U 5      5       H)  nX   nXb:X  a  US-  nM  Xc:X  d  M  US-  nUS:X  d  M'  Us  $    [        SU SU  S35      e)Nr   rZ   unterminated '' in 'r   )ranger   rg   r   r  r  r  depthr   rW   s          r   r   r     si    E{CI.K	QJE QJEz / ~fXVD6;
<<r   c                     Sn[        USS5       H)  nX   nXc:X  a  US-  nM  Xb:X  d  M  US-  nUS:X  d  M'  Us  $    [        SU SU  S35      e)Nr   r   rZ   r  r  r   )r  rg   r  s          r   r  r  +  sg    E{B+K	QJE QJEz , ~fXVD6;
<<r   c                 @    SR                  U R                  5       5      $ )N )r   split)r   s    r   r   r   9  s    88DJJL!!r   N)!dataclassesr   r   pathlibr   typingr   r   r   r	   Utils.lexerr
   r   r   r   rI   rM   RuntimeErrorrg   r   rm   rk   r   r   r   r   r   r   re   r   r   r  r   r   r   r   <module>r     s  
 "             
 7 7 7B * * *
 < < <8	 	*t *s *v *EY EYP
s s S T#Y <C C 	=s 	=s 	=<C <C <  S	 6	 	 	=s = =c =3 =SV ==s = =c =3 =SV ="s "s "r   