U
    e»{jgƒ  ã                
   @   sl  d dl mZ d dlZejjdk r*eefZneZeZ	dZ
dZdd„ ZdZd	Zd
Zdd„ ZeZdZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd dlZd dlZd dlZd dlZe d¡Zdddddddd d!d"œ	Zd#d$„ Z G d%d&„ d&e!ƒZ"G d'd(„ d(e!ƒZ#e$d)k�rhd dl%m&Z& e& &¡ Z'd dlZe(ej)d* ƒZ*e* +¡ Z,e#e'ƒZ-e- .e,ej)d* ¡ e- /¡ Z0e0�sX�qhe1e-j2e0ƒ �qFdS )+é    )Ú
generatorsNé   )
ZCPP_IDÚCPP_INTEGERZ	CPP_FLOATZ
CPP_STRINGZCPP_CHARÚCPP_WSZCPP_COMMENT1ZCPP_COMMENT2Z	CPP_POUNDZ
CPP_DPOUNDz+-*/%|&~^<>=!?()[]{}.,;:\'"c                 C   s   | j  j| j d¡7  _| S )z\s+Ú
©ÚlexerÚlinenoÚvalueÚcount©Út© r   úU/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/extern/ply/cpp.pyÚt_CPP_WS!   s    r   z\#z\#\#z[A-Za-z_][\w_]*c                 C   s   | S )zA(((((0x)|(0X))[0-9a-fA-F]+)|(\d+))([uU][lL]|[lL][uU]|[uU]|[lL])?)r   r   r   r   r   r   -   s    r   z?((\d+)(\.\d+)(e(\+|-)?(\d+))? | (\d+)e(\+|-)?(\d+))([lL]|[fF])?c                 C   s   | j  j| j d¡7  _| S )z\"([^\\\n]|(\\(.|\n)))*?\"r   r   r   r   r   r   Út_CPP_STRING7   s    r   c                 C   s   | j  j| j d¡7  _| S )z(L)?\'([^\\\n]|(\\(.|\n)))*?\'r   r   r   r   r   r   Ú
t_CPP_CHAR=   s    r   c                 C   s8   | j  d¡}| j j|7  _d| _|r.d| nd| _ | S )z(/\*(.|\n)*?\*/)r   r   ú )r
   r   r   r	   Útype)r   Zncrr   r   r   Út_CPP_COMMENT1C   s
     r   c                 C   s   d| _ d| _| S )z(//.*?(\n|$))r   r   )r   r
   r   r   r   r   Út_CPP_COMMENT2L   s     r   c                 C   s(   | j d | _| j d | _ | j d¡ | S ©Nr   é   )r
   r   r   Úskipr   r   r   r   Út_errorR   s    r   z\?\?[=/\'\(\)\!<>\-]ú#ú\ú^ú[ú]ú|Ú{Ú}ú~)	ú=ú/ú'ú(ú)ú!ú<ú>ú-c                 C   s   t  dd„ | ¡S )Nc                 S   s   t |  ¡ d  S ©Néÿÿÿÿ)Ú_trigraph_repÚgroup)Úgr   r   r   Ú<lambda>|   ó    ztrigraph.<locals>.<lambda>)Ú_trigraph_patÚsub)Úinputr   r   r   Útrigraph{   s    r7   c                   @   s   e Zd Zddd„ZdS )ÚMacroNFc                 C   s0   || _ || _|| _|| _|r&|d | _d | _d S r-   )Únamer
   ÚarglistÚvariadicÚvarargÚsource)Úselfr9   r
   r:   r;   r   r   r   Ú__init__�   s    
