
    8SjnJ                        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	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KJr  S SKJr   " S S\5      r\ " S S5      5       rS\S\
S\S\\\\4      SS4
S jr S4S\S\
S\S\S\\   S \\   SS4S! jjrS\\\\4      S\\   4S" jrS\S#\\   S$\ S\
S\ 4
S% jr!S&\S\
S\4S' jr"S(\S)\S\S\
S\#4
S* jr$S&\S\
S\4S+ jr%S5S\S,\#S\&\\\   4   4S- jjr'S\\   S\ 4S. jr(S/\S\ 4S0 jr)S1\\   S\ 4S2 jr*S\S\+\   4S3 jr,g)6    )	dataclass)Enum)Optional)Sequence)TextIO)Union)GenerationContext)idl_identifier_cpp_name)is_numeric_type)is_string_type)GeneratedIncludes)Constructor)IDLParameterizedType)IDLType)IDLUnionType)	Interface)	Operation)OperationParameterc                        \ rS rSrSrSrSrSrg)Optionality   Requiredr   Variadic N)__name__
__module____qualname____firstlineno__r   r   r   __static_attributes__r       a/mnt/mint/home/seanl/public/Repos/ladybird/Meta/Generators/libweb_bindings/overload_resolution.pyr   r      s    HHHr    r   c                   @    \ rS rSr% \\S'   \\   \S'   \\   \S'   Sr	g)EffectiveOverloadItem    callable_idtypesoptionality_valuesr   N)
r   r   r   r   int__annotations__listr   r   r   r   r    r!   r#   r#       s    =[))r    r#   outcontext	interface	overloadsreturnNc                 r  ^ Sn0 n[        U5       HV  n[        U[        UR                  5      5      nUR	                  [        UR                  5      / 5      R                  U5        MX     [        5       nU R                  SU S35        [        UR                  5       5       GHG  u  p[        U	5      S:X  aQ  U	S   nUR                  TR                  " UR                  6 5        U R                  SU SUR                   S35        Mf  [        UU	UT5      n
U R                  SU S[        U	5       S	35        U	 H  nUR                  TR                  " UR                  6 5        S
R                  U4S jUR                   5       5      nS
R                  S UR                   5       5      nU R                  SUR                   SU SU S35        M     U R                  SU
 S35        GMJ     U R                  S5        [        U5       H  nU R                  SU S35        M     U R                  S5        g )Nr   z    Optional<int> chosen_overload_callable_id;
    Optional<WebIDL::EffectiveOverloadSet> effective_overload_set;

    switch (min(z, vm.argument_count())) {
   	    case z(:
        chosen_overload_callable_id = z;
        break;
zd: {
        Vector<WebIDL::EffectiveOverloadSet::Item> overloads;
        overloads.ensure_capacity(z);
, c              3   <   >#    U  H  n[        UT5      v   M     g 7fNconstructor_for_idl_type).0idl_typer,   s     r!   	<genexpr>3write_overload_resolution_switch.<locals>.<genexpr>V   s     iZhh6xIIZh   c              3   @   #    U  H  nS UR                    3v   M     g7f)zWebIDL::Optionality::N)value)r8   optionalitys     r!   r:   r;   W   s#      +Oj'(9(9':;Ojs   z        overloads.empend(., Vector<NonnullRefPtr<WebIDL::Type const>> { z" }, Vector<WebIDL::Optionality> { z });
z8        effective_overload_set.emplace(move(overloads), z);
        break;
    }
z1    }

    Vector<StringView> dictionary_types {
z	        "z"sv,
a[      };

    if (!chosen_overload_callable_id.has_value()) {
        if (!effective_overload_set.has_value())
            return vm.throw_completion<JS::TypeError>(JS::ErrorType::OverloadResolutionFailed);
        chosen_overload_callable_id = TRY(WebIDL::resolve_overload(vm, effective_overload_set.value(), dictionary_types)).callable_id;
    }

)"compute_the_effective_overload_setmaxlenr&   
setdefaultappendsetwritesorteditemsupdatedictionary_type_namesr%   %resolve_distinguishing_argument_indexjoinr'   )r+   r,   r-   r.   maximum_argument_counteffective_overload_setsoverloaddictionary_typesargument_counteffective_overload_setdistinguishing_argument_indexr&   r'   dictionary_types    `            r!    write_overload_resolution_switchrV   '   su    FH6yA!$%;S=P!Q**3x~~+>CJJ8T B "%II (( )	 399P9V9V9X2Y.%&!+-a0H##G$A$A8>>$RSIIn- .''/';';&< = (M"	)
% 			.) *##&'=#>"? @	
 /H##G$A$A8>>$RSIIiZbZhZhiiE!% +OWOjOj+ " II-h.B.B-CCrsxry  z^  _q  ^r r  / 			HIfHg h 	
E 3ZR II   ""23		Io.f56 4II	
r    includes
operationsreceiver_classc                    Uc  UR                   nUR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        US   nUR                  5       nU(       a  UR                  S5        U R                  SU S	[	        U5       S
U S	[	        U5       S3	5        U(       a  U R                  S5        [        XX45        U R                  S5        [        U5       H$  u  pU R                  SU S[	        XS9 S35        M&     U R                  S5        U(       a  U R                  S5        U R                  S5        g )NzAK/Optional.hzAK/Vector.hzLibWeb/WebIDL/OverloadTypes.hz"LibWeb/WebIDL/OverloadResolution.hzLibWeb/WebIDL/Tracing.hr   zLibWeb/WebIDL/Promise.hzJS_DEFINE_NATIVE_FUNCTION(z::z)
{
    WebIDL::log_trace(vm, "z");

zv    [[maybe_unused]] auto& realm = *vm.current_realm();

    auto steps = [&]() -> JS::ThrowCompletionOr<JS::Value> {
z4
    switch (chosen_overload_callable_id.value()) {
r2   z:
        return suffixz(vm);
z1    default:
        VERIFY_NOT_REACHED();
    }
z    };

    auto maybe_result = steps();
    if (maybe_result.is_throw_completion())
        return WebIDL::create_rejected_promise(realm, maybe_result.error_value())->promise();

    return maybe_result.release_value();
z}

)prototype_classaddreturn_type_is_promiserG   r
   rV   	enumerate)
r+   r,   rW   r-   rX   rY   	operationshould_wrap_promise_rejectionsoverload_indexrP   s
             r!   write_overload_arbiterrd   x   sv    "22LL!LLLL01LL56LL*+1I &/%E%E%G"%./II&~&6b9PQZ9[8\ ]*+2.Ei.P-Q R	 &			
 %S9III	
 %.j$9 		.) *'HI J	
 %: II   &		  	 II  r    c           
         / n[        S U  5       5      n[        U 5       GH  u  p4UR                  n[        U5      n/ n/ nSn	U H  n
UR	                  U
R
                  5        U
R                  (       a#  UR	                  [        R                  5        Sn	MR  U
R                  (       a!  UR	                  [        R                  5        M  UR	                  [        R                  5        M     UR	                  [        X7U5      5        U	(       a  [        Xb5       H~  n[        U5      n[        U5      n[        XkS-   5       H8  nUR	                  XvS-
     5        UR	                  [        R                  5        M:     UR	                  [        X<U5      5        M     US-
  nUS:  d  GM  X[   R                  (       d  X[   R                  (       d  GM  UR	                  [        X7S U US U 5      5        US-  nUS:  a  MW  GM     U$ )Nc              3   L   #    U  H  n[        UR                  5      v   M     g 7fr5   )rC   
parametersr8   ra   s     r!   r:   5compute_the_effective_overload_set.<locals>.<genexpr>   s     Rz)C	 4 455zs   "$FTr1   r   )rB   r`   rg   rC   rE   typevariadicr   r   optionalr   r   r#   ranger*   )rX   r.   maximum_argumentsoverload_idra   	argumentsrR   r&   r'   overload_is_variadicargumenti
item_typesitem_optionality_values_s                  r!   rA   rA      s    .0I RzRR #,J"7((	 Y  " 13$ "HLL'   "))+*>*>?'+$"""))+*>*>?"))+*>*>? " 	.{CUVW  >=!%[
*./A*B' ~1u5A%%eQ,>&?@ ,22;3G3GH 6   !6{Pg!hi >  Q 1f<((1F1F 2;bq	K]^`_`Kabc FA 1ffo #8D r    rI   rR   c           	      0   [        U5       Hl  nSn[        U5       HM  u  pgXS-   S   H4  n[        UR                  U   UR                  U   U U5      (       a  M2  Sn  O   U(       d  MM    O   U(       a  Mj  Us  $    [	        SUS   R
                   S35      e)NFr1   TzBCould not resolve distinguishing argument index for overloads of 'r   ')rm   r`   is_distinguishable_fromr&   RuntimeErrorr%   )	r-   rI   rR   r,   argument_indexfound_indistinguishablefirst_item_index
first_itemsecond_items	            r!   rL   rL     s      /"',5e,<($%9%;<.$$^4%%n5	  /3+  = '& -= '&!!# 0& [\abc\d\p\p[qqrs
ttr    r9   c                   ^ U R                   (       a  SOSn[        U [        5      (       a;  SR                  U4S jU R                   5       5      nSU R
                   SU SU S3$ [        U [        5      (       a;  SR                  U4S	 jU R                   5       5      nS
U R
                   SU SU S3$ SU R
                   SU S3$ )Ntruefalser3   c              3   <   >#    U  H  n[        UT5      v   M     g 7fr5   r6   )r8   	parameterr,   s     r!   r:   +constructor_for_idl_type.<locals>.<genexpr>4  s     q]pPY7	7KK]pr<   z-make_ref_counted<WebIDL::ParameterizedType>("z", r@   z })c              3   <   >#    U  H  n[        UT5      v   M     g 7fr5   r6   )r8   member_typer,   s     r!   r:   r   :  s       !
Nc{$['::Ncr<   z%make_ref_counted<WebIDL::UnionType>("z make_ref_counted<WebIDL::Type>("))nullable
isinstancer   rM   rg   namer   member_types)r9   r,   r   rg   r   s    `   r!   r7   r7   1  s    !**vH(011YYq]e]p]pqq
;HMM?#hZ X<<F<tM	
 (L))yy !
