B
    0a$              
   @   s  d dl mZ d dl mZ d dl mZ d dl mZ d dl mZ d dlZd dlZd dlZddl	m
Z
 dd	lmZ dd
lmZ e
dd* dejkrd dlmZ nd dlmZ W dQ R X dddgZddddgZee Zed\
ZZZZZZZZZ Z!ed\
Z"Z#Z$Z%Z&Z'Z(Z)Z*Z+d Z,dZ-dZ.dZ/dZ0dZ1d Z2dZ3dZ4dZ5dZ6d Z7dZ8ed\Z9Z:Z;Z<Z=Z>dd Z?dd Z@G dd  d eAZBG d!d" d"eAZCG d#d$ d$eAZdS )%    )with_statement)absolute_import)division)print_function)unicode_literalsN   )LibtoolImporter)Position)	CCompilerZ UNINSTALLED_INTROSPECTION_SRCDIR)SourceScannerz.hz.hppz.hxxz.cz.cppz.ccz.cxx
                      c             C   s2   t dtdtdtdtdtdtdtdtd	t	d
i

| S )NinvalidZellipsisZconstobjectfunctionstructunionenumtypedefmember)CSYMBOL_TYPE_INVALIDCSYMBOL_TYPE_ELLIPSISCSYMBOL_TYPE_CONSTCSYMBOL_TYPE_OBJECTCSYMBOL_TYPE_FUNCTIONCSYMBOL_TYPE_STRUCTCSYMBOL_TYPE_UNIONCSYMBOL_TYPE_ENUMCSYMBOL_TYPE_TYPEDEFCSYMBOL_TYPE_MEMBERget)Zsymbol_type r&   9/usr/lib/gobject-introspection/giscanner/sourcescanner.pysymbol_type_name[   s    r(   c             C   s2   t dtdtdtdtdtdtdtdtd	t	d
i

| S )Nr   ZvoidZbasicr   r   r   r   ZpointerZarrayr   )CTYPE_INVALID
CTYPE_VOIDCTYPE_BASIC_TYPECTYPE_TYPEDEFCTYPE_STRUCTCTYPE_UNION
CTYPE_ENUMCTYPE_POINTERCTYPE_ARRAYCTYPE_FUNCTIONr%   )Zctyper&   r&   r'   
ctype_namei   s    r3   c               @   st   e Zd ZddddddgZdd Zd	d
 Zedd Zedd Zedd Z	edd Z