zMacro.__init__)NF)Ú__name__Ú
__module__Ú__qualname__r?   r   r   r   r   r8   Ž   s   r8   c                   @   s¨   e Zd Zd&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d„ Zdd„ Zd'dd„Zdd„ Zd(dd„Zdd„ Zdd„ Zd d!„ Zdi fd"d#„Zd$d%„ ZdS ))ÚPreprocessorNc                 C   sl   |d krt j}|| _i | _g | _g | _|  ¡  t ¡ }|  dt 	d|¡ ¡ |  dt 	d|¡ ¡ d | _
d S )Nz__DATE__ "%s"z%b %d %Yz__TIME__ "%s"z%H:%M:%S)Úlexr   ÚmacrosÚpathÚ	temp_pathÚlexprobeÚtimeÚ	localtimeÚdefineÚstrftimeÚparser)r>   r   Útmr   r   r   r?       s    zPreprocessor.__init__c                 C   s0   g }| j  |¡ | j  ¡ }|s q,| |¡ q|S ©N)r   r6   ÚtokenÚappend)r>   ÚtextÚtokensÚtokr   r   r   Útokenize¶   s    
 zPreprocessor.tokenizec                 C   s   t d|||f ƒ d S )Nz%s:%d %s)Úprint)r>   ÚfileÚlineÚmsgr   r   r   ÚerrorÅ   s    zPreprocessor.errorc              	   C   sŽ  | j  d¡ | j  ¡ }|r$|jdkr.tdƒ n|j| _| j  d¡ | j  ¡ }|r^t|jƒdkrhtdƒ n|j| _t|jƒ| _	| j  d¡ | j  ¡ }|r |jdkrªtdƒ n|j| _
| j  d¡ | j  ¡ }|rÖ|jdkrÞd | _n|j| _| j  d	¡ | j  ¡ }|�r|jd	k�rd | _td
ƒ n|j| _| j| jf| _dddddddddg	}|D ]:}| j  |¡ | j  ¡ }|�rz|j|k�rNtd| ƒ �qNd S )NÚ
identifierz"Couldn't determine identifier typeZ12345i90  zCouldn't determine integer typez
"filename"zCouldn't determine string typez  r   z%Couldn't determine token for newlinesr*   r+   r   ú##r   r'   r(   ú,Ú.z,Unable to lex '%s' required for preprocessor)r   r6   rP   r
   rV   r   Út_IDÚintÚ	t_INTEGERÚt_INTEGER_TYPEÚt_STRINGZt_SPACEZ	t_NEWLINEÚt_WS)r>   rT   ÚcharsÚcr   r   r   rH   Ñ   sD    









zPreprocessor.lexprobec                 C   s   | j  |¡ d S rO   )rF   rQ   )r>   rF   r   r   r   Úadd_path  s    zPreprocessor.add_pathc                 c   sä   | j  ¡ }dd„ | ¡ D ƒ}tt|ƒƒD ]T}|d }||  d¡r(|t|ƒk r(|| d d… ||  ||< d||< |d7 }q4q(d |¡}| |¡ d|_g }| 	¡ }|sªqÖ| 
|¡ |j| jkrœd|jkrœ|V  g }qœ|rà|V  d S )Nc                 S   s   g | ]}|  ¡ ‘qS r   )Úrstrip©Ú.0Úxr   r   r   Ú
<listcomp>  s     z,Preprocessor.group_lines.<locals>.<listcomp>r   r   r.   Ú r   )r   ÚcloneÚ
splitlinesÚxrangeÚlenÚendswithÚjoinr6   r	   rP   rQ   r   rd   r
   )r>   r6   rD   ÚlinesÚiÚjÚcurrent_linerT   r   r   r   Úgroup_lines  s*    



zPreprocessor.group_linesc                 C   st   d}|t |ƒk r*|| j| jkr*|d7 }q|d |…= t |ƒd }|dkrb|| j| jkrb|d8 }q@||d d …= |S r   )rq   r   rd   )r>   rS   ru   r   r   r   Ú
tokenstrip:  s    


