B ل=^W@sddlmZddlmZmZddlmZmZyddlmZ Wne k rXddl Z YnXddl Z ddl Z ddl Z y(e jdkrddlZnddlZeZWne k rdZYnXdd Zd Ze d e je jBZe d e je jBZe d Ze dZe dZe dZdae de jZ e dZ!e dZ"e dZ#e dZ$e dZ%e dZ&e dZ'ddZ(ddZ)ddZ*dd Z+d!d"Z,d#d$Z-d%d&Z.Gd'd(d(e/Z0dS)))model) COMMON_TYPESresolve_common_type)FFIError CDefError) _pycparserN)cCsddl}ddl}dS)Nr)Zpycparser.yacctabZpycparser.lextab) pycparserr ?/opt/alt/python37/lib64/python3.7/site-packages/cffi/cparser.py%_workaround_for_static_import_finderssr zz/\*.*?\*/|//([^\n\\]|\\.)*?$z?^\s*#\s*define\s+([A-Za-z_][A-Za-z_0-9]*)\b((?:[^\n\\]|\\.)*?)$z=\s*\.\.\.\s*[,}]|\.\.\.\s*\}z__dotdotdot\d+__$z\[\s*\.\.\.\s*\]z\w+|\Sz-?0?x?[0-9a-f]+[lu]*$z\b(__stdcall|WINAPI)\bz[(]\s*(__stdcall|WINAPI)\bz \b__cdecl\bz9\bextern\s*"(Python|Python\s*\+\s*C|C\s*\+\s*Python)"\s*.z'[*]\s*((const|volatile|restrict)\b\s*)+z3(\b(int|long|short|signed|unsigned|char)\s*)+\.\.\.z\b(double|float)\s*\.\.\.cCstdkrtatS)N) _parser_cacher ZCParserr r r r _get_parser1srcCs g}xt|}|sP||d||dd}|||}|d|rn|d|d7}d}|}x`|t|kr||}|dkr|d7}n.|dkr|dkrP|d8}n|dkr|dkrP|d7}qxW||||||d}qW||d|S)N()*rrz,;=) _r_star_const_spacesearchappendstartgroupend startswithlenjoin)csourcepartsmatchclosingendposlevelicr r r _workaround_for_old_pycparser7s<          r%cCs0g}xt|}|sP|d}||d|d|dkrT|dn |d||dkr|d|}|dkrtd|d|d|dkrtd |||d|||dd}nB|d |}|dkrtd ||||d||dd}|d qW||d |S)NrCz(void __cffi_extern_python_plus_c_start; z!void __cffi_extern_python_start; {}rz!'extern "Python" {': no '}' foundz7cannot use { } inside a block 'extern "Python" { ... }';z'extern "Python": no ';' foundz void __cffi_extern_python_stop;r) _r_extern_pythonrrrrrfindrNotImplementedErrorr)rrrr!r Z semicolonr r r _preprocess_extern_pythonas4         r-cCsLd|kr dSx:|D].}d|kr|dsddl}|dPqWdS)N"#rzString literal found in cdef() or type source. String literals are ignored here, but you should remove them anyway because some character sequences confuse pre-parsing.) splitlineslstriprwarningswarn)rliner2r r r _warn_for_string_literals r5cCs$|js ddl}|d|jfdS)NrzrGlobal variable '%s' in cdef(): for consistency with C it should have a storage class specifier (usually 'extern'))Zstorager2r3name)declr2r r r /_warn_for_non_extern_non_static_global_variablesr8c Csdtd|}i}x6t|D](}|\}}|dd}|||<qWtd|}tjdkrft |}t d|}t d|}t d|}t |}t|td|}tt|}xtt|D]v\}}|}||dkr|d ||}d |d||||d df}qd |d||||d df}qWtd |}td|}|d d|fS)N z\ rz2.14z volatile volatile const(z volatile volatile const z[__dotdotdotarray__]=z...z%s,__dotdotdot%d__ %sr z%s __dotdotdot%d__ %sz __dotdotdotint__ z __dotdotdotfloat__ z __dotdotdot__ ) _r_commentsub _r_definefinditergroupsreplacestripr __version__r% _r_stdcall2 _r_stdcall1_r_cdeclr-r5_r_partial_arraylist_r_partial_enum enumeratereversedrr+r_r_int_dotdotdot_r_float_dotdotdot) rmacrosrZ macronameZ macrovalueZmatchesZnumberpZp2r r r _preprocesss6           rOcCstt}|d|d|d|d|dt}d}d}d}xt|D]}||kr|dkr|r||||d}nj|dkrd }d}nX|dkr|d 7}nF|dkr|d 8}n4|dkr|r|dkr||||n |||}qXW|S) Nr),rrtypedefFrrTr)setradd_r_wordsfindalldiscard)rZlook_for_wordsZ words_usedZ is_typedefZparenZ previous_wordZwordr r r _common_type_namess>             rWc@seZdZddZddZddZddZd:d d Zd dZddZ ddZ ddZ ddZ ddZ ddZddZd;ddZd d!Zdd&d'Zd(d)Zd?d*d+Zd,d-Zd@d.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd S)AParsercCs:i|_t|_d|_t|_i|_i|_g|_ d|_ dS)Nr) _declarationsrR_included_declarations_anonymous_counterweakrefWeakKeyDictionary_structnode2type_options_int_constants _recomplete_uses_new_feature)selfr r r __init__ s zParser.__init__c Cs4t|\}}t|}g}x"ztypedef int %s;z@typedef int __dotdotdotint__, __dotdotdotfloat__, __dotdotdot__;z# 1 "%s" )rOrWsortedrYrrrVCDEF_SOURCE_STRINGrlockacquirerparser Zc_parserZ ParseErrorconvert_pycparser_errorrelease) rcrrMZctn typenamesr6 csourcelinestypenameZ fullcsourceaster r r _parses4          "  z Parser._parsecCsfd}t|}tdtf|}|rbt|dd}|}d|krRt|krbnn ||d}|S)Nz %s:(\d+):r )strrerrhintrr0r)rcrrrr4msgrZlinenumror r r _convert_pycparser_error:s zParser._convert_pycparser_errorcCs@|||}t|}|r*d||f}n d|f}t|dS)Nzcannot parse "%s" %szparse error %s)ryrurAr)rcrrrr4rxr r r rlHs   zParser.convert_pycparser_errorFNcCsz|r&|dkrtd|r tdd}n$|rF||d@rJtd|fnd}|j}z|||d|_||Wd||_XdS)NTzB'packed' should be False or True; use 'pack' to give another valuez$cannot give both 'pack' and 'packed'rz%'pack' must be a power of two, not %rr)overridepacked dllexport) ValueErrorr__internal_parse)rcrrzr{packr|Z prev_optionsr r r rkRs$   z Parser.parsec Cs||\}}}||t|j}x|D]}|jdkr*Pq*Wd}yBd|_x4|D]*}|}t|tjj rx| |qTt|tjj r^|jst d|d}t|j j tjjr|j j jddr||}nxt|j tjjr.t|j j tjjr.t|j j j tjjr.|j j j jddr.||}n|j|j |jdd\}}|jd |j||d qT|jjd krnqTt d |jj|qTWWnt k r} z$t| jd kr| j|f| _Wdd} ~ XYnNtk r} z.|| |} | r| jdd| f| _Wdd} ~ XYnXdS)N __dotdotdot____cffi_extern_python_stopz!typedef does not declare any namerZ __dotdotdotT)r6partial_length_okztypedef )qualsZPragmazBunexpected <%s>: this construct is valid C but not valid in cdef()rz *** Err: %s)rs_process_macrositerextr6_inside_extern_python isinstancer c_astZDecl _parse_declZTypedefrtypeIdentifierTypenamesr_get_unknown_typePtrDeclTypeDecl_get_unknown_ptr_type_get_type_and_quals_declare __class____name__rargsrry) rcrrqrMiteratorr7Z current_declrZrealtyperrrxr r r r~jsV          zParser._internal_parsecCs8||jkr*|j||krdStd|f||j|<dS)Nz%multiple declarations of constant: %s)r`r)rckeyvalr r r _add_constantss   zParser._add_constantscCs|d}|d}|r(|dd}|drT|dkrT|dsTd|dd}t|d}|rh| }||||d||dS) NZul-r00xZ0orzmacro )lowerrstriprrwrr)rcr6Zint_strnegZpyvaluer r r _add_integer_constants     zParser._add_integer_constantcCshxb|D]V\}}|}t|r2|||q |dkrL|d||q td||||fq WdS)Nz...zmacro zonly supports one of the following syntax: #define %s ... (literally dot-dot-dot) #define %s NUMBER (with NUMBER an integer constant, decimal/hex/octal) got: #define %s %s)itemsrA_r_int_literalrrrr)rcrMrvaluer r r rs zParser._process_macroscCsX|||}|jdrd}n$|jdkr.d}n|jdkr>d}nd}|||j|dS)Nr|zdllexport_python Z__cffi_extern_python_startzextern_python Z!__cffi_extern_python_plus_c_startzextern_python_plus_c z function )_get_type_pointerr_getrrr6)rctprr7tagr r r _declare_functions    zParser._declare_functioncCs|j}t|tjjr:|j||jd\}}||||nt|tjjrV| d|nHt|tjj rr| d|n,t|tjj r| d|n|jst d||jr|j|dd\}}|j r||||n0|rt|drt|jd rt|jjr||j|jjn|r~t|jtjjr~|jjd kr~t|jjd r~t|jjjr~||jd |jjjn|tjkr|jd r|j|_n^|jd krt d |tj@r|js|jd|j||dnt||jd|j||ddS)N)r6structunionenumz'construct does not declare any variableT)rinitrrZ__cffi_extern_python_rzsz/Parser._parse_function_type..rrrZ __stdcall)rGgetattrrrIrrrrrr rrrrpoprrrrrtuple) rcrfuncnamerr#argZellipsisrresultrZabir )rcr rs6       zParser._parse_function_typecCs6t|tjrt|j|St|tjr.|S|SdS)N)rrrritemrr)rcrrr r r rs   zParser._as_func_argcCs,y |j|Stk rYnX|}|j}|dkrb|dk rDd|}n|jd7_d|j}d}n"|}d||f}|j|d\}} |dkr|dkrt|ddd}nP|dkrt|ddd}n6|dkr|d krt d | ||j }nt d |f|dk r2| ||n"|dkr2|j dk r2td ||jsD|||jrjd |jkrj| d|j|||j|<|dkr|S|jdkr|S|jdk rt d|g} g} g} g} x|jD]}t|jtjjrd|jjd kr|||q|jdkrd}n ||j}d|_|j|jdd\}}|jrH|||t|tjrj|jrj|||| |jpxd| || || |qWt!| |_t!| |_"t!| |_#t!| |_$| dgt%| krt|tjr|jrtd|f|j&d|_'|j(r(d|_(|j) ||S)Nz$%srz$%dz%s %s)NNrrrrz!Enums cannot be declared with ...z kind = %rz^enum %s: the '{}' declaration should appear on the first time the enum is mentioned, not laterrz anonymous %sz"duplicate declaration of struct %srrFT)rz#%s: using both bitfields and '...;'r{r)*r^KeyErrorr6r[rYrrZ StructTypeZ UnionTyper_build_enum_typevaluesAssertionErrorrr,rZforce_the_namedeclsfldnamesrrr rrrr _make_partialbitsizer_partial_lengthrpartialrrfldtypes fldbitsizefldqualsrr_r{Z completedra)rckindrr6rZ force_name explicit_namerr_rrrrr7rZfqualr r r rs                             z"Parser._get_struct_union_enum_typecCs>t|tjstd|f|s4|s4td|fd|_dS)Nz%s cannot be partialz%s is partial but has no C nameT)rrZ StructOrUnionrZ has_c_namer,r)rcrrr r r r4s   zParser._make_partialcCst|tjjr,|j}d|dkr.dkrnn|d}y"|drRt|dSt|dSWn\tk rt |dkr| ddd krt|d S| ddd krt|dSYnXt d |fn`|dd kr|dd krt |dkst |dkr|ddkrt |dSt d |ft|tjj rT|jdkrT||jSt|tjj r~|jdkr~||j St|tjjr|j|jkr|j|jSt|tjjr|jdkr|rd|_dStd|jjt|tjjr||j}||j}|jdkr ||S|jdkr4||S|jdkrH||S|jdkr`|||S|jdkr|||||S|jdkr||>S|jdkr||?S|jdkr||@S|jdkr||BS|jd kr||AStd!|jjdS)"Nrr9ZuUlLrertrrrZ0bzinvalid constant %r'rr \+rZ__dotdotdotarray__Tz...zT:%d: unsupported '[...]' here, cannot derive the actual array length in this contextr/%z<>&|^z?:%d: unsupported expression: expected a simple numeric constant)rr rZConstantrrrrwr}rrrordrrrrrr6r`rrrr4ZBinaryOpleftright_c_div)rcrrsrrr r r r;sx     *                    zParser._parse_constantcCs0||}|dk|dkAr,||dkr,|d7}|S)Nrrr )rcabrr r r rsz Parser._c_divc Cs|dk rd}g}g}d}xb|jD]X}t|jr6d}q |jdk rL||j}||j||||j||d7}q Wt|}t|}t |||}||_ nt |dd}|S)NFrTrr ) enumerators_r_enum_dotdotdotrr6rrrrrrZEnumTyper) rcrrrr Z enumvaluesZ nextenumvaluerrr r r rs*       zParser._build_enum_typecCszxP|jD]B\}\}}|dr$q |ddd}|dkr |j||d|dq Wx"|jD]\}}|||q^WdS)Nzanonymous $enum_$r9rr)rrrZ anonymousrQT)rr)rYrrsplitrr`r)rcotherr6rrrkvr r r includes zParser.includecCs|jjj}|dgkr t|jS|dgkrL|jdkr@d|j|_t|jS|dgkrx|jdkrld|j|_t|jStd|j j dS)NrZ__dotdotdotint__z'typedef int... %s'Z__dotdotdotfloat__z'typedef float... %s'z*:%d: unsupported usage of "..." in typedef) rrrZ unknown_typer6rbZUnknownIntegerTypeZUnknownFloatTyperrr4)rcr7rnr r r rs           zParser._get_unknown_typecCs2|jjjjdgkrt|jStd|jjdS)Nrz*:%d: unsupported usage of "..." in typedef)rrrZunknown_ptr_typer6rrr4)rcr7r r r rs zParser._get_unknown_ptr_type)FFNF)Fr)N)NF)N)NF)F)r __module__ __qualname__rdrsryrlrkr~rrrrrrrrrrrrrrrrrrrrrr r r r rXs8 &  6 3  ^ # v I rX)1rrZ commontypesrrerrorrrrr ImportErrorr\rvsys version_infoZthread_thread allocate_lockrir rhcompileDOTALL MULTILINEr;r=rHr rFrTr IGNORECASErrDrCrEr*rrKrLrr%r-r5r8rOrWobjectrXr r r r sT               *2 :(