grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a —`Uã@sÖddlZddlZddlmZddlmZmZmZdZdZ dZ dd„Z Gd d „d e ƒZ Gd d „d e ƒZGd d„deƒZeƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZeeƒZdd „ZeeƒZGd!d"„d"eƒZGd#d$„d$eƒZeed%ƒdƒZGd&d'„d'e ƒZGd(d)„d)eƒZ Gd*d+„d+e ƒZ!Gd,d-„d-e ƒZ"Gd.d/„d/eƒZ#déNé)Ú allocate_lock)Ú CDefErrorÚVerificationErrorÚVerificationMissingéécCs@|t@rd| ¡}|t@r(d| ¡}|t@rr$r#rrrÚ__repr__AszBaseTypeByIdentity.__repr__cs‡fdd„ˆjDƒS)Ncsg|]}|tˆ|ƒf‘qSr)Úgetattr)Ú.0Únamer#rrÚ Eóz1BaseTypeByIdentity._get_items..)Ú_attrs_r#rr#rÚ _get_itemsDszBaseTypeByIdentity._get_itemsN)rrr)F) Ú__name__Ú __module__Ú __qualname__Ú is_array_typeÚis_raw_functionr"rr%r'r1r2r9rrrrrs  rc@s$eZdZdd„Zdd„Zdd„ZdS)ÚBaseTypecCs|j|jko| ¡| ¡kSr()Ú __class__r9©rÚotherrrrÚ__eq__Js ÿzBaseType.__eq__cCs ||k Sr(rrArrrÚ__ne__NszBaseType.__ne__cCst|jt| ¡ƒfƒSr()Úhashr@Útupler9r#rrrÚ__hash__QszBaseType.__hash__N)r:r;r<rCrDrGrrrrr?Hsr?c@s eZdZdZdd„Zdd„ZdS)ÚVoidTypercCs d|_dS)Nzvoid&©rr#rrrÚ__init__XszVoidType.__init__cCs t||dƒS)NZ new_void_type©Ú global_cache©rr-r.rrrr+[szVoidType.build_backend_typeN©r:r;r<r8rJr+rrrrrHUsrHc@seZdZdd„ZdS)ÚBasePrimitiveTypecCsdSr&rr#rrrÚis_complex_typebsz!BasePrimitiveType.is_complex_typeN)r:r;r<rPrrrrrOasrOc4@s¬eZdZdZddddddddddddddddddddddddddddddddddddddddddddddddddddœ3Zdd„Zd d „Zd d „Zd d„Zdd„Z dd„Z dS)Ú PrimitiveType©r5ÚcÚiÚfÚj)3ÚcharZshortÚintÚlongz long longz signed charz unsigned charzunsigned shortú unsigned intú unsigned longzunsigned long longÚfloatZdoublez long doublezfloat _Complexzdouble _ComplexZ_BoolZwchar_tZchar16_tZchar32_tZint8_tZuint8_tZint16_tZuint16_tZint32_tZuint32_tZint64_tZuint64_tZ int_least8_tZ uint_least8_tZ int_least16_tZuint_least16_tZ int_least32_tZuint_least32_tZ int_least64_tZuint_least64_tZ int_fast8_tZ uint_fast8_tZ int_fast16_tZ uint_fast16_tZ int_fast32_tZ uint_fast32_tZ int_fast64_tZ uint_fast64_tZintptr_tZ uintptr_tZintmax_tZ uintmax_tZ ptrdiff_tZsize_tZssize_tcCs||_|d|_dS©Nr©r5r©rr5rrrrJ szPrimitiveType.__init__cCs|j|jdkS)NrS©ÚALL_PRIMITIVE_TYPESr5r#rrrÚ is_char_type¥szPrimitiveType.is_char_typecCs|j|jdkS)NrTr`r#rrrr'§szPrimitiveType.is_integer_typecCs|j|jdkS)NrUr`r#rrrÚ is_float_type©szPrimitiveType.is_float_typecCs|j|jdkS)NrVr`r#rrrrP«szPrimitiveType.is_complex_typecCst||d|jƒS)NZnew_primitive_type)rLr5rMrrrr+®sz PrimitiveType.build_backend_typeN) r:r;r<r8rarJrbr'rcrPr+rrrrrQfsvÌ7rQc@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚUnknownIntegerTyperRcCs||_|d|_dSr]r^r_rrrrJµszUnknownIntegerType.__init__cCsdS)NTrr#rrrr'¹sz"UnknownIntegerType.is_integer_typecCstd|jƒ‚dS)Nz4integer type '%s' can only be used after compilation©ÚNotImplementedErrorr5rMrrrr+¼sÿz%UnknownIntegerType.build_backend_typeN)r:r;r<r8rJr'r+rrrrrd²srdc@s eZdZdZdd„Zdd„ZdS)ÚUnknownFloatTyperRcCs||_|d|_dSr]r^r_rrrrJÃszUnknownFloatType.__init__cCstd|jƒ‚dS)Nz2float type '%s' can only be used after compilationrerMrrrr+Çsÿz#UnknownFloatType.build_backend_typeNrNrrrrrgÀsrgc@seZdZdZddd„ZdS)ÚBaseFunctionType)Úargsr!ÚellipsisÚabiNcCs’||_||_||_||_dd„|jDƒ}|jr8| d¡|p@dg}|jd |¡f}|dur||dd…|d|dd…}|jj d|¡|_dS) NcSsg|] }| ¡‘qSrr$)r4Úargrrrr6Õr7z-BaseFunctionType.__init__..ú...Zvoidz, rrr) rir!rjrkÚappendÚ _base_patternÚjoinrr)rrir!rjrkZreprargsrrrrrJÏs   ÿzBaseFunctionType.__init__)N©r:r;r<r8rJrrrrrhÌsrhc@s$eZdZdZdZdd„Zdd„ZdS)ÚRawFunctionTypez(&)(%s)TcCstd|fƒ‚dS)NzPcannot render the type %r: it is a function type, not a pointer-to-function type)rrMrrrr+çsÿz"RawFunctionType.build_backend_typecCst|j|j|j|jƒSr()ÚFunctionPtrTyperir!rjrkr#rrrÚas_function_pointerësz#RawFunctionType.as_function_pointerN)r:r;r<ror>r+rtrrrrrràsrrc@s eZdZdZdd„Zdd„ZdS)rsz(*&)(%s)cCs†|j ||¡}g}|jD]}| | ||¡¡qd}|jdkrf|jsfz|jjf}WntydYn0t ||dt |ƒ||jg|¢RŽS)NrZ __stdcallZnew_function_type) r!r1rirnrkrjÚ_backendZ FFI_STDCALLÚAttributeErrorrLrF)rr-r.r!riÚtpZabi_argsrrrr+òs     ÿÿz"FunctionPtrType.build_backend_typecCst|j|j|j|jƒSr()rrrir!rjrkr#rrrÚas_raw_functionszFunctionPtrType.as_raw_functionN)r:r;r<ror+rxrrrrrsïsrsc@s"eZdZdZddd„Zdd„ZdS) Ú PointerType)Útotyper rcCs>||_||_t|dƒ}|jr*d| ¡f}|j d|¡|_dS)Nz *&rr)rzr rr=r rr)rrzr ZextrarrrrJs  zPointerType.__init__cCs |jj||dd�}t||d|ƒS)NT)r/Únew_pointer_type)rzr1rL)rr-r.ZBItemrrrr+szPointerType.build_backend_typeN)rrNrrrrrys rycCs t|tƒSr()ryr )rzrrrÚConstPointerTypesr|c@seZdZdZddd„ZdS)ÚNamedPointerType)rzr5rcCs"t |||¡||_|d|_dSr])ryrJr5r)rrzr5r rrrrJszNamedPointerType.__init__N)rrqrrrrr}sr}c@s4eZdZdZdZdd„Zdd„Zdd„Zd d „Zd S) Ú ArrayType)ÚitemÚlengthTcCsF||_||_|durd}n|dkr(d}nd|}|jj d|¡|_dS)Nz&[]rmz &[/*...*/]z&[%s]r)rr€rr)rrr€ZbracketsrrrrJ)sÿzArrayType.__init__cCs t|jtƒSr()Ú isinstancer€Ústrr#rrrÚlength_is_unknown6szArrayType.length_is_unknowncCs t|j|ƒSr()r~r)rZ newlengthrrrÚresolve_length9szArrayType.resolve_lengthcCsH| ¡rtd|fƒ‚|j ||¡t|jƒ ||¡}t||d||jƒS)Nz)cannot render the type %r: unknown lengthZnew_array_type)rƒrrr1ryrLr€)rr-r.ZBPtrItemrrrr+<sÿzArrayType.build_backend_typeN) r:r;r<r8r=rJrƒr„r+rrrrr~%s  r~rWc@s,eZdZdZdZdd„Zdd„Zdd„ZdS) ÚStructOrUnionOrEnumrRNcCs$|jpd|j|jf}|d|_dS)Nz%s %sr)Ú forcenameÚkindr5rr_rrrÚbuild_c_name_with_markerKsz,StructOrUnionOrEnum.build_c_name_with_markercCs||_| ¡dSr()r†rˆ)rr†rrrÚforce_the_nameOsz"StructOrUnionOrEnum.force_the_namecCs|jdd…S)NéÿÿÿÿrIr#rrrÚget_official_nameSsz%StructOrUnionOrEnum.get_official_name)r:r;r<r8r†rˆr‰r‹rrrrr…Gs r…c@sjeZdZdZdZdZdZddd„Zdd„Zdd d „Z d d „Z dd d„Z dd„Z dd„Z dd„Zdd„ZdS)Ú StructOrUnionNrFcCs*||_||_||_||_||_| ¡dSr()r5ÚfldnamesÚfldtypesÚ fldbitsizeÚfldqualsrˆ)rr5r�rŽr�r�rrrrJ^s zStructOrUnion.__init__ccs>|jdur:t|j|jƒD] \}}|dkrt|tƒr|VqdS)Nr)rŽÚzipr�r�rŒ)rr5ÚtyperrrÚanonymous_struct_fieldsfs z%StructOrUnion.anonymous_struct_fieldsTccs||j}|durdt|jƒ}t|j|j|j|ƒD]F\}}}}|dkrht|tƒrh|rh| ¡D] }|VqZq0||||fVq0dS)N)rr) r�Úlenr�r‘rŽr�r�rŒÚ enumfields)rZexpand_anonymous_struct_unionr�r5r’Úbitsizer r!rrrr•ls ÿÿ  zStructOrUnion.enumfieldsc Cszg}g}g}g}| ¡D]4\}}}}| |¡| |¡| |¡| |¡qt|ƒ|_t|ƒ|_t|ƒ|_t|ƒ|_dSr()r•rnrFr�rŽr�r�) rÚnamesÚtypesZbitsizesr�r5r’r–r rrrÚ force_flattenzs       zStructOrUnion.force_flattencCs$t ||||¡}|s | ||¡|Sr()r…r1Úfinish_backend_type)rr-r.r/r0rrrr1Œs  ÿ zStructOrUnion.get_cached_btypecs$|jr$|jdkr td|jfƒ‚dSˆj|}d|_|jdurB�nØ|jdurº‡‡fdd„|jDƒ}tt|j||j ƒƒ}d}|j rš|j dkr�d}n d|j f}ˆj j |||d d g|¢RŽ�n`g}|j\}}} } t t|jƒƒD�]} || } |j| } t| tƒ�r†|  ¡�r†| j ˆˆ¡}t| ˆ |¡ƒ\}}|dk�rT| d |j|j| �pLd f¡|  |¡} |jd| …| f|j| dd…|_|  ˆˆ¡}t| tƒ�r¬| jdu�r¬n8ˆ |¡}|| k�rä| d |j|j| �pØd || f¡| |¡qÚtt|j||j |ƒƒ}ˆj   |||| | ¡d|_dS) Nrz(recursive structure declaration for '%s'rcsg|]}| ˆˆ¡‘qSr)r1)r4rw©r-r.rrr6¡sÿz5StructOrUnion.finish_backend_type..r)érrŠzfield '%s.%s' has a bogus size?z{}z=field '%s.%s' is declared as %d bytes, but is really %d bytes)Ú completedrfr5r)rŽÚ fixedlayoutÚlistr‘r�r�ÚpackedruZcomplete_struct_or_unionÚranger”r�r~rƒrr1ÚdivmodÚsizeofÚ_verification_errorr„r€rn)rr-r.r0rŽZlstÚ extra_flagsZfieldofsZ fieldsizeZ totalsizeZtotalalignmentrTZfsizeZftypeZ BItemTypeZnlenZnrestZ BFieldTypeZ bitemsizerr›rrš“s| ÿ    ÿ   ÿÿ   ÿÿ ÿ   þÿÿ  ÿz!StructOrUnion.finish_backend_typecCs t|ƒ‚dSr()r)rÚmsgrrrr¤Òsz!StructOrUnion._verification_errorcCs |jr|jdurt| ¡ƒ‚dSr()Úpartialržrrr#rrrÚcheck_not_partialÕszStructOrUnion.check_not_partialcCs.| ¡| |¡t||d|j| ¡|d�S)Nz new_%s_type©Úkey)r¨rnrLr‡r‹rMrrrr+Ùs  ÿz StructOrUnion.build_backend_type)N)T)F)r:r;r<ržr�r§r rJr“r•r™r1ršr¤r¨r+rrrrrŒXs   ?rŒc@seZdZdZdS)Ú StructTypeÚstructN©r:r;r<r‡rrrrr«ásr«c@seZdZdZdS)Ú UnionTypeÚunionNr­rrrrr®åsr®c@sBeZdZdZdZdZddd„Zdd„Zdd „Zd d „Z d d „Z dS)ÚEnumTypeÚenumFNcCs$||_||_||_||_| ¡dSr()r5Ú enumeratorsÚ enumvaluesÚ baseinttyperˆ)rr5r²r³r´rrrrJîs zEnumType.__init__cCs4t ||¡|jdur0| ¡}d| dd¡|_dS)NrrÚ_)r…r‰r†r‹r)rr†r5rrrr‰õs  zEnumType.force_the_namecCs|jr|jst| ¡ƒ‚dSr()r§Úpartial_resolvedrrr#rrrr¨ûs zEnumType.check_not_partialc Cs4| ¡| ||¡}t||d| ¡|j|j||d�S)NZ new_enum_typer©)r¨Úbuild_baseinttyperLr‹r²r³)rr-r.Z base_btyperrrr+ÿs ýzEnumType.build_backend_typec CsH|jdur|j ||¡S|jr4t|jƒ}t|jƒ}nBddl}z t ¡WntyZYn0|  d|  ¡¡d}}|dkr”d}t dƒ}t dƒ}nd}t dƒ}t dƒ}| ||¡} | ||¡} |  | ¡} |  | ¡} |dd | d>k�r|dd | |>k�r| S|dd | d>k�r4|dd | |>k�r4| St d |  ¡ƒ‚dS) NrzU%r has no values explicitly defined; guessing that it is equivalent to 'unsigned int'rrXrYrZr[rŠrœz=%s values don't all fit into either 'long' or 'unsigned long')r´r1r³ÚminÚmaxÚwarningsZ__warningregistry__ÚclearÚ NameErrorÚwarnrrQr£r) rr-r.Zsmallest_valueZ largest_valuerºÚsignZ candidate1Z candidate2Zbtype1Zbtype2Zsize1Zsize2rrrr·sH     þ     ÿÿÿzEnumType.build_baseinttype)N) r:r;r<r‡r§r¶rJr‰r¨r+r·rrrrr°és r°cCs2|durd|}t|dddƒ}| |¡d|_|S)Nz$%sÚ unknown_type)r«r‰Úorigin©r5Z structnamerwrrrr¿0s  r¿cCs(|durd|}t|dddƒ}t||ƒS)Nz$$%s)r«r}rÁrrrÚunknown_ptr_type8srÂcCs^t|tjƒrtSt�6tt|ƒdƒs2t ¡t|ƒ_ t|ƒj WdƒS1sP0YdS)NÚ __typecache) r�r˜Ú ModuleTypeÚ_typecache_cffi_backendÚ global_lockÚhasattrr’ÚweakrefÚWeakValueDictionaryrÃ)ZbackendrrrÚ get_typecacheBs  rÊc Osè| d||f¡}z |j|WSty.Yn0zt|j|ƒ|Ž}Wn6tyz}ztd|||fƒ‚WYd}~n d}~00|j}t�N| |¡} | dur´|||<|WdƒS| WdƒSWdƒn1sÚ0YdS)Nrªz %s: %r: %s)ÚpopZ _typecacher*r3rurfrÆÚget) Zsrctyper-ÚfuncnameriÚkwdsrªÚresÚeÚcacheZres1rrrrLMs   ( rLcCstd|d|ƒS)Nú?r{rK)r-r0rrrÚ pointer_cachedsrÓcCs@|jrsN  /  L   G