3 L] @s`ddlZejjdkreefZneZeZd2Zd Z ddZ dZ dZ dZ ddZeZdZddZddZddZddZddZddlZddlZddlZddlZejdZd d!d"d#d$d%d&d'd(d) Zd*d+ZGd,d-d-eZ Gd.d/d/eZ!e"d0kr\ddl#j$Z$e$j$Z%ddlZe&ej'd1Z(e(j)Z*e!e%Z+e+j,e*ej'd1x"e+j-Z.e.sJPe/e+j0e.q:WdS)3NCPP_ID CPP_INTEGER CPP_FLOAT CPP_STRINGCPP_CHARCPP_WS CPP_COMMENT1 CPP_COMMENT2 CPP_POUND CPP_DPOUNDz+-*/%|&~^<>=!?()[]{}.,;:\'"cCs|jj|jjd7_|S)z\s+ )lexerlinenovaluecount)tr8/tmp/pip-install-wfra5znf/pycparser/pycparser/ply/cpp.pyt_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)rrrrr+sz?((\d+)(\.\d+)(e(\+|-)?(\d+))? | (\d+)e(\+|-)?(\d+))([lL]|[fF])?cCs|jj|jjd7_|S)z\"([^\\\n]|(\\(.|\n)))*?\"r )rrrr)rrrr t_CPP_STRING5srcCs|jj|jjd7_|S)z(L)?\'([^\\\n]|(\\(.|\n)))*?\'r )rrrr)rrrr t_CPP_CHAR;srcCs8|jjd}|jj|7_d|_|r.d|nd|_|S)z(/\*(.|\n)*?\*/)r r )rrrrtype)rZncrrrrt_CPP_COMMENT1As  rcCsd|_d|_|S)z (//.*?(\n|$))rr )rr)rrrrt_CPP_COMMENT2JsrcCs(|jd|_|jd|_|jjd|S)Nr)rrrskip)rrrrt_errorPs   rz\?\?[=/\'\(\)\!<>\-]#\^[]|{}~) =/'()!<>-cCstjdd|S)NcSst|jdS)Nr) _trigraph_repgroup)grrrzsztrigraph..) _trigraph_patsub)inputrrrtrigraphysr9c@seZdZdddZdS)MacroNFcCs0||_||_||_||_|r&|d|_d|_dS)Nrr1)namerarglistvariadicvarargsource)selfr;rr<r=rrr__init__s zMacro.__init__)NF)__name__ __module__ __qualname__rArrrrr:sr:c@seZdZd&ddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ d'ddZ ddZd(ddZddZddZd d!Zdifd"d#Zd$d%ZdS)) PreprocessorNcCsl|dkrtj}||_i|_g|_g|_|jtj}|jdtj d||jdtj d|d|_ dS)Nz __DATE__ "%s"z%b %d %Yz __TIME__ "%s"z%H:%M:%S) lexrmacrospath temp_pathlexprobetime localtimedefinestrftimeparser)r@rtmrrrrAszPreprocessor.__init__cCs4g}|jj|x|jj}|s"P|j|qW|S)N)rr8tokenappend)r@texttokenstokrrrtokenizes  zPreprocessor.tokenizecCstd|||fdS)Nz%s:%d %s)print)r@filelinemsgrrrerrorszPreprocessor.errorc Cs|jjd|jj}| s&|jdkr0tdn|j|_|jjd|jj}| sbt|jdkrltdn|j|_t|j|_ |jjd|jj}| s|jdkrtdn|j|_ |jjd|jj}| s|jdkrd|_ n|j|_ |jjd |jj}| s|jd kr(d|_ td n|j|_ |j |j f|_ d d d ddddddg }xD|D]<}|jj||jj}| s|j|krZtd|qZWdS)N identifierz"Couldn't determine identifier typeZ12345i90zCouldn't determine integer typez "filename"zCouldn't determine string typez r z%Couldn't determine token for newlinesr.r/rz##r r+r,,.z,Unable to lex '%s' required for preprocessor)rr8rQrrWrt_IDint t_INTEGERt_INTEGER_TYPEt_STRINGZt_SPACEZ t_NEWLINEt_WS)r@rUcharscrrrrJsD                  zPreprocessor.lexprobecCs|jj|dS)N)rHrR)r@rHrrradd_path szPreprocessor.add_pathccs|jj}dd|jD}xhtt|D]X}|d}xJ||jdr|t|kr||dd||||<d||<|d7}q8Wq*Wdj|}|j|d|_g}x<|j }|sP|j ||j |j krd|j kr|Vg}qW|r|VdS)NcSsg|] }|jqSr)rstrip).0xrrr sz,Preprocessor.group_lines..rr r r1)rclone splitlinesxrangelenendswithjoinr8rrQrRrrdr)r@r8rFlinesij current_linerUrrr group_liness,    zPreprocessor.group_linescCs|d}x(|t|kr,||j|jkr,|d7}qW|d|=t|d}x$|dkrh||j|jkrh|d8}qFW||dd=|S)Nrr)rprrd)r@rTrtrrr tokenstrip8s    zPreprocessor.tokenstripc Csg}g}g}d}t|}d}x$||kr@||j|jkr@|d7}qW||krh||jdkrh|j|dn |j|j|djddggfS|d7}x||krf||}|jdkr|j||d7}n|jdkr|d8}|dkr |r|j|j||j||d||fS|j|nD|jdkrR|dkrR|j|j||j|dg}n |j||d7}qW|j|j|djddggfS) Nrrr+zMissing '(' in macro argumentsr,r]zMissing ')' in macro argumentsr1) rprrdrrRr[r?rrx) r@ tokenlistargs positionsZ current_argZnestingZtokenlenrtrrrr collect_argsTsD            zPreprocessor.collect_argscCsg|_g|_g|_d}x|t|jkr|j|j|jkoL|j|j|jkrh|jj|j|j}|dkr|j|djdkrt j |j||j|<|j |j|_|j|d=|jj ||dfqn|dko|j|djdkr |jj d||df|j|d=qnZ|dt|jkrT|j|djdkrT|jj d||f|d7}qn|jj d||fn|j|jdkr|j r|dkr|j|djdkr|dt|jkr|j|dj|jkr|j|dj|j kr|jj |d|d7}qW|jjdd d d dS) Nrrrz##rfer]cSs|dS)Nr)rjrrrr5sz,Preprocessor.macro_prescan..T)keyreverse)patch str_patchvar_comma_patchrprrr_r<indexcopyrcrRr=r>sort)r@macrortargnumrrr macro_prescans:&  *(, zPreprocessor.macro_prescanc Cs0dd|jD}i}xb|jD]X\}}||krTddjdd||Djdd||<tj||||<||||_qWd}|jr|d rx|jD]}d||<d }qWi}xj|jD]`\} }}| d kr|||||d <q| d kr||kr|j||||<|||||d <qW|r,d d|D}|S)NcSsg|]}tj|qSr)r)ri_xrrrrksz2Preprocessor.macro_expand_args..z"%s"rlcSsg|] }|jqSr)r)rirjrrrrksr z\\FrTrfr}cSsg|] }|r|qSrr)ri_irrrrksr1) rrrrreplacerr=rr expand_macros) r@rrzrepZ str_expansionrrtZ comma_patchexpandedptyperrrmacro_expand_argss.(  zPreprocessor.macro_expand_argscCs|dkr i}d}x|t|kr||}|j|jkr|j|jkoL|j|krd||j<|j|j}|js|jdd|jD|}x|D] }|j|_qW||||d<|t|7}n|d}x(|t|kr||j|jkr|d7}qW||jdkr|j ||d\} } } |j r`t| t|jkr`|j |j |jd|jt|jf|| }nD|j rt| t|jdkrt|jdkr|j |j |jd |jt|jdfn&|j |j |jd |jt|jdf|| }n|j rXt| t|jdkr| j gnD||| t|jd|| d| t|jd<| t|jd=|j|| } |j| |} x| D]} |j| _qvW| |||| <|t| 7}||j=qn"|jd kr|j|_|j|j|_|d7}qW|S) NrTcSsg|]}tj|qSr)r)rirrrrrksz.Preprocessor.expand_macros..rr+zMacro %s requires %d argumentsr~z(Macro %s must have at least %d argumentsz'Macro %s must have at least %d argumentZ__LINE__)rprr_rrGr<rrrdr|r=r[r?rRrrarb)r@rTrrtrmexr}rutokcountrzr{rrrrrrs\     "  (&  4      zPreprocessor.expand_macrosc Cs^d}x|t|kr"||j|jko2||jdkr|d}d}d}x|t|kr||j|jkrp|d7}qHnn||j|jkr||j|jkrd}nd}|sPn<||jdkrd}n(||jd krPn|j|j||jd |d7}qHW|j ||_|j |||_||d|d=|d7}qW|j |}xt |D]\}}|j|jkrzt j |||<|j ||_|j d||_nd|j|j kr8t j |||<t||j||_x2||jdd kr||jdd||_qWq8Wd jd d|D}|jdd}|jdd}|jdd}y t|}Wn0tk rX|j|j|djdd}YnX|S)NrZdefinedrFZ0LZ1Lr+Tr,zMalformed defined()Z0123456789abcdefABCDEFrlcSsg|]}t|jqSr)strr)rirjrrrrkSsz)Preprocessor.evalexpr..z&&z and z||z or r-z not zCouldn't evaluate expressionr1r1)rprr_rrdrGr[r?rrarbr enumeraterrrrreval Exception)r@rTrtruZ needparenresultrexprrrrevalexpr(s^      $     zPreprocessor.evalexprccst|}|j|}|sd}|jd|||_g}d}d}g}xN|D]D} x"t| D]\} } | j|jkrVPqVW| jdkr~x,| D]$} | j|jkrd| jkr|j| qW|j | | dd} | r| dj} |j | dd}nd} g}| d kr(|r|x|j |D] } | VqWg}|j|q| d kr|r|x|j |D] } | VqDWg}|j d }x|j |D] } | VqnW||j d <||_q| d kr|r|x|j |D] } | VqWg}|j |q| d kr|j||f|r||dj|j kr d}d}nd}q| dkrT|j||f|r||dj|j krLd}d}nd}q| dkr|j||f|r||j|}|sd}d}nd}n| dkr|r|ddr|rd}n|s|j|}|rd}d}n|j|j| djdn| dkrF|r.|ddrD|rd}n|sDd}d}n|j|j| djdn6| dkr|rd|j\}}n|j|j| djdnqF|rF|j| qFWx|j |D] } | VqWg}dS)Nrlz __FILE__ "%s"TFrr rrrMincludeZ__FILE__undefZifdefZifndefifelifzMisplaced #elifelsezMisplaced #elseendifzMisplaced #endifr1r1)r9rwrMr?rrrdrrRrxrrGrrrr[rpopextend)r@r8r?rrschunkenableZ iftriggerZifstackrjrtrUZ dirtokensr;rzZoldfilerrrrparsegencs                        zPreprocessor.parsegenc cs|sdS|r|djdkr4|dj|jkr4|j|}|djdkrd}x4|t|krn||jdkrdP|d7}qHWtddSdjdd|d|D}|jdg|j}nB|dj|jkr|djdd }|jdg|j}n td dSx|D]}t jj||}y`t |d j }t jj |}|r6|jj d|x|j||D] } | VqDW|rb|jd=PWqtk r|YqXqWtd |dS) Nrr.rr/zMalformed #include <...>rlcSsg|] }|jqSr)r)rirjrrrrksz(Preprocessor.include..zMalformed #include statementrzCouldn't find '%s'r1)rrrcrrprWrrrHrIosopenreaddirnameinsertrIOError) r@rTrtfilenamerHpZinamedataZdnamerUrrrrsF      zPreprocessor.includec Cst|tr|j|}|}y||d}t|dkr:|d}nd}|s^t|jg}||j|j<n6|j|jkrt|j|j |dd}||j|j<n|jdkr|j |dd\}}}d} x|D]} | rt dPdj dd | D} | d kr d } |j | d_d | d_d } | dd=qnb| ddd kr| dj|j krd } | dd=| djddd kr| djdd| d_qt| dks| dj|j krt dPqW|j |d|d} d} x| t| krX| dt| krL| | j|jkr| | djdkr| | =qn0| | jdkrL| | dj|jkrL| | d=| d7} qWt|j| dd |D| }|j|||j|j<nt dWntk rt dYnXdS)Nrrr~r+Fz0No more arguments may follow a variadic argumentrlcSsg|]}t|jqSr)rr)rirrrrrk1sz'Preprocessor.define..z...TZ __VA_ARGS__rzInvalid macro argumentz##cSsg|]}|djqS)r)r)rirjrrrrkOszBad macro definitionrr) isinstance STRING_TYPESrVrpr:rrGrrdrxr|rWrrr_r LookupError)r@rTZlinetokr;mtyperrrzr{r=aZastrZmvaluertrrrrMsl            $ &&   zPreprocessor.definec Cs0|dj}y |j|=Wntk r*YnXdS)Nr)rrGr)r@rTidrrrr]s   zPreprocessor.undefcCs||_|j|||_dS)N)ignorerrO)r@r8r?rrrrparseiszPreprocessor.parsec CsDy$xt|j}|j|jkr|SqWWntk r>d|_dSXdS)N)nextrOrr StopIteration)r@rUrrrrQrs  zPreprocessor.token)N)N)N)rBrCrDrArVr[rJrgrwrxr|rrrrrrrMrrrQrrrrrEs&  < !5+2 B; 1F  rE__main__r) rrrrrrr r r r )1sys version_infomajorrunicoderrangerorTliteralsrZ t_CPP_POUNDZ t_CPP_DPOUNDZt_CPP_IDrZ t_CPP_INTEGERZ t_CPP_FLOATrrrrrrerrKos.pathrcompiler6r2r9objectr:rErBZply.lexrFrrargvfrr8rrrQrUrWr?rrrr sj    c