
    0hO7                     >    S SK Jr  S SK Jr  S SKJr   " S S\5      rg)   )ast)message)TAG_RETURNSc                       \ rS rSrS rS rSS jrS rSS jrS r	S	 r
S
 rS rS rS rS rS rSS jrS rS rS rS rSrg)IntrospectablePass   c                 >    Xl         UR                  U l        X l        g N)_transformer	namespace
_namespace_blocks)selftransformerblockss      :/lib/gobject-introspection/giscanner/introspectablepass.py__init__IntrospectablePass.__init__   s    '%//    c                    U R                   R                  U R                  5        U R                   R                  U R                  5        U R                   R                  U R                  5        U R                   R                  U R
                  5        U R                   R                  U R
                  5        U R                   R                  U R                  5        U R                   R                  U R                  5        U R                   R                  U R                  5        U R                   R                  U R                  5        g r
   )
r   walk_introspectable_alias_analysis_propagate_callable_skips_analyze_node!_introspectable_callable_analysis!_introspectable_property_analysis_introspectable_pass3'_remove_non_reachable_backcompat_copies!_introspectable_symbol_collisions)r   s    r   validateIntrospectablePass.validate"   s    T@@AT;;<T//0TCCDTCCDTCCDT778TIIJTCCDr   Nc                 .   [        U[        R                  [        R                  45      (       a  g S n[	        US5      (       aI  UR
                  < S3nU R                  R                  UR
                  5      nU(       a  UR                  nOSn[        U[        R                  5      (       a  SUR                  < S3nO;SnU(       a2  UR                  R                  [        5      nU(       a  UR                  n[        R                  " XU-   U-   US9  g )Nsymbol:  z	argument zreturn value: 	positions)
isinstancer   	VFunctionCallbackhasattrr#   r   getposition	Parameterargnametagsr   r   	warn_node)	r   parentparamtextr-   blockprefixcontext
return_tags	            r   _parameter_warning%IntrospectablePass._parameter_warning-   s     fs}}cll;<<68$$%}}/FLL$$V]]3E >>FeS]]++).9G&G"ZZ^^K8
)22H&7"2T"9$,	.r   c                    [        U[        R                  5      n[        U[        R                  5      nU(       d	  U(       d   eU R                  R                  UR                  5      nU R                  R                  U5      nUR                  (       a  g UR                  R                  (       d3  U R                  XSUR                  R                  < S35        SUl        g [        UR                  [        R                  5      (       a  SUl        g [        UR                  [        R                  [        R                  45      (       aB  UR                  R                   [        R"                  :X  a  U R                  XS5        SUl        g U(       aW  [        U[        R$                  5      (       a8  UR&                  S;  a(  UR(                  c  U R                  UUS5        SUl        g U(       a9  [        U[        R$                  5      (       a  U R                  XS5        SUl        g U(       a  [        U[        R*                  [        R,                  45      (       ap  UR.                  cc  UR0                  b  UR2                  cI  UR4                  (       d8  UR6                  [        R8                  :w  a  U R                  XS5        SUl        g UR6                  c  U R                  XS	5        SUl        g g )
NzUnresolved type: ''Fz!Missing (element-type) annotation)zGLib.DestroyNotifyzGio.AsyncReadyCallbackz\Missing (scope) annotation for callback without GDestroyNotify (valid: call, async, forever)z-Callbacks cannot be return values; use (skip)zzInvalid non-constant return of bare structure or union; register as boxed type, add (copy-func) and (free-func), or (skip)zMissing (transfer) annotation)r(   r   Returnr.   r   lookup_typenodetyperesolve_aliasesskipresolvedr9   unresolved_stringintrospectableVarargsListArrayelement_typeTYPE_ANYr*   gi_namescopeRecordUnionget_type	copy_func	free_funcforeigntransferPARAM_TRANSFER_NONE)r   r2   node	is_returnis_parametertargets         r   _introspectable_param_analysis1IntrospectablePass._introspectable_param_analysisF   s6   tSZZ0	!$6L((""22499=""226:99yy!!##FD?Cyy?Z?Z$]_$)F!dii--$)F!tyy388SYY"788II""cll2##F2UV$)F!vs||,,NN"RRJJ##np
 %*F!FCLL99##F2ab$)F!v

CII677OO#%)9)9)A}} 7 77'' !
 ).%== ##F2QR$)F! !r   c                 Z   UR                   (       d  g[        U[        R                  5      (       a  g[        U[        R                  [        R
                  45      (       a  U R                  UR                  5      $ [        U[        R                  5      (       a=  U R                  UR                  5      =(       a    U R                  UR                  5      $ UR                  (       a  gUR                  (       aj  UR                  [        R                  5      (       a  gUR                  [        R                  [        R                   [        R"                  45      (       a  ggU R$                  R'                  U5      nU(       d  gUR(                  =(       a    UR*                  (       + $ NFT)rB   r(   r   TypeUnknownrG   rF   _type_is_introspectablerH   Mapkey_type
value_typetarget_foreigntarget_fundamentalis_equivTYPE_VALISTTYPE_LONG_LONGTYPE_LONG_ULONGTYPE_LONG_DOUBLEr   r>   rD   rA   )r   typevalwarnrW   s       r   r]   *IntrospectablePass._type_is_introspectable   s*   gs//g		388455//0D0DEE))001A1AB I44W5G5GHJ!!%%00 !!3#5#5s7J7JCL`L`"abb""227;$$:fkk/:r   c                     UR                   R                  b*  U R                  R                  UR                   5      nUc  g Og UR                  (       a  SUl        g g NT)r?   target_ginamer   r>   rA   )r   r2   rT   rW   s       r   _propagate_parameter_skip,IntrospectablePass._propagate_parameter_skip   sQ    99"".&&66tyyAF~  ;;FK r   c                     [        U[        R                  5      (       a'  U R                  UR                  5      (       d  SUl        gr[   )r(   r   Aliasr]   rW   rD   r   objstacks      r   r   1IntrospectablePass._introspectable_alias_analysis   s3    c399%%//

;;%*"r   c                     [        U[        R                  5      (       a?  UR                   H  nU R	                  X5        M     U R	                  XR
                  5        grl   )r(   r   Callable
parametersrn   retval)r   rs   rt   r3   s       r   r   ,IntrospectablePass._propagate_callable_skips   sD    c3<<((..s: (**3

;r   c                    UR                   (       a  g[        U[        R                  5      (       a?  UR                   H  nU R                  X5        M     U R                  XR                  5        [        U[        R                  [        R                  [        R                  [        R                  45      (       aO  UR                   H?  nUR                  (       d  M  U R                  UR                  5      (       a  M8  SUl        MA     gr[   )rA   r(   r   rw   rx   rX   ry   Class	InterfacerL   rM   fieldsr?   r]   rD   )r   rs   rt   r3   fields        r   r    IntrospectablePass._analyze_node   s    88c3<<((33C? (//ZZ@cCIIs}}cjj#))LMM:::77

CC/4, $ r   c                    UR                   (       a  g[        U[        R                  5      (       an  UR                   H,  nU R                  UR                  5      (       a  M%  SUl          g   U R                  UR                  R                  5      (       d  SUl        g[        U[        R                  5      (       a  UR                  (       a  SUl        g[        U[        R                  5      (       Ga  UR                  c  gUS   nUR                   GH  nUR                  UR                  :w  a  M   UR                  R                  R                  UR                  R                  5      (       dG  U R!                  UUSUR"                  < SUR                  < SUR                  < S35        S Ul          g[%        UR                  5      n[%        UR                  5      nXg:w  aA  U R!                  UUSUR"                  UR                  UR                  U4-  5        S Ul          g['        UR                  5       H  u  pUR                  US	-      n
U	R                  R                  U
R                  5      (       d  MC  U R!                  UUSUR"                  < SUR                  < SUR                  < S
35        S Ul            g   GM     g)NFT    zEmitter method z for signal z::z) does not have the same return value typez]Emitter method %s for signal %s::%s does not have the same number of arguments (expected: %d)r   z) does not have the same type of arguments)rA   r(   r   rw   rx   r]   r?   rD   ry   Function	is_inlineSignalemittermethodsnamerc   r9   r#   len	enumerate)r   rs   rt   r3   r2   methodn_emitter_paramsn_signal_paramsidxsignal_parammethod_params              r   r   4IntrospectablePass._introspectable_callable_analysis   s6   88c3<<((33EJJ??).C& ( //

@@%*"c3<<((S]]!&Cc3::&&{{"1XF ..;;#++-zz//0B0BCC++4:MM6;;PSPXPXZ[
 #'CK #&v'8'8#9 "%cnn"5#6++BEK]]TZT_T_adaiaikzD{|}
 #'CK )23>>)B%C#)#4#4S1W#=L#((11,2C2CDD//"8>v{{TWT\T\^_
 '+$ *C+ )> r   c                 ~   UR                   (       a  g[        U[        R                  [        R                  45      (       a  UR
                   H:  nU R                  UR                  5      (       a  M%  SUl        S Ul	        S Ul
        M<     UR                   H  nUR                  nUb?  UR
                   H/  nUR                  U:X  d  M  UR                  (       a  M(  S Ul          O   UR                  nUc  Mb  UR
                   H0  nUR                  U:X  d  M  UR                  (       a  M(  S Ul          M     M     gr[   )rA   r(   r   r|   r}   
propertiesr]   r?   rD   settergetterr   set_propertyr   get_property)r   rs   rt   propr   r   r   s          r   r   4IntrospectablePass._introspectable_property_analysis   s    88cCIIs}}56633DII>>*/D'"&DK"&DK	 '
 ++%22+ #994T=P=P=P26F/! !/  &22+ #994T=P=P=P26F/! !/ & r   c                 P   UR                   (       a  g[        U[        R                  [        R                  [        R
                  [        R                  45      (       as  UR                   Hc  nUR                  (       a&  UR                  R                  (       d	  SUl	        M8  M:  U R                  UR                  5      (       a  M\  SUl	        Me     [        U[        R                  [        R                  45      (       a%  UR                   H  nU R                  XA/5        M     gr[   )rA   r(   r   r|   r}   rL   rM   r~   anonymous_noderD   r]   r?   signalsr   )r   rs   rt   r   sigs        r   r   (IntrospectablePass._introspectable_pass3  s    88cCIIs}}cjj#))LMM'' //>>/4, ?  77

CC/4, $ cCIIs}}566{{66sEB #r   c                     UR                   (       a  g[        U[        R                  5      (       a%  UR                  b  UR
                  (       d  SUl        gr[   )rA   r(   r   r   moved_torD   internal_skippedrr   s      r   r   :IntrospectablePass._remove_non_reachable_backcompat_copies%  s:    88sCLL))cll.F%%'+$r   c                 r    SUR                   < SUR                   < S3n[        R                  " XU-   US9  g )Nz	property :r$   r&   )r   r   strict_node)r   r2   r   r4   r-   r7   s         r   _property_warning$IntrospectablePass._property_warning.  s(    (.TYYAFdNhGr   c                    UR                    Hu  nUR                  (       d  UR                  (       d  M'  UR                  R	                  SS5      UR                  R	                  SS5      :X  d  Mc  U R                  XS5        Mw     g)N-_z/Properties cannot have the same name as signalsF)r   rA   rD   r   replacer   )r   rs   r   ss       r   _property_signal_collision-IntrospectablePass._property_signal_collision2  s`    AvvQ--vv~~c3'499+<+<S#+FF&&s2cd	 
 r   c                     UR                    He  nUR                  (       d  UR                  (       d  M'  UR                  UR                  R	                  SS5      :X  d  MS  U R                  XS5        Mg     g)Nr   r   z/Properties cannot have the same name as methodsF)r   rA   rD   r   r   r   )r   rs   r   ms       r   _property_method_collision-IntrospectablePass._property_method_collision:  sU    AvvQ--vv**344&&s2cd	 
 r   c                     UR                    He  nUR                  (       d  UR                  (       d  M'  UR                  UR                  R	                  SS5      :X  d  MS  U R                  XS5        Mg     g)Nr   r   z7Properties cannot have the same name as virtual methodsF)virtual_methodsrA   rD   r   r   r   )r   rs   r   vfuncs       r   _property_vfunc_collision,IntrospectablePass._property_vfunc_collisionB  sW    ((Ezz!5!5zzTYY..sC88&&s2kl	 )
 r   c                 Z   UR                   (       a  g[        U[        R                  [        R                  45      (       aj  UR
                   HZ  nUR                   (       d  UR                  (       d  M'  U R                  X5        U R                  X5        U R                  X5        M\     gr[   )
rA   r(   r   r|   r}   r   rD   r   r   r   )r   rs   rt   r   s       r   r   4IntrospectablePass._introspectable_symbol_collisionsJ  su    88cCIIs}}56699D$7$7//://:..s9 ' r   )r   r   r   r
   )F)__name__
__module____qualname____firstlineno__r   r    r9   rX   r]   rn   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes__ r   r   r   r      s`    	E.2=~;6	2h0$H
r   r   N)r%   r   r   annotationparserr   objectr   r   r   r   <module>r      s   (   ){ {r   