zPreprocessor.tokenstripc           	      C   s€  g }g }g }d}t |ƒ}d}||k r>|| j| jkr>|d7 }q||k rd|| jdkrd| |d ¡ n |  | j|d jd¡ dg g fS |d7 }||k �r`|| }|jdkr¼| |¡ |d7 }nš|jdk�r|d8 }|dk�r|rø| |  |¡¡ | |¡ |d ||fS | |¡ nD|jdk�rL|dk�rL| |  |¡¡ | |d ¡ g }n
| |¡ |d7 }qŒ|  | j|d jd¡ dg g fS )	Nr   r   r'   zMissing '(' in macro argumentsr(   r]   r.   zMissing ')' in macro arguments)	rq   r   rd   r
   rQ   rZ   r=   r	   ry   )	r>   Z	tokenlistÚargsÚ	positionsZcurrent_argZnestingZtokenlenru   r   r   r   r   Úcollect_argsV  sD    









zPreprocessor.collect_argsc                 C   s$  g |_ g |_g |_d}|t|jƒk �r|j| j| jk�rt|j| j|jk�rt|j |j| j¡}|dkrÆ|j|d  jdkrÆt	 	|j| ¡|j|< | j
|j| _|j|d = |j ||d f¡ qn¬|dk�r|j|d  jdk�r|j  d||d f¡ |j|d = |d8 }qn^|d t|jƒk �r`|j|d  jdk�r`|j  d||f¡ |j|d = qn|j  d||f¡ nŽ|j| jdk�r|j�r|dk�r|j|d  jdk�r|d t|jƒk �r|j|d  j| jk�r|j|d  j|jk�r|j |d ¡ |d7 }q|j jdd	„ d
d� d S )Nr   r   r   r\   rf   Úer]   c                 S   s   | d S )Né   r   )rk   r   r   r   r2   ­  r3   z,Preprocessor.macro_prescan.<locals>.<lambda>T)ÚkeyÚreverse)ÚpatchÚ	str_patchÚvar_comma_patchrq   r
   r   r_   r:   ÚindexÚcopyrc   rQ   r;   r<   Úsort)r>   Úmacroru   Úargnumr   r   r   Úmacro_prescan‹  sD    ( *(ÿÿþ
zPreprocessor.macro_prescanc           
      C   s   dd„ |j D ƒ}i }|jD ]X\}}||krRdd dd„ || D ƒ¡  dd¡||< t || ¡||< || || _ qd}|jrž|d	 sž|jD ]}d ||< d
}qŒi }|jD ]^\}	}}|	dkrÐ|| |||d …< q¨|	dkr¨||krò|  || ¡||< || |||d …< q¨|�rdd„ |D ƒ}|S )Nc                 S   s   g | ]}t   |¡‘qS r   ©r…   ©rj   Z_xr   r   r   rl   ¹  s     z2Preprocessor.macro_expand_args.<locals>.<listcomp>z"%s"rm   c                 S   s   g | ]
}|j ‘qS r   ©r
   ri   r   r   r   rl   À  s     r   z\\Fr.   Trf   r   r}   c                 S   s   g | ]}|r|‘qS r   r   ©rj   Z_ir   r   r   rl   Ü  s      )	r
   r‚   rs   Úreplacer…   r;   rƒ   r�   Úexpand_macros)
r>   r‡   rz   ÚrepZstr_expansionrˆ   ru   Zcomma_patchÚexpandedÚptyper   r   r   Úmacro_expand_args·  s.    (
zPreprocessor.macro_expand_argsc                 C   sè  |d kri }d}|t |ƒk �rä|| }|j| jk�rÚ|j| jk�r¸|j|k�r¸d||j< | j|j }|js´|  dd„ |jD ƒ|¡}|D ]}|j|_q†||||d …< |t |ƒ7 }�nø|d }|t |ƒk râ|| j| jkrâ|d7 }q¼|t |ƒk �r¤|| jdk�r¤|  	||d … ¡\}	}
}|j
�sbt |
ƒt |jƒk�rb|  | j|jd|jt |jƒf ¡ ||	 }�q¬|j
�rêt |
ƒt |jƒd k �rêt |jƒdk�rº|  | j|jd	|jt |jƒd f ¡ n&|  | j|jd
|jt |jƒd f ¡ ||	 }n¸|j
�rZt |
ƒt |jƒd k�r|
 g ¡ nD|||t |jƒd   ||	 d … |
t |jƒd < |
t |jƒd …= |  ||
¡}|  ||¡}|D ]}|j|_�qv|||||	 …< |t |ƒ7 }n|d7 }||j= qn"|jdk�rÚ| j|_|  |j¡|_|d7 }q|S )Nr   Tc                 S   s   g | ]}t   |¡‘qS r   rŠ   r‹   r   r   r   rl   ÷  s     z.Preprocessor.expand_macros.<locals>.<listcomp>r   r'   zMacro %s requires %d argumentsr~   z(Macro %s must have at least %d argumentsz'Macro %s must have at least %d argumentZ__LINE__)rq   r   r_   r
   rE   r:   r�   r	   rd   r|   r;   rZ   r=   rQ   r“   ra   rb   )r>   rS   r‘   ru   r   ÚmÚexr}   rv   Útokcountrz   r{   r�   Úrr   r   r   r�   é  s^    


" (&
4
zPreprocessor.expand_macrosc                 C   sN  d}|t |ƒk �r|| j| jk�r|| jdk�r|d }d}d}|t |ƒk rä|| j| jkrl|d7 }qDnn|| j| jkrž|| j| jkr’d}nd}|sÚqän<|| jdkr²d}n(|| jd	krÄqän|  | j|| jd
¡ |d7 }qD| j	|| _|  
|¡|| _||d |d …= |d7 }q|  |¡}t|ƒD ]¤\}}|j| jk�rpt |¡||< | j	|| _|  
d¡|| _n`|j| j	k�r.t |¡||< t|| jƒ|| _|| jd dk�r.|| jd d… || _�q �q.d dd„ |D ƒ¡}| dd¡}| dd¡}| dd¡}zt|ƒ}W n0 tk
�rH   |  | j|d jd¡ d}Y nX |S )Nr   Zdefinedr   FZ0LZ1Lr'   Tr(   zMalformed defined()r.   Z0123456789abcdefABCDEFrm   c                 S   s   g | ]}t |jƒ‘qS r   ©Ústrr
   ri   r   r   r   rl   \  s     z)Preprocessor.evalexpr.<locals>.<listcomp>z&&z and z||z or r)   z not zCouldn't evaluate expression)rq   r   r_   r
   rd   rE   rZ   r=   r	   ra   rb   r�   Ú	enumerater…   r™   rs   rŽ   ÚevalÚ	Exception)r>   rS   ru   rv   Z	needparenÚresultr   Úexprr   r   r   Úevalexpr1  s^    " 


 
