o
    "“i‚  ã                
   @   s\  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r¬d 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+ -¡ Z.e.s¥dS e/e+j0e.ƒ q�dS )*é    Né   )
ÚCPP_IDÚCPP_INTEGERÚ	CPP_FLOATÚ
CPP_STRINGÚCPP_CHARÚCPP_WSÚCPP_COMMENT1ÚCPP_COMMENT2Ú	CPP_POUNDÚ
CPP_DPOUNDz+-*/%|&~^<>=!?()[]{}.,;:\'"c                 C   ó   | j  j| j d¡7  _| S )z\s+Ú
©ÚlexerÚlinenoÚvalueÚcount©Út© r   úQ/var/www/html/premium_crap/venv/lib/python3.10/site-packages/pycparser/ply/cpp.pyÚt_CPP_WS   ó   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   r   )z\"([^\\\n]|(\\(.|\n)))*?\"r   r   r   r   r   r   Út_CPP_STRING5   r   r   c                 C   r   )z(L)?\'([^\\\n]|(\\(.|\n)))*?\'r   r   r   r   r   r   Ú
t_CPP_CHAR;   r   r   c                 C   s>   | j  d¡}| j j|7  _d| _|rd| | _ | S d| _ | S )z(/\*(.|\n)*?\*/)r   r   ú )r   r   r   r   Útype)r   Úncrr   r   r   Út_CPP_COMMENT1A   s   ÿr   c                 C   s   d| _ d| _| S )z(//.*?(\n|$))r   r   )r   r   r   r   r   r   Út_CPP_COMMENT2J   s   r    c                 C   s(   | j d | _| j d | _ | j d¡ | S ©Nr   é   )r   r   r   Úskipr   r   r   r   Út_errorP   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   s    ztrigraph.<locals>.<lambda>)Ú_trigraph_patÚsub)Úinputr   r   r   Útrigraphy   ó   r@   c                   @   s   e Zd Zddd„ZdS )ÚMacroNFc                 C   s0   || _ || _|| _|| _|r|d | _d | _d S r7   )Únamer   ÚarglistÚvariadicÚvarargÚsource)ÚselfrC   r   rD   rE   r   r   r   Ú__init__�   s   

zMacro.__init__)NF)Ú__name__Ú
__module__Ú__qualname__rI   r   r   r   r   rB   Œ   s    rB   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 u 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)rH   r   Útmr   r   r   rI   ž   s   
zPreprocessor.__init__c                 C   s0   g }| j  |¡ 	 | j  ¡ }|s|S | |¡ q	©N)r   r?   ÚtokenÚappend)rH   ÚtextÚtokensÚtokr   r   r   Útokenize´   s   

ÿýzPreprocessor.tokenizec                 C   s   t d|||f ƒ d S )Nz%s:%d %s)Úprint)rH   ÚfileÚlineÚmsgr   r   r   ÚerrorÃ   s   zPreprocessor.errorc                 C   sv  | j  d¡ | j  ¡ }|r|jdkrtdƒ n|j| _| j  d¡ | j  ¡ }|r/t|jƒdkr4tdƒ n
|j| _t|jƒ| _	| j  d¡ | j  ¡ }|rP|jdkrUtdƒ n|j| _
| j  d¡ | j  ¡ }|rk|jdkrod | _n|j| _| j  d	¡ | j  ¡ }|r…|jd	kr�d | _td
ƒ n|j| _| j| jf| _g d¢}|D ]}| j  |¡ | j  ¡ }|r²|j|kr¸td| ƒ qžd S )NÚ
identifierz"Couldn't determine identifier typeÚ12345i90  zCouldn't determine integer typez
"filename"zCouldn't determine string typez  r   z%Couldn't determine token for newlines)	r4   r5   r%   ú##r&   r1   r2   ú,Ú.z,Unable to lex '%s' required for preprocessor)r   r?   rZ   r   r`   r   Út_IDÚintÚ	t_INTEGERÚt_INTEGER_TYPEÚt_STRINGÚt_SPACEÚ	t_NEWLINEÚt_WS)rH   r^   ÚcharsÚcr   r   r   rR   Ï   sH   









€üzPreprocessor.lexprobec                 C   s   | j  |¡ d S rY   )rP   r[   )rH   rP   r   r   r   Úadd_path  rA   zPreprocessor.add_pathc                 c   s  � | j  ¡ }dd„ | ¡ D ƒ}tt|ƒƒD ]6}|d }||  d¡rK|t|ƒk rK|| d d… ||  ||< d||< |d7 }||  d¡rK|t|ƒk s(qd |¡}| |¡ d|_g }	 | 	¡ }|scn| 
|¡ |j| jv rxd|jv rx|V  g }q\|r€|V  d S d S )Nc                 S   s   g | ]}|  ¡ ‘qS r   )Úrstrip©Ú.0Úxr   r   r   Ú
<listcomp>  ó    z,Preprocessor.group_lines.<locals>.<listcomp>r"   r&   r8   Ú r   )r   ÚcloneÚ
splitlinesÚxrangeÚlenÚendswithÚjoinr?   r   rZ   r[   r   rq   r   )rH   r?   rN   ÚlinesÚiÚjÚcurrent_liner^   r   r   r   Úgroup_lines  s6   €
ý€


