a ‚oe‚ã @s`ddlZejjdkreefZneZeZdZdZ dd„Z dZ dZ d Z d d „ZeZd Zd d„Zdd„Zdd„Zdd„Zdd„ZddlZddlZddlZddlZe d¡Zddddddddd d!œ Zd"d#„ZGd$d%„d%eƒZ Gd&d'„d'eƒZ!e"d(k�r\ddl#m$Z$e$ $¡Z%ddlZe&ej'd)ƒZ(e( )¡Z*e!e%ƒZ+e+ ,e*ej'd)¡e+ -¡Z.e.�sL�q\e/e+j0e.ƒ�q:dS)*éNé) ZCPP_IDÚ CPP_INTEGERZ CPP_FLOATZ CPP_STRINGZCPP_CHARÚCPP_WSZ CPP_COMMENT1Z CPP_COMMENT2Z CPP_POUNDZ CPP_DPOUNDz+-*/%|&~^<>=!?()[]{}.,;:\'"cCs|jj|j d¡7_|S)z\s+Ú ©ÚlexerÚlinenoÚvalueÚcount©Út©r ú2C:\Program Files\Certbot\pkgs\pycparser\ply\cpp.pyÚt_CPP_WSsrz\#z\#\#z[A-Za-z_][\w_]*cCs|S)zA(((((0x)|(0X))[0-9a-fA-F]+)|(\d+))([uU][lL]|[lL][uU]|[uU]|[lL])?)r r r r rr+srz?((\d+)(\.\d+)(e(\+|-)?(\d+))? | (\d+)e(\+|-)?(\d+))([lL]|[fF])?cCs|jj|j d¡7_|S)z\"([^\\\n]|(\\(.|\n)))*?\"rrr r r rÚ t_CPP_STRING5srcCs|jj|j d¡7_|S)z(L)?\'([^\\\n]|(\\(.|\n)))*?\'rrr r r rÚ t_CPP_CHAR;srcCs8|j d¡}|jj|7_d|_|r.d|nd|_|S)z(/\*(.|\n)*?\*/)rrú )r r rrÚtype)r Zncrr r rÚt_CPP_COMMENT1As rcCsd|_d|_|S)z (//.*?(\n|$))rr)rr r r r rÚt_CPP_COMMENT2Js rcCs(|jd|_|jd|_|j d¡|S©Nré)r rrÚskipr r r rÚt_errorPs   rz\?\?[=/\'\(\)\!<>\-]ú#ú\ú^ú[ú]ú|Ú{Ú}ú~) ú=ú/ú'ú(ú)ú!ú<ú>ú-cCst dd„|¡S)NcSst| ¡dS©Néÿÿÿÿ)Ú _trigraph_repÚgroup)Úgr r rÚzóztrigraph..)Ú _trigraph_patÚsub)Úinputr r rÚtrigraphysr6c@seZdZddd„ZdS)ÚMacroNFcCs0||_||_||_||_|r&|d|_d|_dSr,)Únamer ÚarglistÚvariadicÚvarargÚsource)Úselfr8r r9r:r r rÚ__init__�s zMacro.__init__)NF)Ú__name__Ú __module__Ú __qualname__r>r r r rr7Œsr7c@s¨eZdZd&dd„Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z d'dd„Z dd„Zd(dd„Zdd„Zdd„Zd d!„Zdifd"d#„Zd$d%„ZdS))Ú PreprocessorNcCsl|durtj}||_i|_g|_g|_| ¡t ¡}| dt  d|¡¡| dt  d|¡¡d|_ dS)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=rZtmr r rr>žszPreprocessor.__init__cCs0g}|j |¡|j ¡}|s q,| |¡q|S©N)rr5ÚtokenÚappend)r=ÚtextÚtokensÚtokr r rÚtokenize´s    zPreprocessor.tokenizecCstd|||fƒdS)Nz%s:%d %s)Úprint)r=ÚfileÚlineÚmsgr r rÚerrorÃszPreprocessor.errorcCs€|j d¡|j ¡}|r$|jdkr.tdƒn|j|_|j d¡|j ¡}|r^t|jƒdkrhtdƒn|j|_t|jƒ|_ |j d¡|j ¡}|r |jdkrªtdƒn|j|_ |j d¡|j ¡}|rÖ|jdkrÞd|_ n|j|_ |j d ¡|j ¡}|�r|jd k�rd|_ td ƒn|j|_ |j |j f|_ gd ¢}|D]:}|j |¡|j ¡}|�rl|j|k�r@td |ƒ�q@dS) NZ identifierz"Couldn't determine identifier typeZ12345i90zCouldn't determine integer typez "filename"zCouldn't determine string typez rz%Couldn't determine token for newlines) r)r*rú##rr&r'ú,Ú.z,Unable to lex '%s' required for preprocessor)rr5rNr rTrÚt_IDÚintÚ t_INTEGERÚt_INTEGER_TYPEÚt_STRINGZt_SPACEZ t_NEWLINEÚt_WS)r=rRÚcharsÚcr r rrGÏsD                 zPreprocessor.lexprobecCs|j |¡dSrM)rErO)r=rEr r rÚadd_path szPreprocessor.add_pathccsä|j ¡}dd„| ¡Dƒ}tt|ƒƒD]T}|d}|| d¡r(|t|ƒkr(||dd…||||<d||<|d7}q4q(d |¡}| |¡d|_g}|  ¡}|sªqÖ|  |¡|j |j vrœd|j vrœ|Vg}qœ|rà|VdS)NcSsg|] }| ¡‘qSr )Úrstrip©Ú.0Úxr r rÚ r2z,Preprocessor.group_lines..rrr-Úr)rZcloneÚ splitlinesÚxrangeÚlenÚendswithÚjoinr5rrNrOrrar )r=r5rCÚlinesÚiÚjZ current_linerRr r rÚ group_liness*     zPreprocessor.group_linescCstd}|t|ƒkr*||j|jvr*|d7}q|d|…=t|ƒd}|dkrb||j|jvrb|d8}q@||dd…=|Sr)rmrra)r=rQrqr r rÚ tokenstrip8s    zPreprocessor.tokenstripc Cs€g}g}g}d}t|ƒ}d}||kr>||j|jvr>|d7}q||krd||jdkrd| |d¡n | |j|djd¡dggfS|d7}||k�r`||}|jdkr¼| |¡|d7}nš|jdk�r|d8}|dk�r|rø| | |¡¡| |¡|d||fS| |¡nD|jdk�rL|dk�rL| | |¡¡| |d¡g}n | |¡|d7}qŒ| |j|djd¡dggfS) Nrrr&zMissing '(' in macro argumentsr'rZr-zMissing ')' in macro arguments) rmrrar rOrXr<rrt) r=Z tokenlistÚargsÚ positionsZ current_argZnestingZtokenlenrqr r r rÚ collect_argsTsD            zPreprocessor.collect_argscCsg|_g|_g|_d}|t|jƒk�r|j|j|jk�rh|j|j|jv�rh|j |j|j¡}|dkrÆ|j|djdkrÆt   |j|¡|j|<|j |j|_|j|d=|j  ||df¡qn |dk�r |j|djdk�r |j  d||df¡|j|d=qnZ|dt|jƒk�rT|j|djdk�rT|j  d||f¡|d7}qn|j  d||f¡nŽ|j|jdk�rö|j �rö|dk�rö|j|djdk�rö|dt|jƒk�rö|j|dj|jk�rö|j|dj|j k�rö|j  |d¡|d7}q|jjdd „d d �dS) NrrrrYrcÚerZcSs|dS)Nér )rhr r rr1ªr2z,Preprocessor.macro_prescan..T)ÚkeyÚreverse)ÚpatchÚ str_patchÚvar_comma_patchrmr rr\r9ÚindexÚcopyr`rOr:r;Úsort)r=ÚmacrorqÚargnumr r rÚ macro_prescan‰sB(   *(ÿÿþ zPreprocessor.macro_prescanc Cs dd„|jDƒ}i}|jD]X\}}||vrRdd dd„||Dƒ¡ dd¡||<t ||¡||<||||_qd}|jrž|d sž|jD]}d||<d }qŒi}|jD]^\} }}| d krÐ|||||d …<q¨| d kr¨||vrò| ||¡||<|||||d …<q¨|�rdd„|Dƒ}|S)NcSsg|]}t |¡‘qSr ©r€©rgZ_xr r rri¶r2z2Preprocessor.macro_expand_args..z"%s"rjcSsg|] }|j‘qSr ©r rfr r rri½r2rz\\Fr-TrcrrxcSsg|] }|r|‘qSr r ©rgZ_ir r rriÙr2) r r}roÚreplacer€r:r~r|Ú expand_macros) r=r‚ruÚrepZ str_expansionrƒrqZ comma_patchÚexpandedZptyper r rÚmacro_expand_args´s.( zPreprocessor.macro_expand_argscCsÐ|dur i}d}|t|ƒk�rÌ||}|j|jk�rÂ|j|jv�r |j|v�r d||j<|j|j}|js´| dd„|jDƒ|¡}|D] }|j|_q†||||d…<|t|ƒ7}�nà|d}|t|ƒkrâ||j|jvrâ|d7}q¼||jdk�r”|  ||d…¡\} } } |j �sTt| ƒt|jƒk�rT|  |j |jd|jt|jƒf¡|| }�n@|j �rÜt| ƒt|jƒdk�rÜt|jƒdk�r¬|  |j |jd |jt|jƒdf¡n&|  |j |jd |jt|jƒdf¡|| }n¸|j �rLt| ƒt|jƒdk�r|   g¡nD||| t|jƒd|| d…| t|jƒd<| t|jƒd…=| || ¡} | | |¡} | D]} |j| _�qh| |||| …<|t| ƒ7}||j=qn"|jd k�rÂ|j|_| |j¡|_|d7}q|S) NrTcSsg|]}t |¡‘qSr r…r†r r rriôr2z.Preprocessor.expand_macros..rr&zMacro %s requires %d argumentsryz(Macro %s must have at least %d argumentsz'Macro %s must have at least %d argumentZ__LINE__)rmrr\r rDr9rŠrrarwr:rXr<rOr�r^r_)r=rQrŒrqr ÚmÚexrxrrÚtokcountrurvr‹Úrr r rrŠæs\    "  (&  4      zPreprocessor.expand_macroscCsLd}|t|ƒk�r||j|jk�r||jdk�r|d}d}d}|t|ƒkrä||j|jvrl|d7}qDnn||j|jkrž||j|jvr’d}nd}|sÚqän<||jdkr²d}n(||jd krÄqän| |j||jd ¡|d7}qD|j ||_|  |¡||_||d|d…=|d7}q|  |¡}t |ƒD]¤\}}|j|jk�rpt   |¡||<|j ||_|  d¡||_n`|j|j k�r.t   |¡||<t||jƒ||_||jd d v�r.||jdd …||_�q �q.d  dd„|Dƒ¡}| dd¡}| dd¡}| dd¡}z t|ƒ}Wn.t�yF| |j|djd¡d}Yn0|S)NrZdefinedrFZ0LZ1Lr&Tr'zMalformed defined()r-Z0123456789abcdefABCDEFrjcSsg|]}t|jƒ‘qSr ©Ústrr rfr r rriSr2z)Preprocessor.evalexpr..z&&z and z||z or r(z not zCouldn't evaluate expression)rmrr\r rarDrXr<rr^r_rŠÚ enumerater€r“ror‰ÚevalÚ Exception)r=rQrqrrZ needparenÚresultr Úexprr r rÚevalexpr(s\"            zPreprocessor.evalexprccs’t|ƒ}| |¡}|sd}| d|¡||_g}d}d}g}|D�],} t| ƒD]\} } | j|jvrPqjqP| jdk�rb| D]$} | j|jvrzd| jvrz| | ¡qz|  | | dd…¡} | rØ| dj} |  | dd…¡}nd} g}| d k�r|�r`|  |¡D] } | Vqú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`|dj|j v�rîd}d}nd}�qp| dk�r8| ||f¡|�r`|dj|j v�r0d}d}nd}�qp| dk�rv| ||f¡|�r`| |¡}|�spd}d}nd}nê| dk�rØ|�rÀ|dd�rÖ|�r d}n|�sÖ| |¡}|�rÖd}d}n| |j| djd¡nˆ| dk�r*|�r|dd�r(|�rd}n|�s(d}d}n| |j| djd¡n6| dk�rp|�rH| ¡\}}n| |j| djd¡nqB|rB| | ¡qB|  |¡D] } | V�q|g}dS)Nrjz __FILE__ "%s"TFrrrrrJÚincludeZ__FILE__ÚundefZifdefZifndefÚifÚelifr-zMisplaced #elifÚelsezMisplaced #elseZendifzMisplaced #endif)r6rsrJr<r”rrar rOrtrŠrDršr›r™rXrÚpopÚextend)r=r5r<r rpÚchunkÚenableZ iftriggerZifstackrhrqrRZ dirtokensr8ruZoldfiler—r r rÚparsegencs                        zPreprocessor.parsegenc csŠ|sdS|rê|djdkr4|dj|jkr4| |¡}|djdkr¨d}|t|ƒkrl||jdkrbqx|d7}qFtdƒdSd dd„|d|…Dƒ¡}|jdg|j}nB|dj|jkrÞ|djdd …}|jdg|j}n td ƒdS|D]Š}t j ||¡}zbt |d ƒ  ¡}t j  |¡}|�r0|j  d|¡| ||¡D] } | V�q<|�rX|jd=W�q†Wqît�yvYqî0qîtd |ƒdS) Nrr)rr*zMalformed #include <...>rjcSsg|] }|j‘qSr r‡rfr r rriør2z(Preprocessor.include..r-zMalformed #include statementr‘zCouldn't find '%s')r rr`rŠrmrTrorErFÚosÚopenÚreadÚdirnameÚinsertr£ÚIOError) r=rQrqÚfilenamerEÚpZinameÚdataZdnamerRr r rršæsF      zPreprocessor.includecCs¶t|tƒr| |¡}|}�zz|d}t|ƒdkr:|d}nd}|s^t|jgƒ}||j|j<�n4|j|jvr”t|j|  |dd…¡ƒ}||j|j<�nþ|jdk�rŠ|  |dd…¡\}}}d} |D]î} | rÖt dƒ�q’d  dd „| Dƒ¡} | d k�r d } |j | d_d | d_d } | dd…=qÀnb| d d…d k�r‚| dj|j k�r‚d } | dd…=| djd d…d krÀ| djdd …| d_qÀt| ƒdk�s | dj|j krÀt dƒ�q’qÀ|  |d|d…¡} d} | t| ƒk�rX| dt| ƒk�rL| | j|jv�r| | djdk�r| | =�qÊn0| | jdk�rL| | dj|jv�rL| | d=| d7} �qÊt|j| dd „|Dƒ| ƒ}| |¡||j|j<nt dƒWnt�y°t dƒYn0dS)Nrrryr&Fz0No more arguments may follow a variadic argumentrjcSsg|]}t|jƒ‘qSr r’rˆr r rri1r2z'Preprocessor.define..z...TZ __VA_ARGS__éýÿÿÿzInvalid macro argumentrYcSsg|]}|dj‘qS)rr‡rfr r rriOr2zBad macro definition)Ú isinstanceÚ STRING_TYPESrSrmr7r rDrrartrwrTror\r„Ú LookupError)r=rQZlinetokr8ZmtyperŽr�rurvr:ÚaZastrZmvaluerqr r rrJsl           $ &&    zPreprocessor.definecCs.|dj}z |j|=Wnty(Yn0dS)Nr)r rDr°)r=rQÚidr r rr›]s    zPreprocessor.undefcCs||_| ||¡|_dSrM)Úignorer£rL)r=r5r<r³r r rÚparseiszPreprocessor.parsecCsBz"t|jƒ}|j|jvr|WSqWnty<d|_YdS0dSrM)ÚnextrLrr³Ú StopIteration)r=rRr r rrNrs   zPreprocessor.token)N)N)N)r?r@rAr>rSrXrGrdrsrtrwr„r�rŠr™r£ršrJr›r´rNr r r rrB�s&  < !5+2 B; 1F  rBÚ__main__r)1ÚsysÚ version_infoÚmajorr“Zunicoder¯ÚrangerlrQÚliteralsrZ t_CPP_POUNDZ t_CPP_DPOUNDZt_CPP_IDrZ t_CPP_INTEGERZ t_CPP_FLOATrrrrrÚrer€rHZos.pathr¤Úcompiler3r.r6Úobjectr7rBr?Zply.lexrCrr¥ÚargvÚfr¦r5r«r´rNrRrTr<r r r rÚ sh    ÷ c