zPreprocessor.evalexprc                 c   s’  t |ƒ}|  |¡}|sd}|  d| ¡ || _g }d}d}g }|D �],}	t|	ƒD ]\}
}|j| jkrP qjqP|jdk�rb|	D ]$}|j| jkrzd|jkrz| |¡ qz|  	|	|
d d … ¡}|rØ|d j}|  	|dd … ¡}nd}g }|d	k�r|�r`|  
|¡D ]
}|V  qúg }|  |¡ �qp|d
k�rz|�r`|  
|¡D ]}|V  �q2g }| jd }|  |¡D ]}|V  �qX|| jd< || _�qp|dk�r´|�r`|  
|¡D ]}|V  �q”g }|  |¡ �qp|dk�rö| ||f¡ |�r`|d j| jk�rîd}d}nd}�qp|dk�r8| ||f¡ |�r`|d j| jk�r0d}d}nd}�qp|dk�rv| ||f¡ |�r`|  |¡}|�spd}d}nd}nê|dk�rØ|�rÀ|d d �rÖ|�r d}n|�sÖ|  |¡}|�rÖd}d}n|  | j|d jd¡ nˆ|dk�r*|�r|d d �r(|�rd}n|�s(d}d}n|  | j|d jd¡ n6|dk�rp|�rH| ¡ \}}n|  | j|d jd¡ n qB|rB| |	¡ qB|  
|¡D ]}|V  �q|g }d S )Nrm   z__FILE__ "%s"TFr   r   r   r   rK   ÚincludeZ__FILE__ÚundefZifdefZifndefÚifÚelifr.   zMisplaced #elifÚelsezMisplaced #elseÚendifzMisplaced #endif)r7   rx   rK   r=   rš   r   rd   r
   rQ   ry   r�   rE   r    r¡   rŸ   rZ   r	   ÚpopÚextend)r>   r6   r=   r   rt   ÚchunkÚenableZ	iftriggerZifstackrk   ru   rT   Z	dirtokensr9   rz   Zoldfiler�   r   r   r   Úparsegenl  sÄ    

 


















zPreprocessor.parsegenc           
   	   c   sŒ  |sd S |rê|d j dkr4|d j| jkr4|  |¡}|d j dkr¨d}|t|ƒk rl|| j dkrbqx|d7 }qFtdƒ d S d dd„ |d|… D ƒ¡}| jdg | j }nB|d j| jkrÞ|d j dd	… }| jdg | j }ntd