ù	
ÿzPreprocessor.group_linesc                 C   s¤   d}|t |ƒk r"|| j| jv r"|d7 }|t |ƒk r"|| j| jv s|d |…= t |ƒd }|dkrI|| j| jv rI|d8 }|dkrI|| j| jv s9||d d …= |S r!   )r   r   rq   )rH   r]   rƒ   r   r   r   Ú
tokenstrip8  s   ÿ
ÿzPreprocessor.tokenstripc           	      C   s’  g }g }g }d}t |ƒ}d}||k r*|| j| jv r*|d7 }||k r*|| j| jv s||k r=|| jdkr=| |d ¡ n|  | j|d jd¡ dg g fS |d7 }||k r¹|| }|jdkrh| |¡ |d7 }nI|jdkr‘|d8 }|dkr‹|r„| |  |¡¡ | |¡ |d ||fS | |¡ n |jdkr¬|dkr¬| |  |¡¡ | |d ¡ g }n| |¡ |d7 }||k sU|  | j|d jd¡ dg g fS )	Nr"   r   r1   zMissing '(' in macro argumentsr2   rh   r8   zMissing ')' in macro arguments)	r   r   rq   r   r[   rd   rG   r   r‡   )	rH   Ú	tokenlistÚargsÚ	positionsÚcurrent_argÚnestingÚtokenlenrƒ   r   r   r   r   Úcollect_argsT  sH   ÿ






í
zPreprocessor.collect_argsc                 C   s  g |_ g |_g |_d}|t|jƒk rõ|j| j| jkrª|j| j|jv rª|j |j| j¡}|dkr_|j|d  jdkr_t	 	|j| ¡|j|< | j
|j| _|j|d = |j ||d f¡ q|dkr|j|d  jdkr|j  d||d f¡ |j|d = q|d t|jƒk r |j|d  jdkr |j  d||f¡ |d7 }q|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 }|t|jƒk s|j jdd	„ d
d� d S )Nr   r"   r%   rg   rs   Úerh   c                 S   s   | d S )Né   r   )rx   r   r   r   r<   ª  s    z,Preprocessor.macro_prescan.<locals>.<lambda>T)ÚkeyÚreverse)ÚpatchÚ	str_patchÚvar_comma_patchr   r   r   rj   rD   ÚindexÚcopyrn   r[   rE   rF   Úsort)rH   Úmacrorƒ   Úargnumr   r   r   Úmacro_prescan‰  s<   $&"(åzPreprocessor.macro_prescanc           
      C   s  dd„ |j D ƒ}i }|jD ],\}}||vr)dd dd„ || D ƒ¡  dd¡||< t || ¡||< || || _ qd}|jrO|d	 sO|jD ]}d ||< d
}qFi }|jD ]/\}	}}|	dkrh|| |||d …< qT|	dkrƒ||vry|  || ¡||< || |||d …< qT|r�dd„ |D ƒ}|S )Nc                 S   ó   g | ]}t   |¡‘qS r   ©r—   ©rw   Ú_xr   r   r   ry   ¶  ó    z2Preprocessor.macro_expand_args.<locals>.<listcomp>z"%s"r{   c                 S   ó   g | ]}|j ‘qS r   ©r   rv   r   r   r   ry   ½  ó    r&   z\\Fr8   Trs   r"   r�   c                 S   s   g | ]}|r|‘qS r   r   ©rw   Ú_ir   r   r   ry   Ù  rz   )	r   r”   r�   Úreplacer—   rE   r•   r“   Úexpand_macros)
rH   r™   r‰   ÚrepÚstr_expansionrš   rƒ   Úcomma_patchÚexpandedÚptyper   r   r   Úmacro_expand_args´  s0   (
€zPreprocessor.macro_expand_argsc                 C   sä  |d u ri }d}|t |ƒk �rp|| }|j| jk�rf|j| jv �rU|j|v�rUd||j< | j|j }|jsY|  dd„ |jD ƒ|¡}|D ]}|j|_qC||||d …< |t |ƒ7 }n÷|d }|t |ƒk r}|| j| jv r}|d7 }|t |ƒk r}|| j| jv sk|| jdk�rP|  	||d … ¡\}	}
}|j
s³t |
ƒt |jƒkr³|  | j|jd|jt |jƒf ¡ ||	 }n�|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
�r,t |
ƒt |jƒd k�r
|
 g ¡ n"|||t |jƒd   ||	 d … |
