
    8Sj*U                        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KJr  S SKJr  S\S\4S jrS\S\
S\4S jr  S8S\S\S\S\SS4
S  jjr!S\S\S\SS4S! jr"S\S\S\SS4S" jr# S8S\S\S\S\SS4
S# jjr$S\S\
S\S\SS4
S$ jr% S9S\S\
S\S\S%\&S&\\'\&      SS4S' jjr(S\S\
S\S\SS4
S( jr) S9S\S\
S\S\S%\\&   SS4S) jjr*   S:S\S\
S\S\S\S*\\+   S%\\&   S+\SS4S, jjr,S-\S.\&S\&4S/ jr-S\S\
S\S0\.\&   SS4
S1 jr/S2\.\   S\
S\S0\.\&   SS4
S3 jr0S\S\
S\S\S\SS4S4 jr1S\S5\&S6\+SS4S7 jr2g);    )Optional)TextIO)overload_resolution)%write_operation_parameter_conversions)reflected_attribute_name)GenerationContext)"fully_qualified_name_for_interfaceidl_identifier_cpp_name)idl_implementation_cpp_name)is_numeric_type)is_string_type)wrap_with_ce_reactions),wrap_with_extended_attribute_exposure_checks)GeneratedIncludes)to_javascript_value)	Attribute)IDLParameterizedType)IDLType)	Interface)	Operation	operationreturnc                     U R                   S:H  =(       a/    SU R                  ;   =(       a    U R                  R                   S:H  $ )NtoJSONDefaultobject)nameextended_attributesreturn_type)r   s    X/mnt/mint/home/seanl/public/Repos/ladybird/Meta/Generators/libweb_bindings/operations.pyoperation_is_default_to_jsonr"      s?    (" 	3666	3!!&&(2    idl_typecontextc                 ~   U R                   (       a  [        U R                  5       U5      $ [        U [        5      (       aR  U R
                  S;   a  [        U R                  S   U5      $ U R
                  S:X  a  [        U R                  S   U5      $ UR                  U 5      nUb!  [        S UR                  U5       5       5      $ [        U R
                  5      =(       d[    U R
                  S:H  =(       dE    [        U R
                  5      =(       d)    U R
                  S:H  =(       d    UR                  U 5      S L$ )N)sequenceFrozenArrayr   record   c              3      #    U  H>  nUR                     H*  nUR                  S :H  =(       a    SUR                  ;   v   M,     M@     g7f)r   r   N)regular_operationsr   r   ).0interface_in_chainr   s      r!   	<genexpr>(idl_type_is_json_type.<locals>.<genexpr>8   sH      
&J"/BB	 NNh&U9	8U8U+UUB V&Js   AAbooleanr   )nullableidl_type_is_json_typewithout_nullable
isinstancer   r   
parameters	interfaceanyinheritance_stackr   r   enumeration)r$   r%   r7   s      r!   r3   r3   &   s    $X%>%>%@'JJ(011 ==77()<)<Q)?II==H$()<)<Q)?II !!(+I 
&-&?&?	&J
 
 	
 	& 	5==I%	5(--(	5 ==H$	5 x(4r#   outincludesr7   unforgeableNc                 6   [         R                  " U5      R                  5        Ho  u  pE[        S U 5       5      U:w  a  M  US   nU R	                  [        UUR                  SU S[        U5       S[         R                  " U5       S35      5        Mq     U(       a  g [         R                  " U5      R                  5       nUR                   HF  nSUR                  ;  a  M  UR                  U;   a  M'  U R	                  SUR                   S	35        MH     g )
Nc              3   @   #    U  H  nS UR                   ;   v   M     g7f)LegacyUnforgeableNr   r-   r   s     r!   r/   0define_the_regular_operations.<locals>.<genexpr>T   s     `U_	"i&C&CCU_   r   *    object.define_native_function(realm, ""_utf16_fly_string, , z, default_attributes);

FIXMEz#    object.define_direct_property("z]"_utf16_fly_string, JS::js_undefined(), default_attributes | JS::Attribute::Unimplemented);

)r   operation_overload_setsitemsr8   writer   r   r   operation_overload_set_lengthkeysr,   r   )r;   r<   r7   r=   r   
operationsr   implemented_operation_namess           r!   define_the_regular_operationsrP   M   s+    0GG	RXXZ`U_``dooqM			8-->tfDXYpqzY{X||~  @S  @q  @q  r|  @}  ~ ~ 	
	 [ "5"M"Mi"X"]"]"_11	)777>>88		3INN3C D 	
 2r#   c                     [         R                  " USS9R                  5        HW  u  p4US   nU R                  [	        UUR
                  SU S[        U5       S[         R                  " U5       S35      5        MY     g )NTstaticr   rE   rF   rG   zW, JS::Attribute::Enumerable | JS::Attribute::Configurable | JS::Attribute::Writable);

)r   rI   rJ   rK   r   r   r   rL   )r;   r<   r7   r   rN   r   s         r!   define_the_static_operationsrT   q   s    /GG	Z^_eegqM			8-->tfDXYpqzY{X||~  @S  @q  @q  r|  @}  ~ ~ 	
 hr#   c                    / nUR                    HB  nSUR                  ;  d  M  SUR                  ;   d  M'  UR                  UR                  5        MD     [        R
                  " U5      R                  5        H/  u  pV[        S U 5       5      (       d  M  UR                  U5        M1     U(       d  g UR                  S5        U R                  S5        U H  nU R                  SU S35        M     U R                  S5        g )	NrH   
Unscopablec              3   @   #    U  H  nS UR                   ;   v   M     g7f)rV   NrA   rB   s     r!   r/   ,define_unscopable_members.<locals>.<genexpr>   s     Yj|y<<<jrD   LibJS/Runtime/Object.hzA    auto unscopable_object = JS::Object::create(realm, nullptr);
z2    MUST(unscopable_object->create_data_property("z'"_utf16_fly_string, JS::Value(true)));
zx    object.define_direct_property(vm.well_known_symbol_unscopables(), unscopable_object, JS::Attribute::Configurable);

)
regular_attributesr   appendr   r   rI   rJ   alladdrK   )r;   r<   r7   unscopable_names	attributer   rN   s          r!   define_unscopable_membersr`      s    11	)777LILiLi<i##INN3 2 0GG	RXXZYjYYY##D) [ LL)*II	 !		B4& I 	
 !
 II	r#   c                     UR                   c  g UR                   R                  nSU;   U:w  a  g U R                  [        UUS5      5        U R                  S5        g )Nr@   zi    object.define_native_function(realm, "toString"_utf16_fly_string, to_string, 0, default_attributes);
z

)stringifierr   rK   r   )r;   r<   r7   r=   r   s        r!   define_the_stringifierrc      sh     $#//CC22{BII4	
 II	r#   c           
      \   [         R                  " U5      R                  5        H  n[        U5      S:  ab  UR                  (       a  UR
                  OUR                  n[         R                  " XX#XES9  [        U5       H  u  pg[        XX#Xv5        M     Mt  [        XX#US   5        M     g )Nr*   receiver_classr   )
r   rI   valueslenis_namespacenamespace_classprototype_classwrite_overload_arbiter	enumeratewrite_operation)r;   r%   r<   r7   rN   rf   overload_indexr   s           r!   write_regular_operationsrp      s     *AA)LSSU
z?Q:C:P:PY66V_VoVoN66h: .7z-B)h9] .C C(z!}M Vr#   rf   defined_callbacksc                 (  ^ [         R                  " U5      R                  5        H  n[        U5       VVs/ s H   u  px[	        U[        U5      S:  a  UOS S9PM"     n	nnU	R                  [	        US   5      5        Tb  [        U4S jU	 5       5      (       a  Mw  Tb  TR                  U	5        [        U5      S:  a:  [         R                  " XX#XdS9  [        U5       H  u  px[        XX#XU5        M     M  [        XX#US   US9  M     g s  snnf )Nr*   suffixr   c              3   ,   >#    U  H	  oT;   v   M     g 7fN )r-   callbackrq   s     r!   r/   8write_regular_operations_for_receiver.<locals>.<genexpr>   s     0i_hS[=N1N_hs   re   )r   rI   rg   rm   r   rh   r[   r\   updaterl   rn   )
r;   r%   r<   r7   rf   rq   rN   ro   r   	callbackss
        `    r!   %write_regular_operations_for_receiverr|      s    *AA)LSSU
 .7z-B
-B) $IJZ[H[naef-B 	 
 	0A?@(S0i_h0i-i-i($$Y/z?Q66h: .7z-B)h9^lm .C C(z!}]kl# V
s   'Dc                    [         R                  " USS9R                  5        Hf  n[        U5      S:  aE  [         R                  " U UUUUUR
                  S9  [        U5       H  u  pV[        XX#XeSS9  M     MW  [        XX#US   SS9  Mh     g )NTrR   r*   re   )emit_as_staticr   )r   rI   rg   rh   rl   constructor_classrm   rn   )r;   r%   r<   r7   rN   ro   r   s          r!   write_static_operationsr      s     *AA)TXY``b
z?Q66(:: .7z-B)h9mqr .C C(z!}]ab cr#   c                    Uc  UR                   nUR                  c  g UR                  R                  nUb  UR                  O
[	        S5      nUb  [        U5      OSnU R                  SU SU SU S[        USX!5       S3	5        g )	N	DOMString	to_stringJS_DEFINE_NATIVE_FUNCTION(z*::to_string)
{
    WebIDL::log_trace(vm, "z::to_string");
    auto* idl_object = TRY(impl_from(vm));
    auto R = TRY(throw_dom_exception_if_needed(vm, [&] { return idl_object->z(); }));
    return R;
}

)rk   rb   r_   typer   r   rK   r   )r;   r%   r<   r7   rf   r_   stringifier_typestringifier_cpp_names           r!   write_stringifierr      s     "22$%%//I)2)>y~~GKDXENEZ6yA`kII&~&6 7*+ ,NNbMc d 0#xIJ K	
r#   ro   r~   c                    [        U5      (       a  [        XX#U5        g UR                  5       nU=(       a    US L n	SR                  S UR                   5       5      n
U
nU=(       d    UR
                  nU(       a  U
(       a  SU
 3OSn[        XES9nUR
                  (       a  U=(       d    UR                  nO(U=(       d    U(       a  UR                  OUR                  nU R                  SU SU SU SU S	3	5        U	(       a"  UR                  S
5        U R                  S5        U(       d  U R                  S[        U5       S35        [        R                  " U5      nUS:X  a   U R                  SUR                   S35        O+US:  a%  U R                  SU SUR                   SU S35        [!        XR                  X!5        U(       a  [        U5      nUR
                  (       a  [        U5      R#                  S5      S   nU R                  SU S[%        U5       SU S35        U	(       a+  U R                  S['        UR(                  SX!5       S35        g U R                  S['        UR(                  SX!5       S35        g SUR*                  ;   av  U(       a&  [-        SUR                   SUR                   S35      e[/        US 5      nU R                  S![%        U5       SU
 S"U S#['        UR(                  SX!5       S3	5        g U	(       a:  U R                  S$[%        U5       SU
 S%['        UR(                  S&X!5       S35        g U R                  S$[%        U5       SU
 S'['        UR(                  SX!5       S35        g )(NrG   c              3   8   #    U  H  n[        U5      v   M     g 7frv   r
   )r-   	parameters     r!   r/   "write_operation.<locals>.<genexpr>$  s     cNb1)<<Nb   zvm, vmrs   r   ::)
{
    WebIDL::log_trace(vm, "z<");
    [[maybe_unused]] auto& realm = *vm.current_realm();
zLibWeb/WebIDL/Promise.hzk    auto steps = [&realm, &vm]() -> JS::ThrowCompletionOr<GC::Ref<WebIDL::Promise>> {
        (void)realm;
z    [[maybe_unused]] z$* idl_object = TRY(impl_from(vm));

r*   s    if (vm.argument_count() < 1)
        return vm.throw_completion<JS::TypeError>(JS::ErrorType::BadArgCountOne, "");

    if (vm.argument_count() < U)
        return vm.throw_completion<JS::TypeError>(JS::ErrorType::BadArgCountMany, "", "r   zQ    [[maybe_unused]] auto R = TRY(throw_dom_exception_if_needed(vm, [&] { return (z); }));
u          return R;
    };

    auto maybe_R = steps();

    // And then, if an exception E was thrown:
    // 1. If op has a return type that is a promise type, then return ! Call(%Promise.reject%, %Promise%, «E»).
    // 2. Otherwise, end these steps and allow the exception to propagate.
    if (maybe_R.is_throw_completion())
        return WebIDL::create_rejected_promise(realm, maybe_R.error_value())->promise();

    auto R = maybe_R.release_value();
    return r   r   z    return CEReactionsz7Unsupported promise-returning [CEReactions] operation 'z' on ''zoriginal_steps()zj    auto original_steps = [&] {
        return throw_dom_exception_if_needed(vm, [&] { return idl_object->z1); });
    };

    [[maybe_unused]] auto R = TRY(z);
    return z]    [[maybe_unused]] auto R = TRY(throw_dom_exception_if_needed(vm, [&] { return idl_object->u  ); }));
        return R;
    };

    auto maybe_R = steps();

    // And then, if an exception E was thrown:
    // 1. If op has a return type that is a promise type, then return ! Call(%Promise.reject%, %Promise%, «E»).
    // 2. Otherwise, end these steps and allow the exception to propagate.
    if (maybe_R.is_throw_completion())
        return WebIDL::create_rejected_promise(realm, maybe_R.error_value())->promise();

    return zmaybe_R.release_value()z); }));
    return )r"   write_default_to_json_operationreturn_type_is_promisejoinr6   ri   r   rj   r   rk   rK   r]   r	   r   operation_lengthr   r   	partitionr   r   r    r   RuntimeErrorr   )r;   r%   r<   r7   r   ro   rf   r~   r   should_wrap_promise_rejections	argumentscallee_argumentsoperation_invokes_as_staticcallback_namerequired_argument_countcalleece_reactions_stepss                    r!   rn   rn     sj    $I..'h9U&==?%;%VRV@V"		ciNbNbccI "0"JI4J4J"1:T)-+IMM'D9+D+D' 
+9I''y?X?X 	 II&~&6b H*+2m_ =	 &./			

 '		%&H&S%T U 	

 2BB9M!#		SS\SaSaRb c	
 
!1	$		./F.G HTT]TbTbSccgh  hA A	
 *#/C/CXW"3I>!!7	BLLTRSTUF		bcibjjl  nI  JS  nT  mU  UV  Wg  Vh h 	
 *II  	 5 5sHNO P2 	 II 3I4I4I3PX bc d  		555!I)..IYY_`i`n`n_oopq  4H>PQ		LLghqLrKsstu~t @# $6"6 7	 5 5sHNO P
	
 	%		n  pK  LU  pV  oW  WX  Yb  Xc c  	 5 57PRZde f	
$ 	IIj  lG  HQ  lR  kS  ST  U^  T_ _	 5 5sHNO P	r#   r_   
value_namec                     SU R                   ;   nU(       a,  U R                  R                  S:X  a  SU S[        U 5       S3$ U(       a  SU S[        U 5       S3$ SU S[	        U 5       S3$ )	NReflectr1   zauto z = idl_object->has_attribute("z"_utf16_fly_string);z$ = idl_object->get_attribute_value("zB = TRY(throw_dom_exception_if_needed(vm, [&] { return idl_object->z(); }));)r   r   r   r   r   )r_   r   is_reflecteds      r!   default_to_json_getter_stepsr     s     	 = ==L	++y8J<=>VW`>a=bbvw	
 zl"FG_`iGjFkk  A  	A:,ab}  H  cI  bJ  JS  T  Tr#   attribute_valuesc                    [        S U R                   5       5      (       d  g U R                   H  n[        UR                  U5      (       d  M   [        U5       S[        U5       S3n[        U5       S[        U5       S3nU S3n[        XE5      nUR                  [        UUR                  SU SU SUR                   S	U S
[        UR                  XRU5       SU SU S35      5        M     g )Nc              3   8   #    U  H  n[        U5      v   M     g 7frv   )r"   rB   s     r!   r/   +collect_attribute_values.<locals>.<genexpr>  s     eHd9+I66Hdr   __value_key_jsz    zC

    // 1. Let k be key converted to a JavaScript value.
    auto z = "zX"_utf16_fly_string;

    // 2. Let v be value converted to a JavaScript value.
    auto z = zf;

    // 3. Perform ! CreateDataPropertyOrThrow(result, k, v).
    MUST(result->create_data_property(rG   z));
)r8   r,   rZ   r3   r   r   rh   r   r[   r   r   r   r   )	r7   r%   r<   r   r_   r   key_namejs_value_namegetter_stepss	            r!   collect_attribute_valuesr     s    e	HdHdeee11	 %Y^^W==/	:;1SAQ=R<SSYZ
-i893?O;P:QQUV%,c*3IJ8-- '
 4	' (
 /	
V]^_ `' (0j=/ B
	
 2r#   stackc                 d    U R                  5       n[        XAX#5        U (       a  [        XX#5        g g rv   )popr   0collect_attribute_values_of_an_inheritance_stack)r   r%   r<   r   r7   s        r!   r   r     s/     		I YL 8d r#   c                 2   UR                  S5        UR                  S5        UR                  U5      n/ n[        XQX&5        U R                  SUR                   S[        U5       SUR                   S[        U5       SSR                  U5       S35        g )	NrY   zLibWeb/WebIDL/Tracing.hr   r   r   u)  ");
    auto& realm = *vm.current_realm();

    [[maybe_unused]] auto* idl_object = TRY(impl_from(vm));

    // 4. Let result be OrdinaryObjectCreate(%Object.prototype%).
    auto result = JS::Object::create(realm, realm.intrinsics().object_prototype());

    // 5. For each key → value of map:
 z0
    // 6. Return result.
    return result;
}

)r]   r9   r   rK   rk   r   r   )r;   r%   r<   r7   r   r   r   s          r!   r   r     s     LL)*LL*+
 %%i0E #%4UX`II&y'@'@&AD[\eDfCg h%556b9PQZ9[8\ 	] 	  	r#   function_nameargument_countc           	          US:X  a  g US:X  a  U R                  SU S35        g U R                  SU SU SU S35        g )Nr   r*   r   r   r   r   r   )rK   )r;   r   r   s      r!   write_argument_count_checkr     sq    		SS`Ra b	
 	II*>*: ;TTaSbbfgufv w	r#   )Frv   )NNF)3typingr   r   Generators.libweb_bindingsr   $Generators.libweb_bindings.argumentsr   %Generators.libweb_bindings.attributesr   "Generators.libweb_bindings.contextr   $Generators.libweb_bindings.cpp_typesr	   r   r   r   r   .Generators.libweb_bindings.extended_attributesr   r   #Generators.libweb_bindings.includesr   &Generators.libweb_bindings.to_js_valuer   Utils.webidl_parserr   r   r   r   r   boolr"   r3   rP   rT   r`   rc   rp   strsetr|   r   r   intrn   r   listr   r   r   r   rw   r#   r!   <module>r      s  
   : V J @ S H L @ ? Q g A F ) 4 ' ) )I $ $G $6G $D $V 	!
	!
!
 !
 	!

 
!
H
f 
8I 
V_ 
dh 
6 5F S\ ae @ 		  	
 
8N	N+N7HNU^N	N* -1m	mm  m 	m
 m  C)m 
m8c	c+c7HcU^c	c0 %)	   	
 SM 
H %)$( R	RR  R 	R
 R SMR SMR R 
RlTTT 	T'
'
'
  '
 3i	'

 
'
Ve	?ee  e 3i	e
 
e$%	%%  % 	%
 % 
%PF 3 PS X\ r#   