ƒ d S |D ]Œ}t	j ||¡}zbt
|dƒ ¡ }t	j |¡}|�r0| j d|¡ |  ||¡D ]}	|	V  �q<|�rX| jd= W  �qˆW qî tk
�rx   Y qîX qîtd| ƒ d S )Nr   r*   r   r+   zMalformed #include <...>rm   c                 S   s   g | ]
}|j ‘qS r   rŒ   ri   r   r   r   rl     s     z(Preprocessor.include.<locals>.<listcomp>r.   zMalformed #include statementr—   zCouldn't find '%s')r
   r   rc   r�   rq   rV   rs   rF   rG   ÚosÚopenÚreadÚdirnameÚinsertrª   ÚIOError)
r>   rS   ru   ÚfilenamerF   ÚpZinameÚdataZdnamerT   r   r   r   r    ï  sF    


zPreprocessor.includec                 C   s¸  t |tƒr|  |¡}|}�zz|d }t|ƒdkr:|d }nd }|s^t|jg ƒ}|| j|j< �n4|j| jkr”t|j|  	|dd … ¡ƒ}|| j|j< �nþ|jdk�rŠ|  
|dd … ¡\}}}d}	|D ]î}
|	rÖtdƒ  �q’d dd	„ |
D ƒ¡}|d
k�r d}	| j|
d _d|
d _d}	|
dd …= qÀnb|dd … d
k�r‚|
d j| jk�r‚d}	|
dd …= |
d jdd … d
krÀ|
d jd d… |
d _qÀt|
ƒdk�s |
d j| jkrÀtdƒ  �q’qÀ|  	|d| d … ¡}d}|t|ƒk �rX|d t|ƒk �rL|| j| jk�r||d  jdk�r||= �qÊn0|| jdk�rL||d  j| jk�rL||d = |d7 }�qÊt|j|dd	„ |D ƒ|	ƒ}|  |¡ || j|j< ntdƒ W n tk
�r²   tdƒ Y nX d S )Nr   r   r~   r'   Fz0No more arguments may follow a variadic argumentrm   c                 S   s   g | ]}t |jƒ‘qS r   r˜   r�   r   r   r   rl   :  s     z'Preprocessor.define.<locals>.<listcomp>z...TZ__VA_ARGS__éýÿÿÿzInvalid macro argumentr\   c                 S   s   g | ]}|d  j ‘qS )r   rŒ   ri   r   r   r   rl   X  s     zBad macro definition)Ú
isinstanceÚSTRING_TYPESrU   rq   r8   r
   rE   r   rd   ry   r|   rV   rs   r_   r‰   ÚLookupError)r>   rS   Zlinetokr9   Úmtyper”   r–   rz   r{   r;   ÚaZastrZmvalueru   r   r   r   rK      sl    





$
&&

zPreprocessor.definec                 C   s0   |d j }z| j|= W n tk
r*   Y nX d S )Nr   )r
   rE   r·   )r>   rS   Úidr   r   r   r¡   f  s
    
zPreprocessor.undefc                 C   s   || _ |  ||¡| _d S rO   )Úignorerª   rM   )r>   r6   r=   r»   r   r   r   Úparser  s    zPreprocessor.parsec                 C   sD   z"t | jƒ}|j| jkr|W S qW n tk
r>   d | _Y d S X d S rO   )ÚnextrM   r   r»   ÚStopIteration)r>   rT   r   r   r   rP   {  s    
 zPreprocessor.token)N)N)N)r@   rA   rB   r?   rU   rZ   rH   rg   rx   ry   r|   r‰   r“   r�   rŸ   rª   r    rK   r¡   r¼   rP   r   r   r   r   rC   Ÿ   s&   
<!5,2
H;
 1F	rC   Ú__main__r   )3Ú
__future__r   ÚsysÚversion_infoÚmajorr™   Úunicoder¶   Úrangerp   rS   Úliteralsr   Zt_CPP_POUNDZt_CPP_DPOUNDZt_CPP_IDr   Zt_CPP_INTEGERZt_CPP_FLOATr   r   r   r   r   Úrer…   rI   Úos.pathr«   Úcompiler4   r/   r7   Úobjectr8   rC   r@   Zply.lexrD   r   r¬   ÚargvÚfr­   r6   r²   r¼   rP   rT   rV   r=   r   r   r   r   Ú<module>
   sl   
	
÷     j
 