pWc@sddlmZmZddlmZmZyddlmZWnek r_ddlZnXddl Z ddl Z ddl Z y:e j dkrddl Zn ddlZejZWnek rdZnXe jde je jBZe jde je jBZe jd Ze jd Ze jd Ze jd Zdae jd e jZe jdZe jdZe jdZ e jdZ!e jdZ"dZ#dZ$dZ%dZ&dZ'de(fdYZ)dS(i(tapitmodel(t COMMON_TYPEStresolve_common_type(t _pycparseriNis/\*.*?\*/|//([^\n\\]|\\.)*?$s?^\s*#\s*define\s+([A-Za-z_][A-Za-z_0-9]*)\b((?:[^\n\\]|\\.)*?)$s=\s*\.\.\.\s*[,}]|\.\.\.\s*\}s__dotdotdot\d+__$s\[\s*\.\.\.\s*\]s\w+|\Ss-?0?x?[0-9a-f]+[lu]*$s\b(__stdcall|WINAPI)\bs[(]\s*(__stdcall|WINAPI)\bs \b__cdecl\bs9\bextern\s*"(Python|Python\s*\+\s*C|C\s*\+\s*Python)"\s*.s'[*]\s*((const|volatile|restrict)\b\s*)+cCstdkrtjantS(N(t _parser_cachetNonet pycparsertCParser(((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt _get_parser%s cCsng}xKtrStj|}|s(Pn|j||j |jdd}|j|j|j}|jd|r|jd|d7}nd}|}x|t|kr6||}|dkr|d7}nH|dkr |dkrPn|d8}n|dkr)|dkr)Pq)n|d7}qW|||!|||}q W|j|dj |S(Nt(t)t*iis,;=t( tTruet_r_star_const_spacetsearchtappendtstarttgrouptendt startswithtlentjoin(tcsourcetpartstmatchtclosingtendpostleveltitc((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt_workaround_for_old_pycparser+s<              cCsg}xvtr~tj|}|s(Pn|jd}|j||j d|jdkrt|jdn |jd||dkr|jd|}|dkrtj dn|jd|d|dkrt d n|j||d|!||d}nV|jd |}|dkrHtj d n|j|||d!||d}|jd q W|j|d j |S(NitCs(void __cffi_extern_python_plus_c_start; s!void __cffi_extern_python_start; t{t}is!'extern "Python" {': no '}' founds7cannot use { } inside a block 'extern "Python" { ... }'t;s'extern "Python": no ';' founds void __cffi_extern_python_stop;R ( Rt_r_extern_pythonRRRRRtfindRt CDefErrortNotImplementedErrorR(RRRRRt semicolon((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt_preprocess_extern_pythonUs4      c Cstjd|}i}xKtj|D]:}|j\}}|jddj}|||                     tParsercBs eZdZdZdZdZeeedZdZdZ dZ dZ d Z d Z d Zd Zed dZdZddZdedZddZdZdedZdZedZdZdZdZRS(cCsUi|_t|_d|_tj|_i|_i|_g|_ d|_ dS(Ni( t _declarationsRGt_included_declarationst_anonymous_countertweakreftWeakKeyDictionaryt_structnode2typet_optionst_int_constantst _recompleteRt_uses_new_feature(tself((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt__init__s      c CsSt|\}}t|}g}xMt|jD]<}|jdr4|d}|j||j|q4q4W|t|7}g|D]}d|^q}|jd|j|dj|}tdk rtj nzFyt j |}Wn)t jjk r'} |j| |nXWdtdk rEtjnX|||fS(Nstypedef istypedef int %s;stypedef int __dotdotdot__;s (RDRStsortedRURRRLRtlockRtacquireR tparseRtc_parsert ParseErrortconvert_pycparser_errortrelease( R_RR=tctnt typenamestnamettypenamet csourcelinestastte((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt_parses.        cCsd}t|}|jdrd|dkr|d|jdd!}|jrt|d}|j}d|kot|knr||d}qqn|S(Nt:ii (RtstrRR&tisdigittintt splitlinesR(R_RoRtlinetmsgtlinenumRm((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt_convert_pycparser_error s   "cCs]|j||}t|}|r=d|j|f}n d|f}tj|dS(Nscannot parse "%s" %ssparse error %s(RyRrR3RR'(R_RoRRvRw((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRgs   cCsI|j}z/i|d6|d6|d6|_|j|Wd||_XdS(Ntoverridetpackedt dllexport(R[t_internal_parse(R_RRzR{R|t prev_options((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRd%s   c CsD|j|\}}}|j|t|j}x!|D]}|jdkr;Pq;q;Wyd|_x|D]~}t|tjj r|j |qkt|tjj r|jst j d|nd}t|jjtjjr|jjjddkr|j|}nt|jtjjrt|jjtjjrt|jjjtjjr|jjjjdgkrtj|j}n!|j|jd|j\}}|jd|j|d|qkt j d |qkWWnOt jk r?}|j||} | r9|jdd | f|_nnXdS( Nt __dotdotdot__t__cffi_extern_python_stops!typedef does not declare any nameiiRkstypedef tqualssunrecognized constructs *** Err: %s(Rpt_process_macrostitertextRkt_inside_extern_pythont isinstanceRtc_asttDeclt _parse_decltTypedefRR'ttypetIdentifierTypetnamest_get_unknown_typetPtrDecltTypeDeclRtunknown_ptr_typet_get_type_and_qualst_declaretFFIErrorRytargs( R_RRnR=titeratortdeclRtrealtypeRoRw((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR}/sD        cCsP||jkr?|j||kr&dStjd|fn||j|||kr>dS|jjdsltjd|fqln||f|j|<|r|jj|ndS(NRzsPmultiple declarations of %s (for interactive usage, try cdef(xx, override=True))(RUR[RRRRVRH(R_RktobjtincludedRtprevobjt prevquals((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRscCsd}t|tjjtjjfrd|jkrF|tjO}nd|jkre|tjO}nd|jkr|tj O}qn|S(Nitconsttvolatiletrestrict( RRRRRRRRt Q_VOLATILEt Q_RESTRICT(R_RR((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt_extract_qualsscCst|tjr|jSt|tjr|jjdr|jdjr|jdkr|dk rtj |||Stj ||S(Nt$i( RRtRawFunctionTypetas_function_pointertStructOrUnionOrEnumRkRRst forcenameRtNamedPointerTypet PointerType(R_RRtdeclname((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRs %c Cst|tjjrt|jtjjrt|jjdkrd|jjd|jkr|jd|jjd\}}||j |O}||fSt|tjj r|j dkrd}n|j |j d|}|j|jd|\}}tj|||fSt|tjjrw|j|j\}}|j||d|}|j |}||fSt|tjjr|j |}|j} t| tjjr4t| j} | ddgkri} xE| r'| d}|dkr#| j|dd| |<| d=qPqWg} x>dD]6} x-t| j| dD]}| j| qTWq5W| sd g} n| d gkrd| ksd | krg} qn| | } nd j| }|d krtj|fS|dkrtjd|jjnt||\}}|||BfSt| tjjrh|jd| |}||fSt| tjj r|jd| |}||fSt| tjj!r|jd| |}||fSnt|tjj"r|j#||dfSt|tjjr2|jd||dt$dfSt|tjj rf|jd||dt$dfStjd|jjdS(Nistypedef iRRtsignedtchartshorttlongtunsignedRtR+tvoidRs:%d: bad usage of "..."RRRtnesteds(:%d: bad or unsupported type declaration(RslongRR(RRslong(%RRRRRRRRRURt ArrayDecltdimRt_parse_constantRRt ArrayTypeRRR9RtrangeRRRRRtcoordRvRRRRRRt_parse_function_typeR(R_ttypenodeRkRRRtlengthtitemtypet itemqualsRRtprefixestnewnamestprefixRtidentttp0tquals0((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRs!                      c Cstt|jdg}x^t|D]P\}}t|ds(tjd|pUd|dt|ddfq(q(Wt|dkot|d j t j j ot|d j j t j j o|d j j jd gk}|r|j|stjd |p dqng|D]!}|j|j|j ^q!}| rj|tjgkrjg}n|j|j \} } d} t|j d r|j jd dddgkrd} qntjt|| || S(NRRst%s arg %d: unknown type '%s' (if you meant to use the old C syntax of giving untyped arguments, it is not supported)s in expressioniRkt?iiRs=%s: a function with only '(...)' as argument is not correct CRiRRt __stdcall(R9tgetattrRR;RRR'RRRRRRRRtpopt _as_func_argRRRRRRttuple( R_RtfuncnameRRtargtellipsist argdeclnodeRtresultRtabi((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRKs6   +  cCsIt|tjr%tj|j|St|tjrA|jS|SdS(N(RRRRtitemRR(R_RR((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRns  cCs]y|j|SWntk r"nX|}|j}|dkr||dk rWd|}n|jd7_d|j}d}n1|}d||f}|jj|d\}} |dkr{|dkrtj|ddd}ny|dkrtj |ddd}nR|dkrF|dkr.t d n|j ||j }nt d |f|dk r|j||qn.|dkr|j dk rtd |n|js|j|n|jrd |jkr|jd |j|n||j|<|dkr|S|jdkr$|S|jdk rItj d|ng} g} g} g} x2|jD]'}t|jtjjrdj|jjdkr|j||qkn|jdkrd}n|j|j}t|_ |j!|jdt"\}}|j r'|j||nt|tjrU|j#rU|j||n| j$|jpgd| j$|| j$|| j$|qkWt%| |_t%| |_&t%| |_'t%| |_(| dgt)| krt|tjr|j#rtd|fqn|j*jd|_+|j,rYd|_,|j-j$|n|S(Ns$%sis$%ds%s %sRRRRs!Enums cannot be declared with ...s kind = %rs^enum %s: the '{}' declaration should appear on the first time the enum is mentioned, not laterRs anonymous %ss"duplicate declaration of struct %sR iRs#%s: using both bitfields and '...;'R{i(NN(.RZtKeyErrorRkRRWRURRt StructTypet UnionTypeR't_build_enum_typetvaluestAssertionErrorRR(Rtforce_the_nametdeclstfldnamesRRRRRRRRt _make_partialtbitsizeRRIt_partial_lengthRRtpartialRRtfldtypest fldbitsizetfldqualsRR[R{t completedR](R_tkindRRkRt force_namet explicit_nameRRt_R RRRRR tfqual((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRvs                          cCsbt|tjs+tjd|fn|j rU| rUtd|fnt|_dS(Ns%s cannot be partials%s is partial but has no C name( RRt StructOrUnionRR't has_c_nameR(RR(R_RR((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR s c Cst|tjjr |j}|jdre|jdsK|jdrXt|dSt|dSd|dkodknrt|d S|dd kr|d d krt|d kst|d kr|ddkrt|dSt j d|fnt|tjj rA|j dkrA|j |jSt|tjj rv|j dkrv|j |j St|tjjr|j|jkr|j|jS|rt|tjjr|jdkrt|_dSnt jd|jjdS(NRRt0Xiit1it9i t'iiiis\isinvalid constant %rt+Rt__dotdotdotarray__s...s?:%d: unsupported expression: expected a simple numeric constant(RRRtConstantRRRtRtordRR'RRRRRRkR\RRRRRv(R_RRts((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRs8      4  c Cs|dk rt}g}g}d}x|jD]}tj|jrRt}q.n|jdk rv|j|j}n|j |j|j ||j |j||d7}q.Wt |}t |}t j |||}||_nt j |dd}|S(Nii(((RRIt enumeratorst_r_enum_dotdotdotRRkRRRRRRRtEnumTypeR( R_RR RR$t enumvaluest nextenumvalueRR((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRs*     cCsxy|jjD]h\}\}}|jdr7qn|jddd}|d kr|j||d td |qqWx-|jjD]\}}|j||qWdS( Nsanonymous $enum_$R+iiRRRt anonymousRFRR(sstructsunionsenumR)stypedef(RURRtsplitRRR\R(R_totherRkRRRtktv((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pytinclude1s" #c Cs|jjj}t|dkr1tj|jS|d dgksW|d dgkrltj|j}nOx:|d D].}|dkrwtjd |j j qwqwWtj |j}|j dkrd d j|d |jf|_ n|S(NiitfloattdoubleRtRRRRRs:%d: bad usage of "..."s'typedef %s... %s'R+(sintsshortslongssignedsunsignedschar(RRRRt unknown_typeRktUnknownFloatTypeRRRRvtUnknownIntegerTypeR^RR(R_RRjRtt((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR;s   #N(t__name__t __module__R`RpRyRgRIRdR}RRRRRRRRRRRRRRRR RRR.R(((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRTs2    *    2   ^ # v  &  (i(*R RRt commontypesRRRRt ImportErrorRXtretsyst version_infotthreadt_threadt allocate_lockRbRtcompiletDOTALLt MULTILINER-R/R:R%R8RJRt IGNORECASERR6R5R7R%RR R R*RDRStobjectRT(((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pytsF $        * 2 3 (