edd Zedd ZdS )
SourceTypetype	base_typenametype_qualifier
child_listis_bitfieldc             C   s   || _ || _d S )N)_scanner_stype)selfscannerstyper&   r&   r'   __init__{   s    zSourceType.__init__c             C   s   d| j jt| j| jf S )Nz<%s type='%s' name='%s'>)	__class____name__r3   r5   r7   )r=   r&   r&   r'   __repr__   s    zSourceType.__repr__c             C   s   | j jS )N)r<   r5   )r=   r&   r&   r'   r5      s    zSourceType.typec             C   s    | j jd k	rt| j| j jS d S )N)r<   r6   r4   r;   )r=   r&   r&   r'   r6      s    zSourceType.base_typec             C   s   | j jS )N)r<   r7   )r=   r&   r&   r'   r7      s    zSourceType.namec             C   s   | j jS )N)r<   r8   )r=   r&   r&   r'   r8      s    zSourceType.type_qualifierc             c   s.   x(| j jD ]}|d krq
t| j|V  q
W d S )N)r<   r9   SourceSymbolr;   )r=   symbolr&   r&   r'   r9      s    zSourceType.child_listc             C   s   | j jS )N)r<   r:   )r=   r&   r&   r'   r:      s    zSourceType.is_bitfieldN)rB   
__module____qualname____members__r@   rC   propertyr5   r6   r7   r8   r9   r:   r&   r&   r&   r'   r4   w   s   r4   c               @   s   e Zd ZdddddddgZdd	 Zd
d Zedd Zedd Zedd Z	edd Z
edd Zedd Zedd Zedd Zedd Zedd Zed d! Zd"S )#rD   	const_intconst_doubleconst_stringconst_booleanidentr5   r6   c             C   s   || _ || _d S )N)r;   _symbol)r=   r>   rE   r&   r&   r'   r@      s    zSourceSymbol.__init__c             C   s>   | j }|r"| j}|r"|d|f 7 }d| jjt| j| j|f S )Nz:'%s'z"<%s type='%s' ident='%s' src='%s'>)source_filenamelinerA   rB   r(   r5   rN   )r=   srcrQ   r&   r&   r'   rC      s    zSourceSymbol.__repr__c             C   s   | j jS )N)rO   rJ   )r=   r&   r&   r'   rJ      s    zSourceSymbol.const_intc             C   s   | j jS )N)rO   rK   )r=   r&   r&   r'   rK      s    zSourceSymbol.const_doublec             C   s   | j jS )N)rO   rL   )r=   r&   r&   r'   rL      s    zSourceSymbol.const_stringc             C   s   | j jS )N)rO   rM   )r=   r&   r&   r'   rM      s    zSourceSymbol.const_booleanc             C   s   | j jS )N)rO   rN   )r=   r&   r&   r'   rN      s    zSourceSymbol.identc             C   s   | j jS )N)rO   r5   )r=   r&   r&   r'   r5      s    zSourceSymbol.typec             C   s    | j jd k	rt| j| j jS d S )N)rO   r6   r4   r;   )r=   r&   r&   r'   r6      s    zSourceSymbol.base_typec             C   s   | j jS )N)rO   rP   )r=   r&   r&   r'   rP      s    zSourceSymbol.source_filenamec             C   s   | j jS )N)rO   rQ   )r=   r&   r&   r'   rQ      s    zSourceSymbol.linec             C   s   | j jS )N)rO   private)r=   r&   r&   r'   rS      s    zSourceSymbol.privatec             C   s   t | jj| jjS )N)r	   rO   rP   rQ   )r=   r&   r&   r'   position   s    zSourceSymbol.positionN)rB   rF   rG   rH   r@   rC   rI   rJ   rK   rL   rM   rN   r5   r6   rP   rQ   rS   rT   r&   r&   r&   r'   rD      s   
rD   c               @   sX   e Zd Zdd Zg fddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )r   c             C   s   t  | _g | _g | _d S )N)CSourceScannerr;   
_filenames_cpp_options)r=   r&   r&   r'   r@      s    zSourceScanner.__init__c       	      C   sn   | j | x\ddd |D fd|fd|fgD ]8\}}x.|p>g D ]"}|| }|| j kr@| j | q@W q.W d S )Nz-Ic             S   s   g | ]}t j|qS r&   )ospathrealpath).0fr&   r&   r'   
<listcomp>   s    z1SourceScanner.set_cpp_options.<locals>.<listcomp>z-Dz-U)rW   extendappend)	r=   ZincludesdefinesZ	undefinesZcflagsprefixargsargZoptr&   r&   r'   set_cpp_options   s    
zSourceScanner.set_cpp_optionsc             C   s   x0|D ](}t j|}| j| | j| qW g }x:| jD ]0}t j|d tkrd| j	| q>|| q>W | 
| d S )Nr   )rX   rY   rZ   r;   Zappend_filenamerV   r_   splitextSOURCE_EXTSZlex_filename_parse)r=   	filenamesfilenameZheadersr&   r&   r'   parse_files   s    
zSourceScanner.parse_filesc             C   s2   | j d | j dd |D  | j d d S )NTc             S   s   g | ]}t j|qS r&   )rX   rY   rZ   )r[   r\   r&   r&   r'   r]     s    z.SourceScanner.parse_macros.<locals>.<listcomp>F)r;   Zset_macro_scanparse_macros)r=   rh   r&   r&   r'   rk     s    zSourceScanner.parse_macrosc             c   s&   x | j  D ]}t| j |V  qW d S )N)r;   get_symbolsrD   )r=   rE   r&   r&   r'   rl     s    zSourceScanner.get_symbolsc             C   s
   | j  S )N)r;   get_comments)r=   r&   r&   r'   rm     s    zSourceScanner.get_commentsc             C   s4   t d x&| j D ]}t |j|jj|j qW d S )Nz------------------------------)printr;   rl   rN   r6   r7   r5   )r=   rE   r&   r&   r'   dump  s    zSourceScanner.dumpc          	   C   s   |sd S dg}g }t  }tjddt d\}}t|d}| |||| W d Q R X tjtj	|d }|d }	|
||	| j t| t|	d}
| j|
  |
  t|	 d S )	NZ__GI_SCANNER__z	g-ir-cpp-z.c)ra   suffixdirwbr   z.ir)r
   tempfileZmkstemprX   getcwdfdopen_write_preprocess_srcrY   basenamere   Z
preprocessrW   unlinkopenr;   Z
parse_filefilenoclose)r=   rh   r`   undefsZccZ
tmp_fd_cppZtmp_name_cppZfp_cppZtmpfile_basenameZtmpfile_outputfpr&   r&   r'   rg     s(    

zSourceScanner._parsec             C   s   xB|D ]:}| d|f   | d|f   | d  qW x |D ]}| d|f   qJW x |D ]}| d|f   qlW d S )Nz#ifndef %s
z# define %s
z#endif
z
#undef %s
z#include <%s>
)writeencode)r=   r~   r`   r}   rh   ZdefineZundefri   r&   r&   r'   rw   <  s    


z#SourceScanner._write_preprocess_srcN)rB   rF   rG   r@   rd   rj   rk   rl   rm   ro   rg   rw   r&   r&   r&   r'   r      s   
 r   )DZ
__future__r   r   r   r   r   rX   
subprocessrt   Zlibtoolimporterr   messager	   Z	ccompilerr
   environZ
_giscannerr   rU   Zgiscanner._giscannerZHEADER_EXTSrf   ZALL_EXTSranger   r   r   r   r   r    r!   r"   r#   r$   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   ZSTORAGE_CLASS_NONEZSTORAGE_CLASS_TYPEDEFZSTORAGE_CLASS_EXTERNZSTORAGE_CLASS_STATICZSTORAGE_CLASS_AUTOZSTORAGE_CLASS_REGISTERZTYPE_QUALIFIER_NONEZTYPE_QUALIFIER_CONSTZTYPE_QUALIFIER_RESTRICTZTYPE_QUALIFIER_VOLATILEZTYPE_QUALIFIER_EXTENSIONZFUNCTION_NONEZFUNCTION_INLINEZUNARY_ADDRESS_OFZUNARY_POINTER_INDIRECTIONZ
UNARY_PLUSZUNARY_MINUSZUNARY_BITWISE_COMPLEMENTZUNARY_LOGICAL_NEGATIONr(   r3   r   r4   rD   r&   r&   r&   r'   <module>   sL   

+C