NVNcNc!
 
 4HMM?#hZ P<<H>O	
 .hmm_CzKKr    leftrightc                   ^^^^ U R                  5       (       a>  TR                  5       (       d(  [        U4S jTR                  5        5       5      (       a  g[        U [        5      (       a6  [        T[        5      (       a!  [        UUU4S jU R                   5       5      $ [        U [        5      (       d  [        T[        5      (       aV  [        U [        5      (       a  U nTmO[        T[        5      (       d   eTnU m[        UUU4S jUR                   5       5      $ [        U T5      n[        TT5      nUS:X  a  US:X  a  U R                  TR                  :g  $ 1 Sk1 Sk1 Sk1 S	k1 S
k1 Sk1 Sk1 Sk1 Sk1 Sk1 SkS.nXgU   ;   $ )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7fr5   )
dictionary)r8   memberr,   s     r!   r:   *is_distinguishable_from.<locals>.<genexpr>O  s!     -vWuVg.@.@.H.HWus   !Fc              3   f   >#    U  H&  nTR                     H  n[        XTT5      v   M     M(     g 7fr5   )r   ry   )r8   left_memberright_memberr,   r-   r   s      r!   r:   r   V  s8      
0 % 2 2 $Ky'RR 2 S0s   .1c              3   @   >#    U  H  n[        TUTT5      v   M     g 7fr5   )ry   )r8   r   r,   r-   	non_unions     r!   r:   r   f  s&      
5 $I{IwOO5s   InterfaceLike>	   BigIntObjectStringSymbolBooleanNumericSequenceLiker   CallbackFunction>
   r   r   r   r   r   	Undefinedr   r   DictionaryLiker   >
   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   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   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   )	includes_nullable_typeanyflattened_member_typesr   r   allr   distinguishability_categoryr   )	r   r   r-   r,   	the_unionleft_categoryright_categorytabler   s	    ```    @r!   ry   ry   E  sy    ""$$$$&&#-vW\WsWsWu-v*v*v $%%*UL*I*I 
#00
 
 	
 $%%E<)H)HdL))IIe\2222II 
(55
 
 	

 0g>M0@N'No,M yyEJJ&&









	



]yEv =111r    c                    U R                   S:X  a  gU R                   S:X  a  g[        U R                   5      (       a  gU R                   S:X  a  g[        U R                   5      (       a  gU R                   S	:X  a  g
U R                   S:X  a  gUR                  U 5      b  gUR	                  U 5      c  U R                   S:X  a  g[        U [        5      (       a  U R                   S;   a  gg)N	undefinedr   booleanr   r   bigintr   r   objectr   symbolr   r   recordr   )sequenceFrozenArrayr   r   )r   r   r   callback_functionr   r   r   )r9   r,   s     r!   r   r     s    }}#}}	!x}}%%}} hmm$$}} }}   *6!(#/8==H3L(011hmmGb6br    staticc                     0 nU(       a  U R                   OU R                  nU H@  nSUR                  ;   a  M  UR                  UR                  / 5      R                  U5        MB     U$ )NFIXME)static_operationsregular_operationsextended_attributesrD   r   rE   )r-   r   overload_setsrX   ra   s        r!   operation_overload_setsr   
  s^    02M06,,I<X<XJ	i333  4;;IF   r    c                 &    [        S U  5       5      $ )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr5   )operation_lengthrh   s     r!   r:   0operation_overload_set_length.<locals>.<genexpr>  s     GJy	**Js   )min)rX   s    r!   operation_overload_set_lengthr     s    GJGGGr    ra   c                 ,    [        U R                  5      $ r5   )parameter_list_lengthrg   )ra   s    r!   r   r     s     !5!566r    rg   c                 &    [        S U  5       5      $ )Nc              3   p   #    U  H,  oR                   (       a  M  UR                  (       a  M(  S v   M.     g7f)r1   N)rl   rk   )r8   r   s     r!   r:   (parameter_list_length.<locals>.<genexpr>  s"     b*Y4F4FqyOaOaqq*s   66	6)sum)rg   s    r!   r   r     s    b*bbbr    c           	         [        5       n[        U 5      R                  5        H_  nUS   nUR                  [	        U5      5        [        U5      S:  d  M3  [        U5       H  u  pEUR                  [	        XTS95        M     Ma     U$ )Nr   r1   r[   )rF   r   valuesr^   r
   rC   r`   )r-   	callbacksrX   ra   rc   overloaded_operations         r!   operation_callback_namesr      sw    I-i8??A
qM	-i89z?Q8A*8M456Jbc 9N	 B r    r5   )F)-dataclassesr   enumr   typingr   r   r   r   "Generators.libweb_bindings.contextr	   $Generators.libweb_bindings.cpp_typesr
   r   r   #Generators.libweb_bindings.includesr   Utils.webidl_parserr   r   r   r   r   r   r   r   r#   rV   r*   strrd   rA   r(   rL   r7   boolry   r   dictr   r   r   r   rF   r   r   r    r!   <module>r      sv  
 "      @ H @ ? A + 4 ' , ) ) 2$  * * *N	NN N k9456	N
 
Nn %)A	AA  A 	A
 YA SMA 
AJT{I567T	
 Tpuu%&u u 	u
 	u8Lw L9J Ls L(i2
i2i2 i2 	i2
 
i2X' <M RU 2y $ 4PSUYZcUdPdKe Hd9o H# H7	 7c 7cd+=&> c3 c	 c#h r    