t |jƒd < |
t |jƒd …= |  ||
¡}|  ||¡}|D ]}|j|_�q:|||||	 …< |t |ƒ7 }||j= q|jdk�rf| j|_|  |j¡|_|d7 }|t |ƒk s|S )Nr   Tc                 S   rœ   r   r�   rž   r   r   r   ry   ô  r    z.Preprocessor.expand_macros.<locals>.<listcomp>r"   r1   zMacro %s requires %d argumentsr�   z(Macro %s must have at least %d argumentsz'Macro %s must have at least %d argumentÚ__LINE__)r   r   rj   r   rO   rD   r§   r   rq   rŽ   rE   rd   rG   r[   r­   rl   rm   )rH   r]   r«   rƒ   r   ÚmÚexr�   r„   Útokcountr‰   rŠ   r¨   Úrr   r   r   r§   æ  s`   

ÿ"
(&
4Ì5zPreprocessor.expand_macrosc                 C   s\  d}|t |ƒk r“|| j| jkr‰|| jdkr‰|d }d}d}|t |ƒk rr|| j| jv r2|d7 }q|| j| jkrK|| j| jv rEd}nd}|sJn(n|| jdkrUd}n|| jd	kr]n|  | j|| jd
¡ |d7 }|t |ƒk s%| j	|| _|  
|¡|| _||d |d …= |d7 }|t |ƒk s|  |¡}t|ƒD ]U\}}|j| jkr¼t |¡||< | j	|| _|  
d¡|| _qœ|j| j	krñt |¡||< t|| jƒ|| _|| jd dvrñ|| jd d… || _|| jd dvsÜqœd dd„ |D ƒ¡}| dd¡}| dd¡}| dd¡}zt|ƒ}W |S  t�y-   |  | j|d jd¡ d}Y |S w )Nr   Údefinedr"   FÚ0LÚ1Lr1   Tr2   zMalformed defined()r8   Ú0123456789abcdefABCDEFr{   c                 S   ó   g | ]}t |jƒ‘qS r   ©Ústrr   rv   r   r   r   ry   S  r    z)Preprocessor.evalexpr.<locals>.<listcomp>z&&z and z||z or r3   z not zCouldn't evaluate expression)r   r   rj   r   rq   rO   rd   rG   r   rl   rm   r§   Ú	enumerater—   r¹   r�   r¦   ÚevalÚ	Exception)rH   r]   rƒ   r„   Ú	needparenÚresultr   Úexprr   r   r   Úevalexpr(  sh   ðç
ÿ€
ýýzPreprocessor.evalexprc                 c   sv  � t |ƒ}|  |¡}|sd}|  d| ¡ || _g }d}d}g }|D �]‡}	t|	ƒD ]\}
}|j| jvr5 nq)|jdk�r¢|	D ]}|j| jv rPd|jv rP| |¡ q>|  	|	|
d d … ¡}|rm|d j}|  	|dd … ¡}nd}g }|d	krŠ|r‰|  
|¡D ]}|V  q|g }|  |¡ q"|d
kr¶|rµ|  
|¡D ]}|V  q•g }| jd }|  |¡D ]}|V  q§|| jd< || _q"|dkrÏ|rÎ|  
|¡D ]}|V  qÁg }|  |¡ q"|dkrì| ||f¡ |rë|d j| jvréd}d}q"d}q"|dk�r| ||f¡ |�r|d j| jv �r	d}d}q"d}q"|dk�r+| ||f¡ |�r*|  |¡}|�s(d}d}q"d}q"|dk�r\|�rP|d d �rO|�r@d}q"|�sO|  |¡}|�rOd}d}q"|  | j|d jd¡ q"|dk�r…|�ry|d d �rx|�rqd}q"|�sxd}d}q"|  | j|d jd¡ q"|dk�r |�r”| ¡ \}}q"|  | j|d jd¡ q"	 q"|�rª| |	¡ q"|  
|¡D ]}|V  �q°g }d S )Nr{   z__FILE__ "%s"TFr%   r   r"   r   rU   ÚincludeÚ__FILE__ÚundefÚifdefÚifndefÚifÚelifr8   zMisplaced #elifÚelsezMisplaced #elseÚendifzMisplaced #endif)r@   r†   rU   rG   rº   r   rq   r   r[   r‡   r§   rO   rÁ   rÃ   rÀ   rd   r   ÚpopÚextend)rH   r?   rG   r   r‚   ÚchunkÚenableÚ	iftriggerÚifstackrx   rƒ   r^   Ú	dirtokensrC   r‰   Úoldfiler¾   r   r   r   Úparsegenc  sØ   €


€

€

€
€€
€

€

€
€

€
zPreprocessor.parsegenc           
   	   c   sˆ  � |sd S |r{|d j dkr|d j| jkr|  |¡}|d j dkrZd}|t|ƒk r<|| j dkr2n|d7 }|t|ƒk s*tdƒ d S d dd„ |d|… D ƒ¡}| jdg | j }n!|d j| jkru|d j dd	… }| jdg | j }ntd
