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 _declarationsRHt_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 (RERTtsortedRVRRRMRtlockRtacquireR 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`RpRtlinetmsgtlinenumRn((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(RzRsR3RR'(R`RpRRwRx((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRhs   cCsI|j}z/i|d6|d6|d6|_|j|Wd||_XdS(Ntoverridetpackedt dllexport(R\t_internal_parse(R`RR{R|R}t prev_options((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRe%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 nameiiRlstypedef tqualssunrecognized constructs *** Err: %s(Rqt_process_macrostitertextRlt_inside_extern_pythont isinstanceRtc_asttDeclt _parse_decltTypedefRR'ttypetIdentifierTypetnamest_get_unknown_typetPtrDecltTypeDeclRtunknown_ptr_typet_get_type_and_qualst_declaretFFIErrorRztargs( R`RRoR>titeratortdeclRtrealtypeRpRx((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR~/sD        cCsP||jkr?|j||kr&dStjd|fn||j|Rtvalue((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRps  cCs~|j||}|jjdr-d}n6|jdkrEd}n|jdkr]d}nd}|j||j|dS(NR}sdllexport_python t__cffi_extern_python_startsextern_python t!__cffi_extern_python_plus_c_startsextern_python_plus_c s function (t_get_type_pointerR\tgetRRRl(R`ttpRRttag((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt_declare_functions   cCs|j}t|tjjrj|j|d|j\}}t|tjsTt |j |||net|tjj r|j d|nnt|tjj r|j d|nFt|tjjr|j d|n|jstjd|n|jr|j|dt\}}|jrC|j |||q|jrt|drt|jdrtj|jjr|j|j|jjq|jr't|jtjjr'|jjd kr't|jjdr'tj|jjjr'|j|jd |jjjq|tjkrW|jjd rW|j|_q|jd krxtjd n|tj @r|j! r|j"d |j|d|q|j"d|j|d|ndS(NRltstructtuniontenums'construct does not declare any variabletpartial_length_oktinitRRt__cffi_extern_python_Rs<cannot declare constants or variables with 'extern "Python"'s constant Rs variable (#RRRRtFuncDeclRRlRtRawFunctionTypeR=RtStructt_get_struct_union_enum_typetUniontEnumRR'Rtis_raw_functiontis_integer_typethasattrRRRRRtUnaryOptoptexprt void_typeRRtQ_CONSTt is_array_typeR(R`RtnodeRR((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRsP            cCs|j|dS(Ni(tparse_type_and_quals(R`tcdecl((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyt parse_typescCs|jd|d \}}| s*t|jdjjjd}t|tjj rut j d|j fn|j |jS(Nsvoid __dummy( %s );iiisunknown identifier '%s'(RqR=RRRtparamsRRRtIDRR'RlR(R`RRoR>texprnode((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRs  icCs||jkrl|j|\}}||kr>||kr>dS|jjdsltjd|fqlnd|jkst||f|j|<|r|jj|ndS(NR{sPmultiple declarations of %s (for interactive usage, try cdef(xx, override=True))R( RVR\RRRtsplitR=RWRI(R`RltobjtincludedRtprevobjt 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( RRRtas_function_pointertStructOrUnionOrEnumRlRRtt 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 iRRtsignedtchartshorttlongtunsignedRuR+tvoidRs:%d: bad usage of "..."RRRtnesteds(:%d: bad or unsupported type declaration(RslongRR(RRslong(%RRRRRRRRRVRt ArrayDecltdimRt_parse_constantRRt ArrayTypeRRR9RtrangeRRRRRtcoordRwRRRRRRt_parse_function_typeR(R`ttypenodeRlRRRtlengthtitemtypet 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 expressioniRlt?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(.R[tKeyErrorRlRRXRVRRt StructTypet UnionTypeR't_build_enum_typetvaluesR=RR(Rtforce_the_nametdeclstfldnamesRRRRRRRRt _make_partialtbitsizeRRJt_partial_lengthRRtpartialRRtfldtypest fldbitsizetfldqualsRR\R|t completedR^(R`tkindRRlRt force_namet explicit_nameRRt_R RRRRRtfqual((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(RRRtConstantRRRuRtordRR'RRRRRRlR]RRRRRw(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(((RRJt enumeratorst_r_enum_dotdotdotRRlRRRRRRRtEnumTypeR( 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 anonymousRGRR(sstructsunionsenumR*stypedef(RVRRRRRR]R(R`totherRlRRRtktv((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pytinclude1s" #c Cs |jjj}|ddks%tt|dkrGtj|jS|d dgksm|d dgkrtj|j}nOx:|d D].}|dkrtj d |j j qqWtj |j}|j dkrd dj|d |jf|_ n|S(NiRitfloattdoubleRuRRRRRs:%d: bad usage of "..."s'typedef %s... %s'R+(sintsshortslongssignedsunsignedschar(RRR=RRt unknown_typeRltUnknownFloatTypeRRRRwtUnknownIntegerTypeR_RR(R`RRkRtt((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyR;s"  #N(t__name__t __module__RaRqRzRhRJReR~RRRRRRRRRRRRRRRR RRR.R(((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pyRUs2    *    2   ^ # v  &  (i(*R RRt commontypesRRRRt ImportErrorRYtretsyst version_infotthreadt_threadt allocate_lockRcRtcompiletDOTALLt MULTILINER-R/R:R&R8RKRt IGNORECASERR6R5R7R%RR R R*RERTtobjectRU(((s2/usr/lib64/python2.7/site-packages/cffi/cparser.pytsF $        * 2 3 (