
    0h                         S SK r S SKrS SK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JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#   " S	 S
\$5      r% " S S\&5      r'g)    N   )ast)message)utils)
CacheStore)	GIRParser)SourceSymbol
ctype_nameCTYPE_POINTERCTYPE_BASIC_TYPECTYPE_UNIONCTYPE_ARRAYCTYPE_TYPEDEF
CTYPE_VOID
CTYPE_ENUMCTYPE_FUNCTIONCTYPE_STRUCTCSYMBOL_TYPE_FUNCTIONCSYMBOL_TYPE_FUNCTION_MACROCSYMBOL_TYPE_TYPEDEFCSYMBOL_TYPE_STRUCTCSYMBOL_TYPE_ENUMCSYMBOL_TYPE_UNIONCSYMBOL_TYPE_OBJECTCSYMBOL_TYPE_MEMBERCSYMBOL_TYPE_ELLIPSISCSYMBOL_TYPE_CONSTTYPE_QUALIFIER_CONSTTYPE_QUALIFIER_VOLATILEFUNCTION_INLINEc                       \ rS rSrSrg)TransformerException(    N)__name__
__module____qualname____firstlineno____static_attributes__r$       3/lib/gobject-introspection/giscanner/transformer.pyr"   r"   (   s    r*   r"   c                      \ rS rSr\" S 5      r  S:S jrS rS rS r	S r
S	 rS
 rS rS rS rS rS r\S;S j5       rS<S jrS rS rS<S jrS rS rS rS rS rS=S jrS rS rS r S r!S<S jr"S<S  jr#S! r$S" r%S;S# jr&S$ r'S% r(S>S& jr)  S?S' jr*   S@S( jr+S) r,S* r-S+ r.S>S, jr/S- r0S. r1S/ r2S0 r3S<S1 jr4S2 r5S3 r6S4 r7S5 r8S6 r9S7 r:S8 r;S9r<g)ATransformer,   c                     U R                   $ N
_namespaceselfs    r+   <lambda>Transformer.<lambda>-   s    door*   Nc                     [        5       U l        X l        Xl        [	        5       U l        0 U l        0 U l        / U l        SU l	        X0l
        X@l        0 U l        g )NF)r   _cachestore_accept_unprefixedr2   set_pkg_config_packages_typedefs_ns_parsed_includes_includepaths_passthrough_mode_identifier_filter_cmd_symbol_filter_cmd_tag_ns)r4   	namespaceaccept_unprefixedidentifier_filter_cmdsymbol_filter_cmds        r+   __init__Transformer.__init__/   sV    %<"3#$'E! "!&&;#"3
 r*   c                     U R                   $ r0   )r;   r3   s    r+   get_pkgconfig_packages"Transformer.get_pkgconfig_packagesA   s    (((r*   c                     S U l         g r0   )r8   r3   s    r+   disable_cacheTransformer.disable_cacheD   s
    r*   c                     SU l         g NT)r?   r3   s    r+   set_passthrough_mode Transformer.set_passthrough_modeG   s
    !%r*   c                 t   U R                   R                  UR                  5      nU(       a?  [        U[        R
                  5      (       d  [        U[        R
                  5      (       a  g [        U[        R                  5      (       a   [        U[        R                  5      (       a  g X!L a  g U(       ag  [        5       nUR                  UR                  5        UR                  UR                  5        [        R                  " SUR                  < S3U5        g U R                   R                  U5        g )NzNamespace conflict for '')r2   getname
isinstancer   FunctionMacroConstantr:   updatefile_positionsr   fatalappend)r4   nodeoriginal	positionss       r+   _append_new_nodeTransformer._append_new_nodeJ   s    ??&&tyy1
 Hc&7&788Jt%%=' ='#,,//JtS\\4R4R
 IX445T001MM499G#% OO""4(r*   c                    U H  nUR                   S;   a  M   U R                  U5      nU(       a"  UR
                  (       a  U R                  U5        [        U[        R                  5      (       d  Mq  UR                  (       d  M  UR                  U R                  ;  d  M  X0R                  UR                  '   M     U R                  R                  5        HA  u  pVUR
                  (       a  M   U R                  U5      nXvl        U R                  U5        MC     g ! [         a"  n[        R                  " X$5         S nAGMC  S nAff = f! [         a"  n[        R                  " WU5         S nAM  S nAff = f)N)gst_g_error_get_type)ident_traverse_oner"   r   warn_symbolrV   ra   rW   r   Compoundtag_namerB   itemsstrip_identifier	warn_node)r4   symbolssymbolr^   eri   structrV   s           r+   parseTransformer.parsee   s   F ||77))&1
 		%%d+$--$---MM5.2T]]+! * !% 2 2 4H;;;/00:D"&K))&1 !5 ( ##F.& , /%%dA../s/   D2(E
E)EE
E:E55E:c                 $    [        U5      U l        g r0   )listr>   )r4   pathss     r+   set_include_pathsTransformer.set_include_paths   s    !%[r*   c                     XR                   R                  ;   a  g U R                   R                  R                  U5        U R                  U5      nU R	                  U5        g r0   )r2   includesadd_find_include_parse_include)r4   includefilenames      r+   register_includeTransformer.register_include   sK    oo...  $$W-%%g.H%r*   c                 t   [         R                  R                  U5      nUR                  S5      (       d  [	        SU< S35      eUS S n[
        R                  R                  U5      nX@R                  R                  ;   a  g U R                  R                  R                  U5        U R                  USS9  g )N.girzInclude path 'z(' must be a filename path ending in .girT)uninstalled)ospathbasenameendswith
SystemExitr   Includefrom_stringr2   ry   rz   r|   )r4   include_pathr   girnamer}   s        r+   register_include_uninstalled(Transformer.register_include_uninstalled   s    77##L1  ((1=A B B3B-++))'2oo...  $$W-Ld;r*   c                    SU;  a  U R                   R                  U5      $ UR                  SS5      u  p#X R                   R                  :X  a  U R                   R                  U5      $ X R                   R                  ;   aH  X R
                  ;  a9  [        R                  " SU< SU< 35        U R                   R                  U5      $ U R
                  U   nUR                  U5      $ )zGiven a name of the form Foo or Bar.Foo,
return the corresponding ast.Node, or None if none
available.  Will throw KeyError however for unknown
namespaces..r   z*Deprecated reference to identifier prefix z in GIName )r2   rU   splitrV   identifier_prefixesr=   r   warn)r4   rV   nsginamer}   s        r+   lookup_ginameTransformer.lookup_giname   s    
 d???&&t,,::c1-LR__)))**622__888RG\G\=\;=tE F**622++B/G;;v&&r*   c                 \    UR                   (       a  U R                  UR                   5      $ g)ziGiven a Type object, if it points to a giname,
calls lookup_giname() on the name.  Otherwise return
None.N)target_ginamer   )r4   typeobjs     r+   lookup_typenodeTransformer.lookup_typenode   s'       %%g&;&;<<r*   c                    U R                   S S  n[        R                  " SS5      nU(       a.  UR                  UR	                  [        R
                  5      5        [        R                  " 5       nUb/  UR                  [        R                  R                  US5      5        [        R                  " 5        H2  nUR                  [        R                  R                  US5      5        M4     UR                  [        5        UR                  [        R                  R                  [        S5      5        [        R                  S:w  a  UR                  S5        UR                  < SUR                  < S3nU HJ  n[        R                  R                  Xv5      n[        R                  R!                  U5      (       d  MH  Us  $    ["        R$                  R'                  SU< S	U< S
35        ["        R(                  " S5        g )NGI_GIR_PATH zgir-1.0ntz/usr/share/gir-1.0-r   zCouldn't find include 'z' (search path: 'z')
r   )r>   r   getenvextendr   pathsepr   get_user_data_dirr]   r   joinget_system_data_dirsGIR_DIRDATADIRrV   versionexistssysstderrwriteexit)r4   r}   
searchdirsfrom_env	user_datar   r   ds           r+   r{   Transformer._find_include   sU   ''*
99]B/hnnRZZ89++-	 bggll9i@A..0Dbggll4;< 1'""'',,w	:;77d?23!(w?A77<<+Dww~~d##  	

!:/ 	0r*   c                     U " S 5      nUb  UR                  U5        UR                  5         UR                  U5      nUR                  5       Ul        UR
                  UR                  R                  	 U$ r0   )rv   rQ   r|   get_namespacer2   r=   rV   )clsr~   extra_include_dirsr4   parsers        r+   parse_from_girTransformer.parse_from_gir   si    4y)""#56!!#$$X. ..0!!$//"6"67r*   c                    S nU R                   b  U R                   R                  U5      nUcQ  [        U R                  (       + S9nUR	                  U5        U R                   b  U R                   R                  X5        UR                  5       R                   HA  nUR                  U R                  ;  d  M  U R                  U5      nU R                  U5        MC     U(       d<  UR                  5       R                   H  nU R                  R                  U5        M      UR                  5       nXpR                  UR                  '   U$ )N)
types_only)r8   loadr   r?   rq   storer   ry   rV   r=   r{   r|   exported_packagesr;   rz   )r4   r~   r   r   r}   dep_filenamepkgrC   s           r+   r|   Transformer._parse_include   s   '%%**84F>d.D.D*DEFLL"+  &&x8++-66G||4#8#88#11':##L1 7
 ++-??))--c2 @((*	09inn-r*   c              #   r   #    U R                   v   U R                  R                  5        H  nUv   M	     g7f)zZReturn an iterator over all included namespaces; the
currently-scanned namespace is first.N)r2   r=   values)r4   r   s     r+   _iter_namespacesTransformer._iter_namespaces   s/      oo''..0BH 1s   57c                 D    US   U R                   :X  a  SUS   4$ SUS   4$ )zKey sort which ensures items in self._namespace are last by returning
a tuple key starting with 1 for self._namespace entries and 0 for
everythin else.
r   r      r1   )r4   vals     r+   _sort_matchesTransformer._sort_matches   s0    
 q6T__$c!f9c!f9r*   c           	         U(       d  U R                   (       a  [        R                  " U R                   [        R                  [        R                  [        R                  S9nUR	                  UR                  5       5      u  pEUR                  5       nUR                  (       a%  [        SU R                   UR                  U4-  5      eUR                  S5      nUR                  5       n/ n/ nU R                  5        H  nU(       a  UR                  n	O1US   R                  5       (       a  UR                  n	OUR                  n	U	(       an  U	 Hf  n
U(       d  U
R                  S5      (       d  U
S-   n
UR!                  U
5      (       d  M=  UR#                  X[%        U
5      S  [%        U
5      45          M     M  UR#                  U5        M     U(       a/  UR'                  U R(                  S9  [+        [-        S U5      5      $ U R.                  (       a  U R0                  U4/$ U(       a  U H  nX;   d  M
  X4/s  $    [        SU(       a  S	OS
< SU< S35      e)Nstdinstdoutr   $filter: %r exited: %d with error: %sasciir   _)keyc                     U S   U S   4$ )Nr   r   r$   )xs    r+   r5   CTransformer._split_c_string_for_namespace_matches.<locals>.<lambda>$  s    qtQqTlr*   zUnknown namespace for 
identifierrn   z 'rT   )rA   
subprocessPopenPIPEcommunicateencodestrip
returncode
ValueErrordecoder   r   isupper_ucase_symbol_prefixessymbol_prefixesr   
startswithr]   lensortr   rt   mapr9   r2   )r4   rV   is_identifierproc	proc_nameerrmatchesunprefixed_namespacesr   prefixesprefixs              r+   %_split_c_string_for_namespace_matches1Transformer._split_c_string_for_namespace_matches  s   !8!8##D$;$;*4//+5??+5??<D "--dkkm<NI!)I !G"&"9"94??C!P"Q R R##G,D::<D "'')B11a""44--&F)FOOC4H4H!'#v..V,>F'LM ' &,,R0 *  LLT//L02G<==$$__d+,," ,:J<' , ,9LxGQ R 	Rr*   c                 "    U R                  USS9$ )zGiven a StudlyCaps string identifier like FooBar, return a
list of (namespace, stripped_identifier) sorted by namespace length,
or raise ValueError.  As a special case, if the current namespace matches,
it is always biggest (i.e. last).Tr   r   )r4   re   s     r+   split_ctype_namespaces"Transformer.split_ctype_namespaces1  s    
 99%t9TTr*   c                 "    U R                  USS9$ )zGiven a C symbol like foo_bar_do_baz, return a list of
(namespace, stripped_symbol) sorted by namespace match probablity, or
raise ValueError.Fr   r   )r4   rn   s     r+   split_csymbol_namespaces$Transformer.split_csymbol_namespaces8  s     99&PU9VVr*   c                 ,    U R                  USS9nUS   $ )zwGiven a C symbol like foo_bar_do_baz, return the most probable
(namespace, stripped_symbol) match, or raise ValueError.Fr   r   )r4   rn   r   s      r+   split_csymbolTransformer.split_csymbol>  s$     <<VSX<Yr{r*   c                    U R                   (       a  [        R                  " U R                   [        R                  [        R                  [        R                  S9nUR	                  UR                  5       5      u  p4UR                  (       a%  [        SU R                   UR                  U4-  5      eUR                  S5      R                  5       nUR                  S5      nU(       a  USS  n U R                  U5      nU H%  u  pXR                  L d  M  U(       a  SU	-   s  $ U	s  $    US   u  p[        SU< SUR                  < 35      e! [         a  n[        [        U5      5      eS nAff = f)	Nr   r   r   r   r   r   zSkipping foreign identifier 'z' from namespace )r@   r   r   r   r   r   r   r   r   r   r   r   r"   strr2   rV   )
r4   re   r   
proc_identr   hiddenr   ro   r   rV   s
             r+   rk   Transformer.strip_identifierD  sE   &&##D$?$?*4//+5??+5??<D #..u||~>OJ !G"&"="=tPS!T"U V V%%g.446E!!#&!"IE	/11%8G  HB__$:%	  
 R[
"DI277UW 	W  	/&s1v..	/s   1E 
E4E//E4c                 4   UR                   nUR                  S5      nU(       a  USS  n U R                  U5      u  pEX@R                  :w  a  [	        SUR                  < 35      eU(       a  SU-   $ U$ ! [         a  n[	        [        U5      5      eS nAff = f)Nr   r   z'Skipping foreign symbol from namespace )re   r   r   r   r"   r  r2   rV   )r4   rn   re   r  r   rV   ro   s          r+   _strip_symbolTransformer._strip_symbola  s    !!#&!"IE	/++E2JR  &?AwwIK K:  	/&s1v..	/s   A4 4
B>BBc                 |   [        U[        5      (       d   U5       eUc  UR                  nU[        :X  a  U R	                  U5      $ U[
        :X  a  U R                  U5      $ U[        :X  a  U R                  U5      $ U[        :X  a   U R                  [        R                  U5      $ U[        :X  a  U R                  U5      $ U[        :X  a  U R!                  X5      $ U["        :X  a   U R                  [        R$                  U5      $ U[&        :X  a  U R)                  U5      $ U[*        :X  a  g [-        SU< S35        g )Nz transformer: unhandled symbol: 'rT   )rW   r	   typer   _create_functionr   _create_function_macror   _create_typedefr   _create_tag_ns_compoundr   Recordr   _create_enumr   _create_memberr   Unionr   _create_constr   print)r4   rn   stypeparent_symbols       r+   rf   Transformer._traverse_oneq  s   &,//77/=KKE))((0011..v66**''//))//

FCC''$$V,,))&&v==((//		6BB((%%f--))6DEr*   c                     S n[        [        UR                  R                  5      5      S:  a  g S nUR                  R                   H.  nUc  UR                  nM  U" X4R                  5      nUS:X  d  M.    g    U$ )Nc                     / n[        U R                  S5      UR                  S5      5       H1  u  p4X4:w  a  SR                  U5      S-   s  $ UR                  U5        M3     [	        X5      $ )Nr   )zipr   r   r]   min)abcommonpartsawordbwords        r+   common_prefix6Transformer._enum_common_prefix.<locals>.common_prefix  s^    K #AGGCL!''#, ?>88K0366""5) !@ q9r*   r   r   )r   rt   	base_type
child_listre   )r4   rn   r   r   childs        r+   _enum_common_prefixTransformer._enum_common_prefix  sr    	 tF$$//01A5%%00E~&v{{;R< 1 r*   c                    U R                  U5      nU(       a  [        U5      nOSn/ nUR                  R                   H  nUR                  (       a  M  US:  a  UR
                  US  nOU R                  U5      nUR                  [        R                  " UR                  5       UR                  UR
                  5      5        M     U R                  UR
                  5      nUR                  R                  (       a  [        R                  nO[        R                  nU" XqR
                  US9n	U	R!                  U5        U	$ )Nr   )members)r%  r   r"  r#  privatere   r  r]   r   Memberlower	const_intrk   is_bitfieldBitfieldEnumadd_symbol_reference)
r4   rn   r   	prefixlenr(  r$  rV   	enum_nameklassr^   s
             r+   r  Transformer._create_enum  s    ))&1FII%%00E}}1}{{9:.
 ))%0NN3::djjl&+oo&+kk3 4 1 ))&,,7	''LLEHHEYg>!!&)r*   c                    UR                   R                  S5      (       a  g [        U R                  XR                  5      5      nU R                  UR                  R                  5      nU R                  U5      n[        R                  " XCUSUR                   5      nUR                  R                  R                  [        -  (       a  SUl        UR                  U5        U$ )Nr   FT)re   r   rt   _create_parametersr"  _create_returnr  r   Functionfunction_specifierr    	is_inliner0  )r4   rn   
parametersreturn_rV   funcs         r+   r
  Transformer._create_function  s    <<""3''$11&:J:JKL
%%f&6&6&@&@A!!&)||D:ufllK%%88?J!DN!!&)r*   c                 r   UR                   R                  S5      (       a  g UR                  b   UR                  R                  S5      (       d  g [	        U R                  XR                  5      5      nU R                  U5      n[        R                  " X2UR                   5      nUR                  U5        U$ )Nr   .h)re   r   source_filenamer   rt   r6  r"  r  r   rX   r0  )r4   rn   r;  rV   macros        r+   r  "Transformer._create_function_macro  s    <<""3''""*&2H2H2Q2QRV2W2W$11&:J:JKL
!!&)!!$FLLA""6*r*   c                    Uc   eUR                   [        :X  a  SnU$ UR                   [        :X  a  UR                  nU$ UR                   [        :X  a  UR                  nU$ UR                   [
        :X  d  UR                   [        :X  a'  U(       a   U R                  UR                  5      S-   nU$ UR                   [        :X  a  U R                  UR                  5      $ SnU$ )Nvoid*gpointer)	r	  r   r   rV   r   r   r   _create_source_typer"  )r4   source_typeis_parametervalues       r+   rH  Transformer._create_source_type  s    &&&z)E  !11$$E  .$$E  -/ !![0\,,[-B-BCcIE
 	 ,++K,A,ABBEr*   c                    Uc   eUR                   [        -  nUR                   [        -  nUR                  [        :X  a  gUR                  [
        [        [        [        [        4;   a&  UR                  nU(       a  SU-   nU(       a  SU-   nU$ UR                  [        :X  d  UR                  [        :X  a?  U(       a8  U R                  UR                  5      S-   nU(       a  US-  nU(       a  US-  nU$ UR                  [        :X  a  U R                  UR                  5      $ U(       a  SnOSnU(       a  SU-   nU$ )	NrE  zconst z	volatile rF  z constz	 volatilegconstpointerrG  )type_qualifierr   r   r	  r   r   r   r   r   r   rV   r   r   _create_complete_source_typer"  )r4   rI  rJ  constvolatilerK  s         r+   rP  (Transformer._create_complete_source_type  s-   &&&++.BB..1HHz)"2"/"."-",	". .
  $$E 5(#e+L-/ !![0\55k6K6KLsRE!$L,44[5J5JKK'"#e+Lr*   c              #   p   #    [        UR                  5       H  u  p4U R                  XU5      v   M     g 7fr0   )	enumerater#  _create_parameter)r4   rn   r"  ir$  s        r+   r6  Transformer._create_parameters  s/     !)"6"67HA((E:: 8s   46c                    UR                   nUR                  S5      nU(       a  USS  nU R                  U5      nUS   u  pgU(       a  U(       d   eU(       a  SU-   n[        R                  " U< SUR                   < S35      nU R                  UR                  U5        U R                  U5        [        R                  " UR                  < SUR                  < 3S9n	U	$ )Nr   r   r   ____unionr   )r   )
re   r   r   r   r  _parse_fieldsr"  ra   TyperV   )
r4   rn   r  parent_identr  r   rC   parent_name
fake_union	fake_types
             r+   _synthesize_union_type"Transformer._synthesize_union_type  s    $**((-'+L--l;#*2; [((+KYY+v||LM
 	6++Z8j)HH%.^^Z__EG	r*   c                    UR                   nUR                  [        :X  a:  UR                   R                   R                  [        :X  a  U R	                  USS9nU$ UR                  [
        :X  a/  UR                  c"  U R                  [        R                  U5      nU$ UR                  [        :X  a/  UR                  c"  U R                  [        R                  U5      nU$ UR                  [        :X  a  SnUR                  [        :X  aH  UR                   H  nUb  XVR                  -  n  O   S nUR                   nUR                  [        :X  a  MH  UR                  [        :X  a  UR                  c  U R                  X5      nO2U R!                  U5      nU R#                  U5      n	U R%                  UU	S9n[        R&                  " S U5      n
SU
l        XZl        OU R-                  UR                   5      n
[        R.                  " UR0                  U
SSUR                  S9nUR2                  (       a  SUl        SUl        SUl        U$ )NT)memberr   )complete_ctypeF)readablewritablebits)r"  r	  r   r   _create_callbackr   rV   _create_member_compoundr   r  r   r  r   r#  r,  rb  rH  rP  create_type_from_ctype_stringArrayzeroterminatedsize_create_type_from_baseFieldre   r)  rg  rh  )r4   rn   r  rI  r^   flattened_sizer$  element_typectyperf  ftypes              r+   r  Transformer._create_member2  s   &&-&&++~=(((=D\ [ -+2B2B2J//

FCDX W ,1A1A1I//		6BDT M ;.!"!&&+5!,!7!7)5*oo=N "8
 *."-"7"7K "&&+5 ##{2{7G7G7O#'#>#>v#UL 44[AE%)%F%F{%SN#'#E#EeUc $F $eL		$5',$+
33F4D4DE 99V\\5&*T"("2"24D ~~ % %#r*   c                 (   UR                   R                  nU[        :X  a;  UR                   R                   R                  [        :X  a  U R	                  U5      nU$ U[        :X  a  U R	                  U5      nU$ U[        :X  aJ  UR                   R                   R                  [
        :X  a"  U R                  [        R                  USSS9nU$ U[
        :X  a"  U R                  [        R                  U5      nU$ U[        :X  a"  U R                  [        R                  U5      nU$ U[        :X  a  U R                  U5      $ U[        [        [        [        4;   a  U R!                  UR"                  5      nU R%                  UR                   5      nU[        R&                  ;   a  g UR)                  S5      (       a  g [        R*                  " XEUR"                  S9nUR-                  U5        U$ [/        SUR"                  < S[1        U5      < 35      e)NT)	disguisedpointer_autoptrrt  zsymbol 'z
' of type )r"  r	  r   r   _create_typedef_callbackr   _create_typedef_compoundr   r  r   r  r   r  r   r   r   rk   re   rp  
type_namesr   Aliasr0  NotImplementedErrorr
   )r4   rn   rt  r^   rV   targets         r+   r  Transformer._create_typedeff  s     %%]"v'7'7'A'A'F'F.'X008D6 5 ~%008D2 1 }$)9)9)C)C)H)HL)X00Vt]a0bD. - l"00VDD* ) k!00FCD& % j $$V,,}$'!# # ((6D001A1ABFs~~%}}Z((99T>D%%f-  &,2LL*U:KLN Nr*   c                     [         R                  R                  U5      nU(       a  UR                  $ UR	                  S5      (       d  U$ US S nU R                  U5      nUS-   nU$ )NrF  r   )r   r~  rU   target_fundamentalr   _canonicalize_ctype)r4   rt  	firstpassbasecanonical_base	canonicals         r+   r  Transformer._canonicalize_ctype  sl     NN&&u-	
 ///~~c""L Sbz11$7 #S(	r*   c                     U R                  XS9nU R                  XS9nUR                  [        :H  =(       a    UR                  R
                  [        -  nU R                  XFX#US9$ )NrJ  )is_constrJ  	is_returnrf  )rH  rP  r	  r   r"  rO  r   rl  )r4   rI  rJ  r  rt  rf  rQ  s          r+   rp  "Transformer._create_type_from_base  sx    (((P::;:b""m3 O''669MM 	11%?KAO 2 Q 	Qr*   c                    US;   a6  US;   a	  SUSS  -   nOUn[         R                  " U[         R                  UX4S9$ US;   a%  [         R                  " S[         R                  UX4S9$ US;   aL  S	U;   a  SUR                  S	S5      S   -   nOSUSS  -   n[         R                  " U[         R                  UX4S9$ US
;   a3  [         R                  " [         R                  [         R                  X#US9$ g )N)GListGSListz	GLib.Listz
GLib.SList)r  r  zGLib.r   rt  r  rf  )
GByteArrayGLib.ByteArrayzGObject.ByteArrayr  )GArray	GPtrArrayz
GLib.ArrayzGLib.PtrArrayzGObject.ArrayzGObject.PtrArrayr   )
GHashTablezGLib.HashTablezGObject.HashTable)r   ListTYPE_ANYrm  
TYPE_UINT8r   Map)r4   r  rt  r  rf  rV   s         r+   _create_bare_container_type'Transformer._create_bare_container_type  s   AA**ab)88D#,,e!)J JJJ99-s~~U"*K K ; ; d{C!3A!66ab)99T3<<u"*K KJJ773<<U*8: :r*   c                    U R                  U5      nUR                  SS5      nUS;   a  SnUnU(       a  US:X  d  US:X  a;  [        R                  R	                  5       nS Ul        [        R                  " S XX%S9$ [        R                  R                  U5      n	U	b   [        R                  " U	R                  UX%S9$ U R                  XqUUS9n
U
(       a  U
$ [        R                  " XUS9$ )	NrF  r   )_Boolboolgbooleanzutf8*GStrvr  )r  rt  r  rf  )r  replacer   TYPE_STRINGclonert  rm  r~  rU   r]  r  r  )r4   rt  r  rJ  r  rf  r  r  	bare_utf8fundamental	containers              r+   rl  )Transformer.create_type_from_ctype_string  s     ,,U3	  b) ))"ID )w.47?--/I"IO99T9&.O O nn((."88{/M/M#!)J J 44TQYDR 5 T	xxe~VVr*   c                    UR                   [        :X  a*  [        R                  " S[        R                  " 5       5      $ UR
                  (       a  U R                  UR
                  SS9nOS nUR                  cM  UR
                  (       a5  UR
                  R                   [        :w  a  [        R                  " US5        SU4-  nOUR                  n[        R                  " XT5      $ )Nz...Tr  z&missing parameter name; undocumentablezarg%d)r	  r   r   	ParameterVarargsr"  rp  re   r   r   rg   )r4   r  indexrn   ptypere   s         r+   rV  Transformer._create_parameter  s    ;;//==6633F4D4DSW3X||###(8(8(=(=(K''7_`5)+==..r*   c                 N    U R                  USS9n[        R                  " U5      $ )NT)r  )rp  r   Return)r4   rI  typevals      r+   r7  Transformer._create_return  s&    --kT-Jzz'""r*   c                    UR                   R                  S5      (       a  g UR                  b   UR                  R                  S5      (       d  g U R	                  U5      nUR
                  b  [        R                  nUR
                  nGOUR                  Gb  UR                  b  U R                  UR                  5      nO[        R                  nUnU R                  U5        UR                  (       a^  UR                  (       aM  U R                  UR                  5      nU R!                  U5      n[#        U[        R$                  5      (       a  UnU[        R&                  :X  a  [)        UR                  S-  5      nGOU[        R*                  :X  a  [)        UR                  S-  5      nOU[        R,                  :X  a  [)        UR                  S-  5      nOU[        R.                  :X  a  [)        UR                  S-  5      nO[)        UR                  5      nOkUR0                  b&  [        R2                  nUR0                  (       a  SOSnO8UR4                  b!  [        R6                  nSUR4                  4-  nO
[9        5       e[        R:                  " X#UUR                   5      nUR=                  U5        U$ )	Nr   r@  l            l        i   truefalsez%f)re   r   rA  r   r  const_stringr   r  r,  r"  rp  TYPE_INT_resolve_type_from_ctyper   rt  r   resolve_aliasesrW   r]  TYPE_UINT64r  TYPE_UINT32TYPE_UINT16r  const_booleanTYPE_BOOLEANconst_doubleTYPE_DOUBLEAssertionErrorrY   r0  )r4   rn   rV   r  rK  	unaliasedr  rQ  s           r+   r  Transformer._create_const  s   <<""3'' ""*&2H2H2Q2QRV2W2W!!&)*ooG''E)+55f6F6FG,,I)))4$$++G,A,AB--f5fchh// &ICOO+F,,w67coo-F,,w67coo-F,,w67cnn,F,,w67F,,-!!-&&G$22FE  ,ooGF//22E ""TE#\\+""6*r*   c                 V   U R                  UR                  5      nUR                  (       d   eUR                  R                  (       a  UR                  R                  nOS nX`R                  ;   am  U R                  U   nUR                  (       a5  U" XRR                  US9nUR
                  Ul        UR                  U5        U$ XWl        UR                  Ul        O9U" XRR                  X4US9nU(       a  SUl        SUl	        OU R                  X'5        UR                  U5        U$ )Nri   )rx  ry  ri   T)rk   re   r"  rV   rB   fieldsr0  rt  opaquerx  r\  )	r4   compound_classrn   rx  ry  rV   ri   compoundnew_compounds	            r+   r}  $Transformer._create_typedef_compound)  s    $$V\\2  '',,HH ||#||H-H}}  .dLL8T&.oo#11&9## !%!' &dLLIiqrH #' &*" ""64%%f-r*   c                 2   UR                   U R                  ;   a  U R                  UR                      nOU" S UR                   UR                   S9nU R                  X#5        [        UR                  5      S:H  Ul        SUl        UR                  U5        U$ )Nr  r   F)re   rB   r\  r   r  r  rx  r0  r4   r  rn   r  s       r+   r  #Transformer._create_tag_ns_compoundc  s~    <<4<<'||FLL1H%dFLL6<<PH 	6, hoo.!3
 #%%f-r*   c                     U" UR                   UR                   5      nU R                  X#5        UR                  U5        U$ r0   )re   r\  r0  r  s       r+   rk  #Transformer._create_member_compoundx  s7    !&,,=6,%%f-r*   c                 8    U R                  U5      nU(       d  g U$ r0   )rj  )r4   rn   callbacks      r+   r|  $Transformer._create_typedef_callback~  s    ((0r*   c           	      ,   UR                   R                   Hz  nU R                  X1S9nU(       d  M  [        U[        R
                  5      (       a  UnO"[        R
                  " UR                  S SSUS9nUR                  R                  U5        M|     g )N)r  TF)anonymous_node)	r"  r#  rf   rW   r   rq  re   r  r]   )r4   rn   r  r$  
child_nodefields         r+   r\  Transformer._parse_fields  sv    %%00E++E+HJ*cii00"		%++tT5-79OO""5) 1r*   c                 R   UR                   R                  [        :X  a#  UR                   nUR                   R                   nOTUR                   R                  [        :X  a6  UR                   R                   nUR                   R                   R                   n[	        U R                  UW5      5      nU R                  W5      n[        U5       HD  u  pxUR                  R                  S:X  d  M!  UR                  S:X  d  M3  UR                  Ul
        MF     U(       a  UR                  n	OLUR                  R                  S5      S:  a  U R                  U5      n	OU R                  UR                  5      n	[        R                   " XUSUR                  S9n
U
R#                  U5        U
$ )NrG  r   r   r   Fr{  )r"  r	  r   r   rt   r6  r7  rU  r  argnameclosure_namere   findr  rk   r   Callbackr0  )r4   rn   re  	paramtype
retvaltyper;  retvalrW  paramrV   r  s              r+   rj  Transformer._create_callback  sI   !!^3((I))33J##}4((22I))33==J$11&)DE
$$Z0 "*-HA

--;Q\@\%*]]" . <<D\\s#a'%%f-D((6D<<j%&,ll4%%f-r*   c                     SU;   a7  U R                  U5      nU(       a  UnO-U R                  R                  U5      nOU R                  U5      nU R	                  U5        UR
                  (       a  SUl        U$ )zParse a C type string (as might be given from an
        annotation) and resolve it.  For compatibility, we can consume
both GI type string (utf8, Foo.Bar) style, as well as C (char *, FooBar) style.

Note that type resolution may not succeed.r   N)r  r2   type_from_namerl  resolve_typeresolvedrt  )r4   typestrr  r  s       r+   create_type_from_user_string(Transformer.create_type_from_user_string  sj     '>88AI#//88A88AG'" GMr*   c                     U R                   R                  5        H?  nUR                  U5      nU(       d  M  UR                  < SUR                  < 3Ul          g   gNr   TF)r=   r   get_by_ctyperV   r   )r4   r  pointer_strippedrC   r  s        r+   '_resolve_type_from_ctype_all_namespaces3Transformer._resolve_type_from_ctype_all_namespaces  sP     ..557I++,<=Fv3<>>6;;(O%	 8
 r*   c                 ~   UR                   c   eUR                   R                  SS5      n U R                  U5      nU HY  u  pEUR                  U5      nU(       d  UR                  U5      nU(       d  M7  UR                  < SUR                  < 3Ul          g   g! [         a    U R	                  X5      s $ f = f)NrF  r   r   TF)	rt  r  r   r   r  rU   r  rV   r   )r4   r  r  r   rC   rV   r  s          r+   r  $Transformer._resolve_type_from_ctype  s    }}((("==00b9	[112BCG  'OI]]4(F"//0@Av3<>>6;;(O%  '   	[??ZZ	[s   B B<;B<c                     UR                   c   eU R                  5        HP  nUR                  R                  UR                   S 5      nUc  M.  UR                  < SUR                  < 3Ul          g   gr  )
gtype_namer   r~  rU   rV   r   )r4   r  r   r^   s       r+   _resolve_type_from_gtype_name)Transformer._resolve_type_from_gtype_name  sf    !!---'')B==$$W%7%7>D3577DII(F%	 *
 r*   c                    [        U[        R                  [        R                  45      (       a  U R	                  UR
                  5      $ [        U[        R                  5      (       aA  U R	                  UR                  5      nU R	                  UR                  5      nU=(       a    U$ UR                  (       a  gUR                  (       a  U R                  U5      $ UR                  (       a  U R                  U5      $ g rP   )rW   r   rm  r  r  rs  r  key_type
value_typer  rt  r  r  r  )r4   r  key_resolvedvalue_resolveds       r+   _resolve_type_internal"Transformer._resolve_type_internal  s    g		388455$$W%9%9::)),,W-=-=>L!..w/A/ABN2N2]]009955g>>  r*   c                    U R                  U5      (       d  gUR                  (       d  UR                  (       a  gUR                  c   e U R	                  UR                  5      nUc  S Ul        UR                  $ ! [
         a    S n N$f = f)NFT)r  r  target_foreignr   r   KeyErrorr  )r4   r  type_s      r+   r  Transformer.resolve_type  s    **733%%)?)?$$000	&&w'<'<=E =$(G!  	E	s   A< <B
Bc                 r   [        U[        R                  5      (       a  UR                  R                  b&  U R                  UR                  R                  5      nO( [        R                  UR                  R                     n[        U[        R                  5      (       a  M  U$ ! [         a     U$ f = f)zRemoves all aliases from typenode, returns first non-alias
in the typenode alias chain.  Returns typenode argument if it
is not an alias.)	rW   r   r  r  r   r   r~  r  r  )r4   typenodes     r+   r  Transformer.resolve_aliases  s     399--,,8--hoo.K.KL"~~hoo.P.PQH 399--    s   'B( (
B65B6)r9   r8   r@   r>   r2   r=   r?   r;   rA   rB   r<   )FNNr0   )F)NN)FF)NFN)FFFN)=r%   r&   r'   r(   propertyrC   rG   rJ   rM   rQ   ra   rq   rv   r   r   r   r   r{   classmethodr   r|   r   r   r   r   r   r   rk   r  rf   r%  r  r
  r  rH  rP  r6  rb  r  r  r  rp  r  rl  rV  r7  r  r}  r  rk  r|  r\  rj  r  r  r  r  r  r  r  r)   r$   r*   r+   r-   r-   ,   sL   56I49?C$) &)6/>)&
<'&2  ,-R^UW: F6,:((T;,2h@2Q 7;CG4 =BDI59WB/$#.`8t*
*6* ? &r*   r-   )(r   r   r   r   r   r   r   
cachestorer   	girparserr   sourcescannerr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    	Exceptionr"   objectr-   r$   r*   r+   <module>r     sc   * 
 
     "  D D D D D D D	9 	h& hr*   