ƒ d S |D ]>}t	j ||¡}z,t
|dƒ ¡ }t	j |¡}|r�| j d|¡ |  ||¡D ]}	|	V  q£|r¯| jd= W  d S  ty»   Y q}w td| ƒ d S )Nr   r4   r"   r5   zMalformed #include <...>r{   c                 S   r¡   r   r¢   rv   r   r   r   ry   ø  r£   z(Preprocessor.include.<locals>.<listcomp>r8   zMalformed #include statementr²   zCouldn't find '%s')r   r   rn   r§   r   r`   r�   rP   rQ   ÚosÚopenÚreadÚdirnameÚinsertrÒ   ÚIOError)
rH   r]   rƒ   ÚfilenamerP   ÚpÚinameÚdataÚdnamer^   r   r   r   rÁ   æ  sL   €
ýÿzPreprocessor.includec                 C   sÀ  t |tƒr
|  |¡}|}�zC|d }t|ƒdkr|d }nd }|s0t|jg ƒ}|| j|j< W d S |j| jv rLt|j|  	|dd … ¡ƒ}|| j|j< W d S |jdk�rJ|  
|dd … ¡\}}}d}	|D ]p}
|	rltdƒ  nØd dd	„ |
D ƒ¡}|d
kr�d}	| j|
d _d|
d _d}	|
dd …= qb|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 _qbt|
ƒdksÌ|
d j| jkrÒtdƒ  nuqb|  	|d| d … ¡}d}|t|ƒk �r)|d t|ƒk �r|| j| jv �r||d  jdk�r||= qà|| jdk�r||d  j| jv �r||d = |d7 }|t|ƒk sçt|j|dd	„ |D ƒ|	ƒ}|  |¡ || j|j< W d S W d S W d S tdƒ W d S  t�y_   tdƒ Y d S w )Nr   r"   r�   r1   Fz0No more arguments may follow a variadic argumentr{   c                 S   r·   r   r¸   r¤   r   r   r   ry   1  r    z'Preprocessor.define.<locals>.<listcomp>z...TÚ__VA_ARGS__éýÿÿÿzInvalid macro argumentrg   c                 S   s   g | ]}|d  j ‘qS )r   r¢   rv   r   r   r   ry   O  r    zBad macro definition)Ú
isinstanceÚSTRING_TYPESr_   r   rB   r   rO   r   rq   r‡   rŽ   r`   r�   rj   r›   ÚLookupError)rH   r]   ÚlinetokrC   Úmtyper¯   r±   r‰   rŠ   rE   ÚaÚastrÚmvaluerƒ   r   r   r   rU     sv   




 
þ&&
ù
ßÿzPreprocessor.definec                 C   s.   |d j }z| j|= W d S  ty   Y d S w )Nr   )r   rO   râ   )rH   r]   Úidr   r   r   rÃ   ]  s   
ÿzPreprocessor.undefc                 C   s   || _ |  ||¡| _d S rY   )ÚignorerÒ   rW   )rH   r?   rG   ré   r   r   r   Úparsei  s   zPreprocessor.parsec                 C   s<   z	 t | jƒ}|j| jvr|W S q ty   d | _Y d S w rY   )ÚnextrW   r   ré   ÚStopIteration)rH   r^   r   r   r   rZ   r  s   
þþzPreprocessor.tokenrY   )rJ   rK   rL   rI   r_   rd   rR   rt   r†   r‡   rŽ   r›   r­   r§   rÀ   rÒ   rÁ   rU   rÃ   rê   rZ   r   r   r   r   rM   �   s(    
<!5+
2B
; 1F	rM   Ú__main__r"   )1ÚsysÚversion_infoÚmajorr¹   Úunicoderá   Úranger~   r]   Úliteralsr   Út_CPP_POUNDÚt_CPP_DPOUNDÚt_CPP_IDr   Út_CPP_INTEGERÚt_CPP_FLOATr   r   r   r    r$   Úrer—   rS   Úos.pathrÓ   Úcompiler=   r9   r@   ÚobjectrB   rM   rJ   Úply.lexrN   r   rÔ   ÚargvÚfrÕ   r?   rÚ   rê   rZ   r^   r`   rG   r   r   r   r   Ú<module>   sp   	
	
÷     cýõ