Ë
    pPêj2N ã                  óÌ  — U d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 dd	l7m8Z8 dd
l9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE ddlFmGZGmHZH ddlImJZJmKZK ddlLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZY ddlZm[Z[ ddl\m]Z] ddl^m_Z_m`Z` ddlambZbmcZcmdZdmeZemfZf ddlgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZm€Z€ ddl�m‚Z‚mƒZƒm„Z„m…Z…m†Z†m‡Z‡mˆZˆm‰Z‰mŠZŠm‹Z‹mŒZŒm�Z�mŽZŽm�Z�m�Z�m‘Z‘m’Z’m“Z“m”Z”m•Z•m–Z–m—Z— ddl˜m™Z™ ddlšm›Z›mœZœ ddl�mžZž ddlŸm Z  ddl¡m¢Z¢m£Z£m¤Z¤m¥Z¥ ddl¦m§Z§ ddl¨m©Z© ddlªm«Z«m¬Z¬m­Z­m®Z®m¯Z¯ ddl°m±Z±m²Z²m³Z³ ddl´mµZµ ddl¶m·Z· ddl¸m¹Z¹mºZº dd l»m¼Z¼m½Z½m¾Z¾ dd!l¿mÀZÀmÁZÁmÂZÂmÃZÃ dd"lÄmÅZÅmÆZÆmÇZÇmÈZÈmÉZÉmÊZÊmËZË dd#lÌmÍZÍmÎZÎ dd$lÏmÐZÐ h d%£ZÑd&eÒd'<    G d(„ d)eJe€   eKd*   «      ZÓ G d+„ d,eÔ«      ZÕe®e¬z  ZÖ G d-„ d.«      Z×d:d/„ZØd;d0„ZÙd<d1„ZÚ G d2„ d3e8«      ZÛd=d4„ZÜ G d5„ d6e8«      ZÝd>d7„ZÞ	 	 	 	 	 	 	 	 	 	 d?d8„Zß	 	 	 	 	 	 	 	 	 	 d@d9„Zày*)AzrBuilder class to transform a mypy AST to the IR form.

See the docstring of class IRBuilder for more information.
é    )Úannotations)ÚCallableÚIteratorÚSequence)Úcontextmanager)ÚAnyÚFinalÚoverload)ÚGraph)Úmap_instance_to_supertype)%Ú	ARG_NAMEDÚARG_POSÚGDEFÚLDEFÚPARAM_SPEC_KINDÚTYPE_VAR_KINDÚTYPE_VAR_TUPLE_KINDÚArgKindÚAssignmentExprÚ	AwaitExprÚCallExprÚ	DecoratorÚDictionaryComprehensionÚ
ExpressionÚFuncDefÚFuncItemÚGeneratorExprÚ	IndexExprÚIntExprÚ
LambdaExprÚLvalueÚ
MemberExprÚMypyFileÚNameExprÚOpExprÚOverloadedFuncDefÚRefExprÚStarExprÚ	StatementÚ
SymbolNodeÚ	TupleExprÚ	TypeAliasÚTypeInfoÚ	TypeParamÚVarÚ	YieldExprÚYieldFromExpr)ÚTraverserVisitor)ÚAnyTypeÚDeletedTypeÚInstanceÚ
ProperTypeÚ	TupleTypeÚTypeÚTypedDictTypeÚ	TypeOfAnyÚTypeVarLikeTypeÚUninhabitedTypeÚ	UnionTypeÚget_proper_type)Úmodule_prefixÚsplit_target)ÚExpressionVisitorÚStatementVisitor)ÚBITMAP_BITSÚ
EXT_SUFFIXÚGENERATOR_ATTRIBUTE_PREFIXÚIS_FREE_THREADEDÚKEEP_ALIVE_SHORT_LIVEDÚKEEP_ALIVE_WHOLE_EXPRESSIONÚ	SELF_NAMEÚ generator_frame_attribute_prefixÚmodule_exec_nameÚmodule_import_state_nameÚmodule_init_only_nameÚmodule_lock_api_nameÚshared_lib_name)Úcatch_errors)ÚErrors)ÚClassIRÚNonExtClassInfo)ÚINVALID_FUNC_DEFÚFuncDeclÚFuncIRÚFuncSignatureÚ
RuntimeArg)ÚNAMESPACE_MODULEÚNAMESPACE_TYPE_VARÚNO_TRACEBACK_LINE_NOÚAssignÚ
BasicBlockÚBranchÚCallÚCastÚComparisonOpÚGetAttrÚ
InitStaticÚIntegerÚIntOpÚLoadAddressÚ
LoadGlobalÚ
LoadStaticÚ
MethodCallÚOpÚPrimitiveDescriptionÚRaiseStandardErrorÚRegisterÚSetAttrÚTupleGetÚUnreachableÚValue)Ú	RInstanceÚRTupleÚRTypeÚRUnionÚRVecÚbitmap_rprimitiveÚbool_rprimitiveÚbytes_rprimitiveÚc_pointer_rprimitiveÚc_pyssize_t_rprimitiveÚdict_rprimitiveÚint_rprimitiveÚis_float_rprimitiveÚis_list_rprimitiveÚis_none_rprimitiveÚis_object_rprimitiveÚ	is_taggedÚis_tuple_rprimitiveÚnone_rprimitiveÚobject_pointer_rprimitiveÚobject_rprimitiveÚstr_rprimitive)Úconstant_fold_expr)ÚFuncInfoÚImplicitClass)ÚLowLevelIRBuilder)ÚMapper)ÚBaseNonlocalControlÚGeneratorNonlocalControlÚLoopNonlocalControlÚNonlocalControl)ÚPreBuildVisitor)ÚRegisterImplInfo)ÚAssignmentTargetÚAssignmentTargetAttrÚAssignmentTargetIndexÚAssignmentTargetRegisterÚAssignmentTargetTuple)Úbytes_from_strÚget_func_defÚis_constant)Úvec_set_item)ÚCompilerOptions)Údict_get_item_opÚdict_set_item_op)Úiter_opÚnext_opÚpy_setattr_op)Úlist_get_item_int64_opÚlist_get_item_unsafe_opÚlist_pop_lastÚto_list)Úcheck_unpack_count_opÚget_module_dict_opÚimport_cache_get_for_import_opÚ"import_cache_replace_for_import_opÚ	import_opÚnative_import_is_initialized_opÚnative_import_op)ÚCFunctionDescriptionÚfunction_ops)Útuple_get_item_unsafe_op>   ú!=ú==ú>=ú+ú-ú<ú>ú<=r	   Úint_borrow_friendly_opc                  ó   — e Zd Zy)Ú	IRVisitorN©Ú__name__Ú
__module__Ú__qualname__© ó    úZ/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypyc/irbuild/builder.pyrº   rº   »   ó   „ ØrÀ   rº   Nc                  ó   — e Zd Zy)ÚUnsupportedExceptionNr»   r¿   rÀ   rÁ   rÄ   rÄ   ¿   rÂ   rÀ   rÄ   c                  óž  — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d‡d„Zdˆd„Zeddœd‰d„«       ZedŠd„«       Zddœd‹d„Zed	œdŒd
„Z	d�d„Z
dŽd„Zd�d„Zd�d„Zd�d„Zd‘d„Zd’d“d„Zd’d“d„Zd’d”d„Zd’d•d„Zd–d„Zd—d„Zd˜d™d„Zd’dšd„Zd’dšd„Zd’dšd„Zd’dšd„Zd›d„Zd›d„Zd—d„Z	 	 dœ	 	 	 	 	 	 	 	 	 	 	 d�d „Zdžd!„ZdŸd"„Z 	 	 dœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d d#„Z!d¡d$„Z"d¢d%„Z#	 d£	 	 	 	 	 	 	 	 	 d¤d&„Z$d¥d'„Z%d¦d(„Z&d˜d§d)„Z'd¨d*„Z(d©d+„Z)dªd,„Z*	 	 	 	 	 	 	 	 	 	 d«d-„Z+d¬d.„Z,	 d£	 	 	 	 	 	 	 	 	 	 	 	 	 d­d/„Z-d®d0„Z.d¯d1„Z/d°d2„Z0	 	 	 	 	 	 	 	 	 	 d±d3„Z1d²d4„Z2d²d5„Z3d²d6„Z4d³d7„Z5d´d8„Z6dµd9„Z7	 d£dd:œ	 	 	 	 	 	 	 	 	 d¶d;„Z8	 d£	 	 	 	 	 	 	 	 	 d·d<„Z9d¸d=„Z:d¹d>„Z;	 d’	 	 	 	 	 dºd?„Z<	 d’dd@œ	 	 	 	 	 	 	 d»dA„Z=	 d’dddBœ	 	 	 	 	 	 	 	 	 d¼dC„Z>d½dD„Z?d¾dE„Z@	 	 	 	 	 	 	 	 d¿dF„ZA	 	 	 	 	 	 	 	 dÀdG„ZB	 	 	 	 	 	 	 	 dÁdH„ZCdÂdI„ZDd²dJ„ZEdÃdK„ZFdÄdL„ZGdÅdM„ZHdÆdN„ZIdÇdO„ZJdÈdP„ZKdÅdQ„ZLdÅdR„ZMdÅdS„ZNdÉdT„ZOdÊdU„ZPdÊdV„ZQdÊdW„ZRdËdX„ZSdËdY„ZTdÌdZ„ZUdÍd[„ZVdÎd\„ZWdÏd]„ZX	 	 	 	 	 	 	 	 	 	 	 	 	 	 dÐd^„ZYdÑd_„ZZ	 	 	 	 	 	 	 	 dÒd`„Z[dÓda„Z\dÔdb„Z]dÕe^dcœdÖdd„Z_d×de„Z`eadØdf„«       ZbeadÙdg„«       Zcea	 	 	 dÚ	 	 	 	 	 	 	 	 	 	 	 	 	 dÛdh„«       ZdeefdÜdi„ZfdÝdj„Zgd˜dÞdk„Zh	 d˜	 	 	 	 	 	 	 dßdl„Zidàdm„Zjdádn„Zkdâdo„Zldãdp„Zm	 	 	 	 dä	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dådq„Zndædr„Zodçds„Zp	 	 	 dè	 	 	 	 	 	 	 	 	 	 	 	 	 dédt„Zq	 	 	 	 dä	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dêdu„ZrdËdv„Zsdëdw„Ztd¹dx„Zudìdy„Zvdídz„ZwdÑd{„ZxdÑd|„Zydîd}„Zzd²d~„Z{dïd„Z|dðd€„Z}dðd�„Z~dðd‚„Zdñdƒ„Z€dòd„„Z�dód…„Z‚dôd†„Zƒy)õÚ	IRBuilderah  Builder class used to construct mypyc IR from a mypy AST.

    The IRBuilder class maintains IR transformation state and provides access
    to various helpers used to implement the transform.

    mypyc.irbuild.visitor.IRBuilderVisitor is used to dispatch based on mypy
    AST node type to code that actually does the bulk of the work. For
    example, expressions are transformed in mypyc.irbuild.expression and
    functions are transformed in mypyc.irbuild.function.

    Use the "accept()" method to translate individual mypy AST nodes to IR.
    Other methods are used to generate IR for various lower-level operations.

    This class wraps the lower-level LowLevelIRBuilder class, an instance
    of which is available through the "builder" attribute. The low-level
    builder class doesn't have any knowledge of the mypy AST. Wrappers for
    some LowLevelIRBuilder method are provided for convenience, but others
    can also be accessed via the "builder" attribute.

    See also:
     * The mypyc IR is defined in the mypyc.ir package.
     * The top-level IR transform control logic is in mypyc.irbuild.main.
    c
                óØ  — t        ||«      | _        | j                  g| _        i g| _        g g| _        g | _        g | _        dg| _        || _        || _	        || _
        || _        g | _        g | _        t        «       | _        g | _        g | _        g | _        t        «       | _        || _        d| _        |j,                  | _        |j.                  | _        |j0                  | _        |j2                  j5                  «       | _        |j8                  | _        |j<                  | _        |j>                  | _        |j@                  | _         |	| _!        || _"        i | _#        d | _$        d | _%        tM        tN        dd«      | _(        | jP                  g| _)        g | _*        || _+        i | _,        d| _-        d| _.        t        «       | _/        d| _0        g | _1        g | _2        g | _3        d | _4        y )NTr   Ú F)5r‹   ÚbuilderÚbuildersÚ	symtablesÚruntime_argsÚfunction_name_stackÚclass_ir_stackÚblock_reachable_stackÚcurrent_moduleÚmapperÚtypesÚgraphÚ	ret_typesÚ	functionsÚsetÚfunction_namesÚclassesÚfinal_namesÚtype_var_namesÚcallable_class_namesÚoptionsÚlambda_counterÚfree_variablesÚprop_settersÚencapsulating_funcsÚnested_funcsÚkeysÚnested_fitemsÚfuncs_to_decoratorsÚfdefs_to_decoratorsÚmodule_import_groupsÚcomprehension_to_fitemÚdeleted_varsÚsingledispatch_implsÚvisitorÚclass_body_classvarsÚclass_body_objÚclass_body_irr‰   rT   Úfn_infoÚfn_infosÚnonlocal_controlÚerrorsÚimportsÚ
can_borrowÚexpression_depthÚreassigned_in_exprÚexpr_has_suspendÚexpression_depth_stackÚreassigned_in_expr_stackÚexpr_has_suspend_stackÚglobals_lookup_module)
ÚselfrÐ   rÒ   rÓ   rñ   rÑ   Úpbvrê   rÜ   ré   s
             rÁ   Ú__init__zIRBuilder.__init__ß   sÚ  € ô )¨°Ó9ˆŒØŸ™˜ˆŒØ@B¸tˆŒØ57°DˆÔØ.0ˆÔ Ø-/ˆÔð 37°ˆÔ"à,ˆÔØˆŒØˆŒ
ØˆŒ
Ø&(ˆŒØ')ˆŒÜ;>»5ˆÔØ&(ˆŒØ46ˆÔØ)+ˆÔÜ.1«eˆÔ!ØˆŒð  ˆÔð "×0Ñ0ˆÔØ×,Ñ,ˆÔØ#&×#:Ñ#:ˆÔ Ø ×-Ñ-×2Ñ2Ó4ˆÔØ#&×#:Ñ#:ˆÔ Ø$'×$<Ñ$<ˆÔ!Ø&)×&@Ñ&@ˆÔ#Ø×,Ñ,ˆÔà$8ˆÔ!àˆŒð 68ˆÔ!Ø,0ˆÔØ-1ˆÔô  Ô 0°"°bÓ9ˆŒØ)-¯©¨ˆŒð 8:ˆÔàˆŒð )+ˆŒàˆŒØ !ˆÔô 47³5ˆÔð
 !&ˆÔà13ˆÔ#Ø?AˆÔ%Ø24ˆÔ#ð 26ˆÕ"rÀ   c                óX   — || _         || _        | j                  j                  ||«       y)zuSet the name and path of the current module.

        This must be called before transforming any AST nodes.
        N)Úmodule_nameÚmodule_pathrÉ   Ú
set_module)rû   rÿ   r   s      rÁ   r  zIRBuilder.set_moduleC  s(   € ð
 'ˆÔØ&ˆÔØ�‰×Ñ ¨[Õ9rÀ   F©ró   c                ó   — y ©Nr¿   )rû   Únoderó   s      rÁ   ÚacceptzIRBuilder.acceptL  s   € ØNQrÀ   c                 ó   — y r  r¿   )rû   r  s     rÁ   r  zIRBuilder.acceptO  s   € Ø/2rÀ   c               ó‚  — | j                  |j                  «      5  t        |t        «      �r)| xj                  dz  c_        | j                  dk(  r t        |«      | _        t        |«      | _        | j                  }|| _        	 |j                  | j                  «      }| j                  || j                  |«      |j                  «      }|| _        |s| j                  |j                  «       | xj                  dz  c_        | j                  dk(  r7| j                  |j                  t         ¬«       t#        «       | _        d| _        |cddd«       S 	 |j                  | j                  «       	 ddd«       y# t        $ r t        | j                  |«      «      }Y ŒÕw xY w# t        $ r Y Œ>w xY w# 1 sw Y   yxY w)a  Transform an expression or a statement.

        If can_borrow is true, prefer to generate a borrowed reference.
        Borrowed references are faster since they don't require reference count
        manipulation, but they are only safe to use in specific contexts.
        é   r   ©ÚscopeFN)rP   ÚlineÚ
isinstancer   rô   Úfind_walrus_targetsrõ   rö   ró   r  rê   ÚcoerceÚ	node_typerÄ   rm   Úflush_keep_alivesrH   rÖ   )rû   r  ró   Úold_can_borrowÚress        rÁ   r  zIRBuilder.acceptR  s~  € ð ×Ñ˜tŸy™yÓ)ñ 	Ü˜$¤
Õ+Ø×%Ò%¨Ñ*Õ%Ø×(Ñ(¨AÒ-Ü.AÀ$Ó.G�DÔ+Ü,<¸TÓ,B�DÔ)Ø!%§¡�Ø",�”ð9ØŸ+™+ d§l¡lÓ3�CØŸ+™+ c¨4¯>©>¸$Ó+?ÀÇÁÓK�Cð #1�”Ù!Ø×*Ñ*¨4¯9©9Ô5Ø×%Ò%¨Ñ*Õ%Ø×(Ñ(¨AÒ-Ø×*Ñ*¨4¯9©9Ô<WÐ*ÔXÜ.1«e�DÔ+Ø,1�DÔ)Ø÷3	ñ 	ð6Ø—K‘K §¡Ô-ð ÷?	ð 	øô ,ò 9Ü" 4§>¡>°$Ó#7Ó8’Cð9ûô ,ò Ùðú÷;	ð 	úsV   œA)F5ÂAE=ÃB F5ÅF&Å3F5Å=#F#Æ F5Æ"F#Æ#F5Æ&	F2Æ/F5Æ1F2Æ2F5Æ5F>r
  c               ó>   — | j                   j                  ||¬«       y )Nr
  )rÉ   r  )rû   r  r  s      rÁ   r  zIRBuilder.flush_keep_alivesz  s   € Ø�‰×&Ñ& t°5Ð&Õ9rÀ   c                ó8   — | j                   j                  |«      S r  )rÉ   Úadd)rû   Úops     rÁ   r  zIRBuilder.add  s   € Ø�|‰|×Ñ Ó#Ð#rÀ   c                ó:   — | j                   j                  |«       y r  )rÉ   Úgoto)rû   Útargets     rÁ   r  zIRBuilder.goto‚  s   € Ø�‰×Ñ˜&Õ!rÀ   c                ó:   — | j                   j                  |«       y r  )rÉ   Úactivate_block©rû   Úblocks     rÁ   r  zIRBuilder.activate_block…  s   € Ø�‰×#Ñ# EÕ*rÀ   c                ó:   — | j                   j                  |«       y r  )rÉ   Úgoto_and_activater  s     rÁ   r   zIRBuilder.goto_and_activateˆ  s   € Ø�‰×&Ñ& uÕ-rÀ   c                ó6   — | j                   j                  «       S r  )rÉ   rû   ©rû   s    rÁ   rû   zIRBuilder.self‹  s   € Ø�|‰|× Ñ Ó"Ð"rÀ   c                ó<   — | j                   j                  |||«      S r  )rÉ   Úpy_get_attr)rû   ÚobjÚattrr  s       rÁ   r$  zIRBuilder.py_get_attrŽ  s   € Ø�|‰|×'Ñ'¨¨T°4Ó8Ð8rÀ   c                ó:   — | j                   j                  ||«      S r  )rÉ   Úload_str©rû   Úvaluer  s      rÁ   r(  zIRBuilder.load_str‘  ó   € Ø�|‰|×$Ñ$ U¨DÓ1Ð1rÀ   c                óL   — | j                   j                  t        |«      |«      S )zõLoad bytes object from a string literal.

        The literal characters of BytesExpr (the characters inside b'')
        are stored in BytesExpr.value, whose type is 'str' not 'bytes'.
        Thus we perform a special conversion here.
        )rÉ   Ú
load_bytesr˜   r)  s      rÁ   Úload_bytes_from_str_literalz%IRBuilder.load_bytes_from_str_literal”  s    € ð �|‰|×&Ñ&¤~°eÓ'<¸dÓCÐCrÀ   c                ó:   — | j                   j                  ||«      S r  )rÉ   Úload_intr)  s      rÁ   r0  zIRBuilder.load_int�  r+  rÀ   c                ó:   — | j                   j                  ||«      S r  )rÉ   Ú
load_floatr)  s      rÁ   r2  zIRBuilder.load_float   s   € Ø�|‰|×&Ñ& u¨dÓ3Ð3rÀ   c                ó<   — | j                   j                  |||«      S r  )rÉ   Úunary_op)rû   ÚlregÚexpr_opr  s       rÁ   r4  zIRBuilder.unary_op£  s   € Ø�|‰|×$Ñ$ T¨7°DÓ9Ð9rÀ   c                ó>   — | j                   j                  ||||«      S r  )rÉ   Ú	binary_op©rû   r5  Úrregr6  r  s        rÁ   r8  zIRBuilder.binary_op¦  s   € Ø�|‰|×%Ñ% d¨D°'¸4Ó@Ð@rÀ   c                óV   — | j                   j                  ||||| j                  ¬«      S )Nr  )rÉ   r  ró   )rû   ÚsrcÚtarget_typer  Úforces        rÁ   r  zIRBuilder.coerce©  s&   € Ø�|‰|×"Ñ" 3¨°T¸5ÈTÏ_É_Ð"Ó]Ð]rÀ   c                ó8   — | j                   j                  |«      S r  )rÉ   Únone_object©rû   r  s     rÁ   r@  zIRBuilder.none_object¬  ó   € Ø�|‰|×'Ñ'¨Ó-Ð-rÀ   c                ó8   — | j                   j                  |«      S r  )rÉ   ÚnonerA  s     rÁ   rD  zIRBuilder.none¯  ó   € Ø�|‰|× Ñ  Ó&Ð&rÀ   c                ó8   — | j                   j                  |«      S r  )rÉ   ÚtruerA  s     rÁ   rG  zIRBuilder.true²  rE  rÀ   c                ó8   — | j                   j                  |«      S r  )rÉ   ÚfalserA  s     rÁ   rI  zIRBuilder.falseµ  s   € Ø�|‰|×!Ñ! $Ó'Ð'rÀ   c                ó:   — | j                   j                  ||«      S r  )rÉ   Únew_list_op©rû   Úvaluesr  s      rÁ   rK  zIRBuilder.new_list_op¸  s   € Ø�|‰|×'Ñ'¨°Ó5Ð5rÀ   c                ó:   — | j                   j                  ||«      S r  )rÉ   Ú
new_set_oprL  s      rÁ   rO  zIRBuilder.new_set_op»  s   € Ø�|‰|×&Ñ& v¨tÓ4Ð4rÀ   c                ó>   — | j                   j                  ||||«      S r  )rÉ   Útranslate_is_opr9  s        rÁ   rQ  zIRBuilder.translate_is_op¾  s   € Ø�|‰|×+Ñ+¨D°$¸ÀÓFÐFrÀ   Nc                ó@   — | j                   j                  |||||«      S r  )rÉ   Úpy_call)rû   ÚfunctionÚ
arg_valuesr  Ú	arg_kindsÚ	arg_namess         rÁ   rS  zIRBuilder.py_callÁ  s!   € ð �|‰|×#Ñ# H¨j¸$À	È9ÓUÐUrÀ   c                ó>   — | j                   j                  |||«       y r  )rÉ   Úadd_bool_branch)rû   r*  rG  rI  s       rÁ   rY  zIRBuilder.add_bool_branchË  s   € Ø�‰×$Ñ$ U¨D°%Õ8rÀ   c                ó8   — | j                   j                  |«      S r  )rÉ   Úload_native_type_object)rû   Úfullnames     rÁ   r[  z!IRBuilder.load_native_type_objectÎ  s   € Ø�|‰|×3Ñ3°HÓ=Ð=rÀ   c           
     óZ   — | j                   j                  |||||||| j                  «      S r  )rÉ   Úgen_method_callró   )rû   ÚbaseÚnamerU  Úresult_typer  rV  rW  s           rÁ   r^  zIRBuilder.gen_method_callÑ  s0   € ð �|‰|×+Ñ+Ø�$˜
 K°°yÀ)ÈTÏ_É_ó
ð 	
rÀ   c                ó8   — | j                   j                  |«      S r  )rÉ   Úload_module)rû   r`  s     rÁ   rc  zIRBuilder.load_moduleß  rB  rÀ   c                ó<   — | j                   j                  |||«      S r  )rÉ   Úcall_c)rû   ÚdescÚargsr  s       rÁ   re  zIRBuilder.call_câ  s   € Ø�|‰|×"Ñ" 4¨¨tÓ4Ð4rÀ   c                ó>   — | j                   j                  ||||«      S r  )rÉ   Úprimitive_op)rû   rf  rg  r  ra  s        rÁ   ri  zIRBuilder.primitive_opå  s   € ð �|‰|×(Ñ(¨¨t°T¸;ÓGÐGrÀ   c                ó@   — | j                   j                  |||||«      S r  )rÉ   Úint_op)rû   ÚtypeÚlhsÚrhsr  r  s         rÁ   rk  zIRBuilder.int_opî  s   € Ø�|‰|×"Ñ" 4¨¨c°2°tÓ<Ð<rÀ   c                ó>   — | j                   j                  ||||«      S r  )rÉ   Úcompare_tuples)rû   rm  rn  r  r  s        rÁ   rp  zIRBuilder.compare_tuplesñ  s   € Ø�|‰|×*Ñ*¨3°°R¸Ó>Ð>rÀ   c                ó<   — | j                   j                  |||«      S r  )rÉ   Úbuiltin_len)rû   Úvalr  Úuse_pyssize_ts       rÁ   rr  zIRBuilder.builtin_lenô  s   € Ø�|‰|×'Ñ'¨¨T°=ÓAÐArÀ   c                ó:   — | j                   j                  ||«      S r  )rÉ   Ú	new_tuple)rû   Úitemsr  s      rÁ   rv  zIRBuilder.new_tuple÷  s   € Ø�|‰|×%Ñ% e¨TÓ2Ð2rÀ   c                ó8   — | j                   j                  |«      S r  )rÉ   Údebug_print)rû   Útoprints     rÁ   ry  zIRBuilder.debug_printú  s   € Ø�|‰|×'Ñ'¨Ó0Ð0rÀ   c                ó<   — | j                   j                  ||«       y)zFMake an object immortal on free-threaded builds (to avoid contention).N)rÉ   Úset_immortal_if_free_threaded)rû   Úvr  s      rÁ   r|  z'IRBuilder.set_immortal_if_free_threadedý  s   € à�‰×2Ñ2°1°dÕ;rÀ   c                ó¨   — | j                  ||«      }| j                  t        |j                  ||g|«       | j                  j                  ||«       y r  )r(  ri  rž   ÚdictrÉ   r|  )rû   Únon_extÚkeyrs  r  Úkey_unicodes         rÁ   Úadd_to_non_ext_dictzIRBuilder.add_to_non_ext_dict  sH   € ð —m‘m C¨Ó.ˆØ×ÑÔ*¨W¯\©\¸;ÈÐ,LÈdÔSð 	�‰×2Ñ2°3¸Õ=rÀ   c                óf  — d| j                   |<   t        «       t        «       }}t        t        |t        ¬«      }| j                  t        t        |«      «      }| j                  |«      }| j                  j                  j                  | j                  «      }|xr( | j                  j                  j                  |«      |k(  }	d}
d}d}|	rd| j                  t        t        t        |«      «      «      }|�)| j                  t        t        t        |«      «      «      }n#t!        dt        «      }n| j#                  ||«      }
|	r
t        «       n|}| j%                  |
|||||«       d}|	r_t'        t        |¬«      }| j)                  |«       | j                  t+        || j-                  ||«      |«      «       | j/                  |«       | j)                  |«       |	�r‹|€J ‚|€J ‚| j                  t        t        t1        |«      «      «      }| j                  t        t        t3        |«      «      «      }| j                  t        t4        t        t        |dz   t        ¬«      «      «      }|�_t7        |«      }| j9                  t:        g |«      }| j=                  t>        || j#                  ||«      g|«      }| jA                  |d|«      }n| jC                  |«      }| j#                  tD        |«      }| jG                  |«      }| j9                  tH        | j#                  ||«      ||||||||t!        |rdndtJ        «      g
|«      }|€J ‚| j                  t+        |||«      «       n|
€J ‚| j9                  tL        |
g|«      }|	s| j9                  tN        ||g|«       | jQ                  |«       |S )z=Import a module and return it for a same-group native import.N©Ú	namespacer   )r  Ú
__internalÚ__file__r	  ))rò   r]   rh   r†   rY   r  rf   rz   Úis_native_modulerÑ   Ú	group_mapÚgetrÿ   rL   rg   rN   rd   r(  Úcheck_if_module_loadedrm   r  r\   Ú
get_moduler  rM   rK   r…   rO   re  r§   ri  r�   r$  r@  rD   Úis_package_moduler¬   r{   rª   r©   r   )rû   Úmoduler  Úneeds_importÚoutÚmodule_staticÚmodule_cacher‰  Ú
group_nameÚis_same_group_nativeÚ	module_idÚimport_stateÚmodule_lock_apiÚalready_loadedÚresultÚinit_only_funcÚ	exec_funcÚmodule_internal_staticÚshared_lib_mod_nameÚmod_dictÚshared_lib_objÚshared_lib_fileÚ
ext_suffixÚis_pkgr*  s                            rÁ   Ú
gen_importzIRBuilder.gen_import  sw  € à#ˆ�‰�VÑä&›L¬*«,�cˆÜ"Ô#4°fÔHXÔYˆØ—x‘x¤Ô,@À-Ó PÓQˆØ×0Ñ0°Ó8ÐØ—[‘[×*Ñ*×.Ñ.¨t×/?Ñ/?Ó@ˆ
Ø/Òc°D·K±K×4IÑ4I×4MÑ4MÈfÓ4UÐYcÑ4cÐØ"&ˆ	Ø%)ˆØ(,ˆÙØŸ8™8ÜÔ0Ô2JÈ6Ó2RÓSóˆLð Ð%Ø"&§(¡(ÜÔ3Ô5IÈ*Ó5UÓVó#‘ô #*¨!Ô-AÓ"B‘àŸ™ f¨dÓ3ˆIÙ)=œœÀ3ˆØ×#Ñ#Ø�| T¨<¸Èô	
ð #'ˆÙô Ô/°dÔ;ˆFØ×Ñ Ô/Ø�H‰H”V˜F D§O¡O°F¸DÓ$AÀ4ÓHÔIØ�I‰I�cŒNà×Ñ˜LÔ)ÚØÐ+Ð+Ð+Ø"Ð.Ð.Ð.à!ŸX™XÜÔ/Ô1FÀvÓ1NÓOóˆNð Ÿ™¤Ô,@ÔBRÐSYÓBZÓ![Ó\ˆIØ%)§X¡XÜÜ-ÜÜ)¨6°LÑ+@ÔL\ôóó&Ð"ð Ð%Ü&5°jÓ&AÐ#ØŸ;™;Ô'9¸2¸tÓD�Ø!%×!2Ñ!2Ü$ x°·±Ð?RÐTXÓ1YÐ&ZÐ\`ó"�ð #'×"2Ñ"2°>À:ÈtÓ"T‘à"&×"2Ñ"2°4Ó"8�ØŸ™¤z°4Ó8ˆJØ×+Ñ+¨FÓ3ˆFØ—K‘KÜ à—M‘M &¨$Ó/Ø"ØØ*Ø Ø Ø#Ø#ØÜ¡™A¨QÔ0FÓGðð óˆEð  Ð%Ð%Ð%Ø�H‰H”V˜F E¨4Ó0Õ1ð Ð(Ð(Ð(Ø—K‘K¤	¨I¨;¸Ó=ˆEÙ#Ø�K‰KÔ:¸\È5Ð<QÐSWÔXØ×Ñ˜sÔ#ØˆrÀ   c                ó  — |€T|€J ‚| j                  t        ||g|«      }| j                  || j                  |«      d|«      }| j	                  |||«       y| j                  t
        |g|«      }	| j	                  |	||«       y)aÂ  Generate code that checks if a module cache has been populated.

        Arguments:
            module_id: module name used to validate a generic import cache
            module_cache: address of the module cache to check
            line: line number that the import occurs on
            needs_import: the BasicBlock that is run if the module has not been loaded yet
            out: the BasicBlock that is run if the module has already been loadedNzis not)re  r¨   rQ  r@  rY  r«   )
rû   r–  r“  r  r�  r‘  r—  Ú
first_loadÚ
comparisonÚinitializeds
             rÁ   rŒ  z IRBuilder.check_if_module_loadedm  s�   € ð" ÐØÐ(Ð(Ð(ØŸ™Ü.°¸yÐ0IÈ4óˆJð ×-Ñ-¨j¸$×:JÑ:JÈ4Ó:PÐRZÐ\`ÓaˆJØ× Ñ  ¨S°,Õ?àŸ+™+Ô&EÈÀ~ÐW[Ó\ˆKØ× Ñ  ¨c°<Õ@rÀ   c                ó‚   — | j                  t        g |«      }| j                  t        || j	                  ||«      g|«      S r  )re  r§   ri  r�   r(  )rû   r�  r  rŸ  s       rÁ   r�  zIRBuilder.get_module‰  s=   € à—;‘;Ô1°2°tÓ<ˆà× Ñ Ô!1°H¸d¿m¹mÈFÐTXÓ>YÐ3ZÐ\`ÓaÐarÀ   c                óx   — | j                  ||«      }|�|n| j                  ||«      }| j                  |||«      S )zñLook up an attribute of a module without storing it in the local namespace.

        For example, get_module_attr('typing', 'TypedDict', line) results in
        the value of 'typing.TypedDict'.

        Import the module if needed.
        )r¤  r�  r$  )rû   r�  r&  r  ÚimportedÚ
module_objs         rÁ   Úget_module_attrzIRBuilder.get_module_attr�  sA   € ð —?‘? 6¨4Ó0ˆØ!)Ð!5‘X¸4¿?¹?È6ÐSWÓ;Xˆ
Ø×Ñ 
¨D°$Ó7Ð7rÀ   c           
     ób  — t        «       t        «       }}| j                  t        |||t        j                  |«      «       | j	                  |«       | j                  t        || j                   |«       |j                  |«      |«      «       | j                  |«       | j	                  |«       y)z:If target is NULL, assign value produced by get_val to it.N)	r]   r  r^   ÚIS_ERRORr  r\   r  rl  r  )rû   r  Úget_valr  Úerror_blockÚ
body_blocks         rÁ   Úassign_if_nullzIRBuilder.assign_if_null›  s|   € ä",£,´
³�ZˆØ�‰”˜ ¨Z¼¿¹È$ÓOÔPØ×Ñ˜KÔ(Ø�‰”˜ §¡©G«I°v·{±{ÀDÓ IÈ4ÓPÔQØ�	‰	�*ÔØ×Ñ˜JÕ'rÀ   c           
     ó–  — t        «       t        «       }}| j                  t        | j                  j                  d|t
        z  z
     t        d|t
        dz
  z  z  t        «      t        j                  |«      }| j                  t        |t        dt        «      t        j                  |«      «      }| j                  t        |||t        j                  «      «       | j                  |«       | j                  t        || j!                   |«       |j"                  |«      «      «       | j%                  |«       | j                  |«       y )Néÿÿÿÿr	  r   )r]   rk  rw   rÉ   rg  rC   rd   re   ÚANDr  ra   ÚEQr^   ÚBOOLr  r\   r  rl  r  )	rû   r  r°  Úindexr  r±  r²  ÚoÚbs	            rÁ   Úassign_if_bitmap_unsetz IRBuilder.assign_if_bitmap_unset¤  sò   € ô #-£,´
³�ZˆØ�K‰KÜØ�L‰L×Ñ˜b 5¬KÑ#7Ñ7Ñ8Ü�A˜%¤;°¡?Ñ3Ñ4Ô6GÓHÜ�I‰IØó
ˆð �H‰H”\ !¤W¨QÔ0AÓ%BÄLÇOÁOÐUYÓZÓ[ˆØ�‰”˜˜;¨
´F·K±KÓ@ÔAØ×Ñ˜KÔ(Ø�‰”˜ §¡©G«I°v·{±{ÀDÓ IÓJÔKØ�	‰	�*ÔØ×Ñ˜JÕ'rÀ   c                ó¦   — t        | j                  d   «      st        | j                  d   «      r| j                  «        y | j	                  «        y ©Nrµ  )r€   rÔ   r�   Úadd_implicit_returnÚadd_implicit_unreachabler"  s    rÁ   Úmaybe_add_implicit_returnz#IRBuilder.maybe_add_implicit_return¶  s=   € Ü˜dŸn™n¨RÑ0Ô1Ô5IÈ$Ï.É.ÐY[ÑJ\Ô5]Ø×$Ñ$Õ&à×)Ñ)Õ+rÀ   c                ó@  — | j                   j                  d   }|j                  sy| j                  j                  j
                  }| j                  | j                   j                  «       | j                  d   |«      }| j                  d   j                  | ||«       y y r¾  )rÉ   ÚblocksÚ
terminatedrî   Úfitemr  r  rD  rÔ   rð   Ú
gen_return)rû   r  r  Úretvals       rÁ   r¿  zIRBuilder.add_implicit_return¼  s~   € Ø—‘×#Ñ# BÑ'ˆØ×ÒØ—<‘<×%Ñ%×*Ñ*ˆDØ—[‘[ §¡×!2Ñ!2Ó!4°d·n±nÀRÑ6HÈ$ÓOˆFØ×!Ñ! "Ñ%×0Ñ0°°v¸tÕDð  rÀ   c                ó‚   — | j                   j                  d   }|j                  s| j                  t	        «       «       y y r¾  )rÉ   rÃ  rÄ  r  rp   r  s     rÁ   rÀ  z"IRBuilder.add_implicit_unreachableÃ  s2   € Ø—‘×#Ñ# BÑ'ˆØ×ÒØ�H‰H”[“]Õ#ð  rÀ   c                ón  — |D ]°  }t        |t        «      sŒt        |j                  t        «      sŒ/t        |j                  j                  t
        «      sŒT|j                  j                  |j                     j                  }t        |t        «      sŒ’|j                  rŒŸ| j                  d|«       Œ² y )Nz;Only class variables defined as ClassVar can be assigned to)
r  r"   Úexprr'   r  r-   r`  r/   Úis_classvarÚerror)rû   Úlvaluesr  ÚlvalueÚvars        rÁ   Údisallow_class_assignmentsz$IRBuilder.disallow_class_assignmentsÈ  s   € ð
 ò 	dˆFä˜6¤:Õ.Ü˜vŸ{™{¬GÕ4Ü˜vŸ{™{×/Ñ/´Õ:à—k‘k×&Ñ& v§{¡{Ñ3×8Ñ8�Ü˜c¤3Õ'°·³Ø—J‘JÐ\Ð^bÕcñ	drÀ   c                ó2   — t        | j                  «      dk  S ©Né   )Úlenrï   r"  s    rÁ   Únon_function_scopezIRBuilder.non_function_scope×  s   € ä�4—=‘=Ó! QÑ&Ð&rÀ   c                óB   — | j                  «       ry | j                  d   S rÒ  )rÕ  rï   r"  s    rÁ   Útop_level_fn_infozIRBuilder.top_level_fn_infoÛ  s    € Ø×"Ñ"Ô$ØØ�}‰}˜QÑÐrÀ   )Útype_overridec               ó  — t        |t        «      sJ |«       ‚t        |j                  t        «      sJ |j                  «       ‚|j                  j                  €§|€|j
                  }n|› d|j
                  › �}|€J d«       ‚| j                  ||xs | j                  |«      |j                  «      }| j                  j                  ||j                  f«       | j                  t        ||| j                  «      «       y y )Nú.zFull name not set for variable)r  r$   r  r/   Úfinal_valuer`  r  r  r  rÙ   Úappendrl  r  rc   rÿ   )rû   rÎ  Ú
rvalue_regÚ
class_namerØ  r`  Úcoerceds          rÁ   Úinit_final_staticzIRBuilder.init_final_staticà  sß   € ô ˜&¤(Ô+Ð3¨VÓ3Ð+Ü˜&Ÿ+™+¤sÔ+Ð8¨V¯[©[Ó8Ð+Ø�;‰;×"Ñ"Ð*ØÐ!Ø—{‘{‘à$˜ Q v§{¡{ mÐ4�ØÐ#ÐEÐ%EÓEÐ#Ø—k‘k *¨mÒ.U¸t¿~¹~ÈfÓ?UÐW]×WbÑWbÓcˆGØ×Ñ×#Ñ# T¨7¯<©<Ð$8Ô9Ø�H‰H”Z ¨¨t×/?Ñ/?Ó@ÕAð +rÀ   c           	     óˆ   — t        | j                  |«      }|€J ‚|\  }}| j                  j                  ||||d|› d�¬«      S )Nzvalue for final name "z" was not set)r  Ú	error_msg)r@   rÓ   rÉ   Úload_static_checked)rû   r\  Útypr  Ú
error_nameÚ
split_namer�  r`  s           rÁ   Úload_final_staticzIRBuilder.load_final_staticô  s]   € ô " $§*¡*¨hÓ7ˆ
ØÐ%Ð%Ð%Ø!‰ˆ�Ø�|‰|×/Ñ/ØØØØØ.¨z¨l¸-ÐHð 0ó 
ð 	
rÀ   c                ó´   — |dz   t        |«      z   }| j                  j                  |«       | j                  t	        ||| j
                  t        ¬«      «       y ©NÚ___r…  )ÚstrrÚ   rÜ  r  rc   rÿ   rZ   )rû   r*  r`  r  Úunique_names        rÁ   Úinit_type_varzIRBuilder.init_type_var  sF   € Ø˜U‘l¤S¨£YÑ.ˆØ×Ñ×"Ñ" ;Ô/Ø�‰”˜E ;°×0@Ñ0@ÔL^Ô_Õ`rÀ   c           	     ó€   — | j                  t        t        |dz   t        |«      z   | j                  t
        ¬«      «      S ré  )r  rh   r†   rë  rÿ   rZ   ©rû   r`  r  s      rÁ   Úload_type_varzIRBuilder.load_type_var  s:   € Ø�x‰xÜÜ!Ø�u‘œs 4›yÑ(Ø× Ñ Ü,ô	ó
ð 	
rÀ   c                ó&  — t        |t        «      r$|r| j                  |«      S | j                  |«      S t        |t        «      r| j
                  j                  |«      S t        |t        «      r| j
                  j                  |«      S t        |t        «      r| j
                  j                  |«      S t        |t        «      r| j
                  j                  |«      S t        |t        «      r| j
                  j                  |«      S J d«       ‚)zQLoad value of a final name, class-level attribute, or constant folded expression.zUnsupported literal value)r  ÚboolrG  rI  ÚintrÉ   r0  Úfloatr2  rë  r(  Úbytesr-  ÚcomplexÚload_complex)rû   rs  r  s      rÁ   Úload_literal_valuezIRBuilder.load_literal_value  sÔ   € ô �cœ4Ô ÙØ—y‘y “Ð&à—z‘z $Ó'Ð'Ü˜œSÔ!Ø—<‘<×(Ñ(¨Ó-Ð-Ü˜œUÔ#Ø—<‘<×*Ñ*¨3Ó/Ð/Ü˜œSÔ!Ø—<‘<×(Ñ(¨Ó-Ð-Ü˜œUÔ#Ø—<‘<×*Ñ*¨3Ó/Ð/Ü˜œWÔ%Ø—<‘<×,Ñ,¨SÓ1Ð1à5Ð5Ó5�5rÀ   )Úfor_readc               óN  — |dk(  r|j                   }t        |t        «      �r!|j                  }t        |t        t
        z  «      rt        |«      }|€#|j                  sJ ‚t        |j                  «      }|s.t        |t        «      r|j                  r| j                  d|«       |j                  t        k(  �r.|| j                  d   v�rt        |t        «      r6t        |j                  t         «      s| j#                  |j                  «      }n| j%                  |«      }| j&                  j(                  rŒ|j*                  r€|| j,                  v rr| j/                  |«      r.| j1                  ||| j&                  j2                  dt4        ¬«      S | j7                  ||| j&                  j2                  j8                  d¬«      S | j;                  ||«      S | j=                  |«      S |j                  t>        k(  r8| jA                  «       }| jC                  |j                  |«      }tE        ||«      S J |j                  «       ‚t        |tF        «      rB| jI                  |jJ                  «      }| jI                  |jL                  «      }	tE        ||	«      S t        |tN        «      rF| jQ                  |«      }
| jI                  |jR                  |
¬«      }tU        ||j                  |
¬«      S t        |tV        «      rvd }g }tY        |jZ                  «      D ]N  \  }}| j]                  |«      }|j_                  |«       t        |t`        «      sŒ9|�| j                  d|«       |}ŒP tc        ||«      S t        |t`        «      r| j]                  |jR                  «      S J d|z  «       ‚)	Nrµ  z2Cannot assign to the first argument of classmethodF)ÚreassignÚprefix)rû  r  z%Two starred expressions in assignmentúUnsupported lvalue: %r)2r  r  r$   r  r   r&   r™   Úis_special_formr/   r`  Úis_clsrÌ  Úkindr   rË   rl  r4   Útype_to_rtyper  rî   Úis_generatorÚerror_overlaprè   Úis_captured_by_nested_funcÚadd_var_to_env_classÚgenerator_classrE   Úadd_var_to_generator_frameÚself_regÚadd_local_regÚlookupr   Úload_globals_dictr(  r•   r   r  r_  r¹  r"   Úis_native_attr_refrÊ  r”   r+   Ú	enumeraterw  Úget_assignment_targetrÜ  r(   r—   )rû   rÎ  r  rù  ÚsymbolÚreg_typeÚglobals_dictr`  r_  r¹  ró   r%  Ústar_idxrÍ  ÚidxÚitemÚtargs                    rÁ   r  zIRBuilder.get_assignment_target'  s  € ð �2Š:Ø—;‘;ˆDÜ�fœhÕ'ð —[‘[ˆFÜ˜&¤)Ô.?Ñ"?Ô@Ü% fÓ-�Øˆ~à×-Ò-Ð-Ð-Ü˜VŸ[™[Ó)�Ù¤
¨6´3Ô 7¸F¿MºMØ—
‘
ÐOÐQUÔVØ�{‰{œdÓ"Ø §¡°Ñ!3Ò3Ü! &¬#Ô.´zÀ&Ç+Á+Ì{Ô7[Ø#'×#5Ñ#5°f·k±kÓ#B™à#'§>¡>°&Ó#9˜ð Ÿ™×1Ò1Ø$×2Ò2Ø" d×&7Ñ&7Ñ7à×:Ñ:¸6ÔBØ#'×#<Ñ#<Ø &Ø (Ø $§¡× <Ñ <Ø).Ü'Að $=ó $ð ð  $×>Ñ>Ø" H¨d¯l©l×.JÑ.J×.SÑ.SÐ^cð  ?ó  ð ð  ×-Ñ-¨f°hÓ?Ð?ð  Ÿ;™; vÓ.Ð.Ø—‘¤Ò$Ø#×5Ñ5Ó7�Ø—}‘} V§[¡[°$Ó7�Ü,¨\¸4Ó@Ð@à)˜fŸk™kÓ)�uÜ˜¤	Ô*à—;‘;˜vŸ{™{Ó+ˆDØ—K‘K §¡Ó-ˆEÜ(¨¨uÓ5Ð5Ü˜¤
Ô+à×0Ñ0°Ó8ˆJØ—+‘+˜fŸk™k°j�+ÓAˆCÜ'¨¨V¯[©[ÀZÔPÐPÜ˜¤	Ô*à#'ˆHØˆGÜ& v§|¡|Ó4ò #‘	��TØ×1Ñ1°$Ó7�Ø—‘˜tÔ$Ü˜d¤HÕ-ØÐ+ØŸ
™
Ð#JÈDÔQØ"‘Hð#ô )¨°(Ó;Ð;ä˜¤Ô)Ø×-Ñ-¨f¯k©kÓ:Ð:à7Ð.°Ñ7Ó7ˆurÀ   )ró   Úallow_error_valuec          	     óÈ  — t        |t        «      r|S t        |t        «      r|j                  S t        |t        «      rS| j                  |j                  d|j                  g|j                  |«      }|�|S J |j                  j                  «       ‚t        |t        «      r¸t        |j                  j                  t        «      rm|j                  j                  j                  j                  rC|xr |j                  }| j                  t!        |j                  |j"                  |||¬«      «      S | j%                  |j                  |j"                  |«      S J d|z  «       ‚)NÚ__getitem__)Úborrowr  rý  )r  rq   r–   Úregisterr•   r^  r_  r¹  rl  r”   r%  rr   Úclass_irÚis_ext_classró   r  rb   r&  r$  )rû   r  r  ró   r  Úregr  s          rÁ   ÚreadzIRBuilder.readx  s  € ô �fœeÔ$ØˆMÜ�fÔ6Ô7Ø—?‘?Ð"Ü�fÔ3Ô4Ø×&Ñ&Ø—‘˜]¨V¯\©\¨N¸F¿K¹KÈóˆCð ˆØ�
Ø*˜&Ÿ+™+×*Ñ*Ó*�5Ü�fÔ2Ô3Ü˜&Ÿ*™*Ÿ/™/¬9Ô5¸&¿*¹*¿/¹/×:RÑ:R×:_Ò:_Ø#Ò9¨×(9Ñ(9�Ø—x‘xÜØŸ
™
ØŸ™ØØ%Ø*;ôóð ð ×'Ñ'¨¯
©
°F·K±KÀÓFÐFà7Ð.°Ñ7Ó7ˆurÀ   c           
     óº  — t        |t        «      r8| j                  t        || j	                  ||j
                  |«      |«      «       y t        |t        «      rD| j	                  ||j
                  |«      }| j                  t        |j                  ||«      «       y t        |t        «      �rYt        |j                  t        «      rã|j                  j                  j                  d«      }|rm| j                  |j                  |«      }| j                  j!                  |«      }t#        |j$                  |j&                  ||g|«      }| j                  |«       y | j	                  ||j
                  |«      }| j                  t)        |j$                  |j                  ||«      «       y | j                  |j                  |«      }| j                  j!                  |«      }| j+                  t,        |j$                  ||g|«       y t        |t.        «      r›t        |j0                  j
                  t2        «      r.t5        | j                  |j0                  |j6                  ||«       y | j9                  |j0                  d|j6                  |gd |«      }|€J |j0                  j
                  «       ‚y t        |t:        «      �rt        |j
                  t<        «      r›|j>                  €�|j
                  j@                  }	tC        |	«      tC        |jD                  «      k(  sJ ‚tG        tC        |	«      «      D ]>  }
| j                  tI        ||
|«      «      }| jK                  |jD                  |
   ||«       Œ@ y tM        |j
                  «      stO        |j
                  «      r |j>                  €| jQ                  |||«       y | jS                  |||«       y J d«       ‚)NÚ__setattr__Ú__setitem__zUnsupported assignment target)*r  rm   r  r\   Úcoerce_rvaluerl  r–   r  r”   Úobj_typerr   r  Ú
get_methodr(  r&  rÉ   Úboxri   r%  r`  rn   ri  r¡   r•   r_  rv   r›   r¹  r^  r—   rs   r  rÒ   rÔ  rw  Úrangero   Úassignr   rƒ   Úprocess_sequence_assignmentÚ!process_iterator_tuple_assignment)rû   r  rÝ  r  Úsetattrr�  Ú	boxed_regÚcallÚtarget_reg2ÚrtypesÚiÚ
item_values               rÁ   r'  zIRBuilder.assignœ  sß  € Ü�fœhÔ'Ø�H‰H”V˜F D×$6Ñ$6°zÀ6Ç;Á;ÐPTÓ$UÐW[Ó\Õ]Ü˜Ô 8Ô9Ø×+Ñ+¨J¸¿¹ÀTÓJˆJØ�H‰H”V˜FŸO™O¨Z¸Ó>Õ?Ü˜Ô 4Õ5Ü˜&Ÿ/™/¬9Ô5Ø Ÿ/™/×2Ñ2×=Ñ=¸mÓL�ÙØŸ-™-¨¯©°TÓ:�CØ $§¡× 0Ñ 0°Ó <�IÜ% f§j¡j°'·,±,ÀÀiÐ@PÐRVÓW�DØ—H‘H˜T•Nà!%×!3Ñ!3°JÀÇÁÈTÓ!R�JØ—H‘HœW V§Z¡Z°·±¸jÈ$ÓOÕPà—m‘m F§K¡K°Ó6�Ø ŸL™L×,Ñ,¨ZÓ8�	Ø×!Ñ!¤-°&·*±*¸cÀ9Ð1MÈtÕTÜ˜Ô 5Ô6Ü˜&Ÿ+™+×*Ñ*¬DÔ1Ü˜TŸ\™\¨6¯;©;¸¿¹ÀjÐRVÕWà"×2Ñ2Ø—K‘K °·±¸zÐ0JÈDÐRVó�ð #Ð.Ð@°·±×0@Ñ0@Ó@Ñ.Ü˜Ô 5Õ6Ü˜*Ÿ/™/¬6Ô2°v·±Ð7NØ#Ÿ™×.Ñ.�Ü˜6“{¤c¨&¯,©,Ó&7Ò7Ð7Ð7Üœs 6›{Ó+ò C�AØ!%§¡¬(°:¸qÀ$Ó*GÓ!H�JØ—K‘K §¡¨Q¡°¸TÕBñCô # :§?¡?Ô3Ô7JÈ:Ï?É?Ô7[Ø—/‘/Ð)Ø×0Ñ0°¸ÀTÕJà×6Ñ6°v¸zÈ4ÕPà9Ð9Ó9�5rÀ   c                óÜ   — t        |«      rOt        |j                  «      r:|j                  j                  «       }|dk(  rd}| j	                  dd|› d�z   |«       | j                  |||«      S )NÚ	short_intró  z1Incompatible value representations in assignment z(expression has type "z", variable has type "float"))r~   r‚   rl  Ú
short_namerÌ  r  )rû   ÚrvalueÚrtyper  Útypenames        rÁ   r"  zIRBuilder.coerce_rvalueÉ  sn   € Ü˜uÔ%¬)°F·K±KÔ*@Ø—{‘{×-Ñ-Ó/ˆHØ˜;Ò&Ø �Ø�J‰JØCØ*¨8¨*Ð4QÐRñSàôð
 �{‰{˜6 5¨$Ó/Ð/rÀ   c                óF  — t        t        |j                  «      t        «      }| j                  j                  t        ||g|«       g }t        t        |j                  «      «      D �]  }|j                  |   }t        |j                  «      rJt        |t        «      }t        s| j                  t        ||g|«      }	nž| j                  t        ||g|«      }	n„t        |j                  «      r*t        |t        «      }| j                  t        ||g|«      }	nE| j                  j!                  |«      }| j                  j#                  |d|g|j                  |«      }	|j%                  |	«       �Œ	 t'        |j                  |«      D ]  \  }
}| j)                  |
||«       Œ y)zOProcess assignment like 'x, y = s', where s is a variable-length list or tuple.r  N)rd   rÔ  rw  r{   rÉ   re  r¦   r&  r   rl  rF   ri  r£   r¢   rƒ   r¯   r0  r^  rÜ  Úzipr'  )rû   r  r4  r  Úexpected_lenrM  r/  r  r¹  r0  rÎ  r*  s               rÁ   r(  z%IRBuilder.process_sequence_assignmentÕ  sa  € ô
 œs 6§<¡<Ó0Ô2HÓIˆØ�‰×ÑÔ1°F¸LÐ3IÈ4ÔPð ˆÜ”s˜6Ÿ<™<Ó(Ó)ó 	&ˆAØ—<‘< ‘?ˆDä! &§+¡+Ô.Ü Ô#9Ó:�Ý'Ø!%×!2Ñ!2Ô3JÈVÐUZÈOÐ]aÓ!b‘Jà!%×!2Ñ!2Ô3IÈFÐTYÈ?Ð\`Ó!a‘JÜ$ V§[¡[Ô1Ü Ô#9Ó:�Ø!Ÿ[™[Ô)AÀFÈEÀ?ÐTXÓY‘
àŸ™×-Ñ-¨aÓ0�Ø!Ÿ\™\×9Ñ9Ø˜M¨E¨7°D·I±I¸tó�
ð �M‰M˜*Ö%ð#	&ô( ! §¡¨vÓ6ò 	-‰MˆF�EØ�K‰K˜  tÕ,ñ	-rÀ   c                ór  — t        «       t        «       }}| j                  t        |||t        j                  «      «       | j	                  |«       | j                  t        t
        j                  d|«      «       | j                  t        «       «       | j	                  |«       | j                  |||«       y )Núnot enough values to unpack)	r]   r  r^   r¯  r  rl   ÚVALUE_ERRORrp   r'  )rû   ÚlitemÚritemr  r±  Úok_blocks         rÁ   Ú(process_iterator_tuple_assignment_helperz2IRBuilder.process_iterator_tuple_assignment_helperö  s‰   € ô !+£¬j«l�XˆØ�‰”˜˜{¨H´f·o±oÓFÔGà×Ñ˜KÔ(Ø�‰ÜÔ1×=Ñ=Ð?\Ð^bÓcô	
ð 	�‰”“Ôà×Ñ˜HÔ%Ø�‰�E˜5 $Õ'rÀ   c           	     óÂ  — | j                  t        |g|«      }|j                  �|j                  nt        |j                  «      }|j                  d | D ]Ñ  }| j                  t        |g|«      }t        «       t        «       }	}| j                  t        |||	t        j                  «      «       | j                  |«       | j                  t        t        j                  d|«      «       | j                  t        «       «       | j                  |	«       | j                  |||«       ŒÓ |j                  ��n|j                  |dz   d  }
| j                  t         |g|«      }| j#                  ||«      }t%        t        |
«      «      }| j'                  ||d|«      }t        «       t        «       }	}| j                  t        ||	|t        j(                  «      «       | j                  |«       | j                  t        t        j                  d|«      «       | j                  t        «       «       | j                  |	«       t+        |
«      D ]-  }| j                  t,        |g|«      }| j                  |||«       Œ/ | j                  |j                  |j                     ||«       y | j                  t        |g|«      }t        «       t        «       }	}| j                  t        ||	|t        j                  «      «       | j                  |«       | j                  t        t        j                  d|«      «       | j                  t        «       «       | j                  |	«       y )Nr;  r	  r·   ztoo many values to unpack)ri  rŸ   r  rÔ  rw  re  r    r]   r  r^   r¯  r  rl   r<  rp   r'  r¥   rr  rd   r8  r¸  Úreversedr¤   )rû   r  rÝ  r  ÚiteratorÚ	split_idxr=  r>  r±  r?  Úpost_star_valsÚ	iter_listÚiter_list_lenÚpost_star_lenÚ	conditionÚextras                   rÁ   r)  z+IRBuilder.process_iterator_tuple_assignment  s¸  € ð ×$Ñ$¤W¨z¨l¸DÓAˆð (.§¡Ð'B�F—O’OÌÈFÏLÉLÓHYˆ	ð —\‘\ * 9Ð-ò 	,ˆEØ—K‘K¤¨(¨°TÓ:ˆEÜ$.£L´*³,˜ˆKØ�H‰H”V˜E ;°¼&¿/¹/ÓJÔKà×Ñ Ô,Ø�H‰HÜ"Ü&×2Ñ2Ð4QÐSWóôð
 �H‰H”[“]Ô#à×Ñ Ô)à�K‰K˜˜u dÕ+ð	,ð$ �?‰?Ñ&Ø#Ÿ\™\¨)°a©-¨/Ð:ˆNØ×)Ñ)¬'°H°:¸tÓDˆIØ ×,Ñ,¨Y¸Ó=ˆMÜ#¤C¨Ó$7Ó8ˆMØŸ™ }°mÀTÈ4ÓPˆIä$.£L´*³,˜ˆKØ�H‰H”V˜I x°¼f¿k¹kÓJÔKà×Ñ Ô,Ø�H‰HÜ"Ü&×2Ñ2Ð4QÐSWóôð
 �H‰H”[“]Ô#à×Ñ Ô)ä! .Ó1ò 0�Ø×)Ñ)¬-¸)¸ÀdÓK�Ø—‘˜E 5¨$Õ/ð0ð
 �K‰K˜Ÿ™ V§_¡_Ñ5°yÀ$ÕGð
 —K‘K¤¨(¨°TÓ:ˆEÜ$.£L´*³,˜ˆKØ�H‰H”V˜E 8¨[¼&¿/¹/ÓJÔKà×Ñ Ô,Ø�H‰HÜ"Ü&×2Ñ2Ð4OÐQUóôð
 �H‰H”[“]Ô#à×Ñ Õ)rÀ   c                ój   — | j                   j                  t        | j                   d   ||«      «       y r¾  )rð   rÜ  r�   )rû   Úcontinue_blockÚbreak_blocks      rÁ   Úpush_loop_stackzIRBuilder.push_loop_stackL  s-   € Ø×Ñ×$Ñ$Ü × 5Ñ 5°bÑ 9¸>È;ÓWõ	
rÀ   c                ó8   — | j                   j                  «        y r  )rð   Úpopr"  s    rÁ   Úpop_loop_stackzIRBuilder.pop_loop_stackQ  s   € Ø×Ñ×!Ñ!Õ#rÀ   c                ó‚   — t        |t        «      r|S t        |j                  «      }| j                  ||t        «       |S )z1Return an assignable register containing a value.)r  rm   rl  r'  r[   )rû   r*  r  s      rÁ   Úensure_registerzIRBuilder.ensure_registerT  s7   € ä�eœXÔ&ØˆLô �u—z‘zÓ"ˆØ�‰�C˜Ô 4Ô5Øˆ
rÀ   c                óB   — t        | |«      }t        |t        «      r|S d S r  )rˆ   r  ró  )rû   ÚeÚfoldeds      rÁ   Úextract_intzIRBuilder.extract_int^  s"   € Ü# D¨!Ó,ˆÜ# F¬CÔ0ˆvÐ:°dÐ:rÀ   c                ó>   — | j                  | j                  |   «      S r  )Úget_sequence_type_from_typerÒ   ©rû   rÊ  s     rÁ   Úget_sequence_typezIRBuilder.get_sequence_typeb  s   € Ø×/Ñ/°·
±
¸4Ñ0@ÓAÐArÀ   c                ó0  ‡ — t        |«      }t        |t        «      r<t        j                  |j
                  D �cg c]  }‰ j                  |«      ‘Œ c}«      S t        |t        «      r]|j                  j                  dk(  rt        S |j                  j                  dk(  rt        S 	 ‰ j                  |j                  d   «      S t        |t         «      r‰ j                  |j"                  «      S t        |t$        «      ro|j
                  }|sJ d«       ‚t'        t(        j+                  ˆ fd„|D «       «      «      }t-        |«      dk(  r|j/                  «       S t        j                  |«      S J |«       ‚c c}w # t        $ r t        |›d�«      d ‚w xY w)Nzbuiltins.strzbuiltins.bytesr   z is not a valid sequence.z+This function does not support empty tuplesc              3  óT   •K  — | ]  }‰j                   j                  |«      –— Œ! y ­wr  ©rÑ   r  )Ú.0r  rû   s     €rÁ   ú	<genexpr>z8IRBuilder.get_sequence_type_from_type.<locals>.<genexpr>{  s    øè ø€ Ò'ZÈD¨¯©×(AÑ(AÀ$×(GÑ'Zùs   ƒ%(r	  )r>   r  r=   ru   Úmake_simplified_unionrw  rY  r5   rl  r\  r‡   ry   r  rg  Ú
IndexErrorÚ
ValueErrorr;   Úupper_boundr7   Úlistr  ÚfromkeysrÔ  rP  )rû   r=  r  rw  r.  s   `    rÁ   rY  z%IRBuilder.get_sequence_type_from_typee  sn  ø€ Ü% kÓ2ˆÜ�k¤9Ô-Ü×/Ñ/ØDO×DUÑDUÖV¸D�×1Ñ1°$Õ7ÒVóð ô ˜¤XÔ.Ø×Ñ×(Ñ(¨NÒ:Ü%Ð%Ø×!Ñ!×*Ñ*Ð.>Ò>Ü'Ð'ðXØ×)Ñ)¨+×*:Ñ*:¸1Ñ*=Ó>Ð>ô ˜¤_Ô5Ø×3Ñ3°K×4KÑ4KÓLÐLÜ˜¤YÔ/Ø×%Ñ%ˆEÙÐGÐGÓG�5äœ$Ÿ-™-Ó'ZÐTYÔ'ZÓZÓ[ˆFÜ�6‹{˜aÒØ—z‘z“|Ð#ä×3Ñ3°FÓ;Ð;Ø!�kÓ!ˆuùò/ Wøô ò XÜ  K ?Ð2KÐ!LÓMÐSWÐWðXús   ºE7Â(E< Å<Fc                ó>   — | j                  | j                  |   «      S )zpFind dict type of a dict-like expression.

        This is useful for dict subclasses like SymbolTable.
        )Úget_dict_base_type_from_typerÒ   rZ  s     rÁ   Úget_dict_base_typezIRBuilder.get_dict_base_type‚  s   € ð
 ×0Ñ0°·±¸DÑ1AÓBÐBrÀ   c                ó   — t        |«      }t        |t        «      r2|j                  D ��cg c]  }| j	                  |«      D ]  }|‘Œ Œ c}}S t        |t
        «      r| j	                  |j                  «      S t        |t        «      r3|j                  }t        d„ |j                  j                  D «       «      }nAt        |t        «      r't        d„ |j                  j                  D «       «      }n
J d|› �«       ‚t        ||«      gS c c}}w )Nc              3  ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­w)ztyping.MappingN©r\  ©r_  r_  s     rÁ   r`  z9IRBuilder.get_dict_base_type_from_type.<locals>.<genexpr>™  s!   è ø€ ò Ø¸¿¹ÐJZÓ9Z”ñùó   ‚—c              3  ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­w)zbuiltins.dictNrl  rm  s     rÁ   r`  z9IRBuilder.get_dict_base_type_from_type.<locals>.<genexpr>�  s    è ø€ ò Ø¸¿¹È/Ó9Y”ñùrn  z!Failed to extract dict base from )r>   r  r=   rw  rh  r;   rd  r9   ÚfallbackÚnextrl  Úmror5   r   )rû   r=  r  ÚinnerÚ	dict_bases        rÁ   rh  z&IRBuilder.get_dict_base_type_from_type‰  s  € Ü% kÓ2ˆÜ�k¤9Ô-ð (×-Ñ-÷àØ!×>Ñ>¸tÓDòð ò ðØóð ô
 �k¤?Ô3ð ×4Ñ4°[×5LÑ5LÓMÐMä�k¤=Ô1Ø%×.Ñ.ˆKÜñ Ø!,×!1Ñ!1×!5Ñ!5ôó ‰Iô ˜¤XÔ.Üñ Ø!,×!1Ñ!1×!5Ñ!5ôó ‰Ið LÐ=¸k¸]ÐKÓK�5Ü)¨+°yÓAÐBÐBùó-s   «D
c                ó®   — | j                  |«      }|D �cg c]   }| j                  |j                  d   «      ‘Œ" }}t        j                  |«      S c c}w )Nr   ©ri  r  rg  ru   ra  ©rû   rÊ  Údict_base_typesÚtr.  s        rÁ   Úget_dict_key_typezIRBuilder.get_dict_key_type¤  óO   € Ø×1Ñ1°$Ó7ˆØ9HÖI°A�$×$Ñ$ Q§V¡V¨A¡YÕ/ÐIˆÐIÜ×+Ñ+¨FÓ3Ð3ùò Jó   –%Ac                ó®   — | j                  |«      }|D �cg c]   }| j                  |j                  d   «      ‘Œ" }}t        j                  |«      S c c}w )Nr	  rv  rw  s        rÁ   Úget_dict_value_typezIRBuilder.get_dict_value_type©  r{  r|  c                ó`   — | j                  |«      }| j                  |«      }t        ||g«      S r  )rz  r~  rs   )rû   rÊ  Úkey_typeÚ
value_types       rÁ   Úget_dict_item_typezIRBuilder.get_dict_item_type®  s2   € Ø×)Ñ)¨$Ó/ˆØ×-Ñ-¨dÓ3ˆ
Ü�x Ð,Ó-Ð-rÀ   c                ó¼  — || j                   vrt        t        j                  «      }nt	        | j                   |   «      }| j
                  | j                     j                  «       j                  }|j                  d|g g |«      d   }ddl
m} t        |t        «      r&t        «       }|j                  D ]  } |||«      }Œ |S |j                  d|g g |«      d   S )z<Return the item type given by 'expr' in an iterable context.Ú__iter__r   )Ú
join_typesÚ__next__)rÒ   r3   r:   Ú
from_errorr>   rÓ   rÿ   Útype_checkerÚexpr_checkerÚcheck_method_call_by_nameÚ	mypy.joinr…  r  r7   r<   rw  )rû   rÊ  ÚiterableÚechkrC  r…  Újoinedr  s           rÁ   Ú_analyze_iterable_item_typez%IRBuilder._analyze_iterable_item_type³  sÐ   € ð �t—z‘zÑ!ä#*¬9×+?Ñ+?Ó#@‰Hä& t§z¡z°$Ñ'7Ó8ˆHØ�z‰z˜$×*Ñ*Ñ+×8Ñ8Ó:×GÑGˆØ×1Ñ1°*¸hÈÈBÐPTÓUÐVWÑXˆå(ä�h¤	Ô*Ü*Ó,ˆFØ Ÿ™ò 2�Ù# F¨DÓ1‘ð2àˆMð ×1Ñ1°*¸hÈÈBÐPTÓUÐVWÑXÐXrÀ   c                ó8   — | j                   j                  |«      S )z*Is the given module one compiled by mypyc?)rÑ   r‰  ©rû   r�  s     rÁ   r‰  zIRBuilder.is_native_moduleÉ  s   € à�{‰{×+Ñ+¨FÓ3Ð3rÀ   c                ó¬   — | j                   j                  j                  |«      | j                   j                  j                  | j                  «      k(  S )a<  Is the given module in the same compilation group as the current module?

        Modules in the same group share a compiled C extension and can reference
        each other's C-level symbols directly. Modules in separate groups (separate
        compilation mode) must use the Python import system instead.
        )rÑ   rŠ  r‹  rÿ   r‘  s     rÁ   Úis_same_group_modulezIRBuilder.is_same_group_moduleÍ  s?   € ð �{‰{×$Ñ$×(Ñ(¨Ó0°D·K±K×4IÑ4I×4MÑ4MÈd×N^ÑN^Ó4_Ñ_Ð_rÀ   c                ó˜   — | j                   j                  |«      }|duxr* |j                  duxr |j                  j                  «       S )z:Is the given module a package (i.e., an __init__.py file)?N)rÓ   r‹  ÚtreeÚis_package_init_file)rû   r�  Ústs      rÁ   rŽ  zIRBuilder.is_package_moduleÖ  s>   € à�Z‰Z�^‰^˜FÓ#ˆØ˜ˆ~ÒX "§'¡'°Ð"5ÒX¸"¿'¹'×:VÑ:VÓ:XÐXrÀ   c                ó8   — | j                   j                  |«      S r  )rÑ   Úis_native_ref_exprrZ  s     rÁ   r™  zIRBuilder.is_native_ref_exprÛ  s   € Ø�{‰{×-Ñ-¨dÓ3Ð3rÀ   c                ó8   — | j                   j                  |«      S r  )rÑ   Úis_native_module_ref_exprrZ  s     rÁ   r›  z#IRBuilder.is_native_module_ref_exprÞ  s   € Ø�{‰{×4Ñ4°TÓ:Ð:rÀ   c                óV   — |j                   xs |j                  xs |j                  duS )z:Is a type something other than just a class we've created?N)Úis_named_tupleÚ
is_newtypeÚtypeddict_type©rû   rä  s     rÁ   Úis_synthetic_typezIRBuilder.is_synthetic_typeá  s(   € à×!Ñ!ÒU S§^¡^ÒU°s×7IÑ7IÐQUÐ7UÐUrÀ   c                ó\  — d}t        |j                  t        «      �r4t        |j                  j                  t        «      �r|j                  j                  j                  |j                  «      }|�r±t        |j                  t        «      �r–|j                  j                  j                  d   j                  j                  }|j                  j                  xs |dk(  }|�r?|j                  }|j                  j                  j                  › d|j                  › �}| j                  |j                  j                  j                  «      }nÔ| j                  |«      rdt        |j                  t        «      r©|j                  j                  r“|j                  }|j                  j                  }| j!                  |«      }n_| j#                  |«      }|�L|}|j                  j                  › d|j                  › �}| j                  |j                  j                  «      }|�|fS y)aé  Check if `expr` is a final class, module or instance attribute.

        This needs to be done differently for class, module and instance attributes to
        correctly determine fully qualified name. Return a tuple that consists of
        the qualified name, the corresponding Var node, and a flag indicating whether
        the final name was defined in a compiled module. Return None if `expr` does not
        refer to a final attribute.

        Instance attributes only qualify if they are class-body Finals ("X: Final = ..."
        in the class body), which have no instance slot -- see
        ClassIR.class_final_attributes. Ordinary instance attributes, including
        "self.x: Final = ..." set in __init__, return None.
        Nr   z	enum.EnumrÚ  )r  rÊ  r'   r  r-   r‹  r`  r/   Úbasesrl  r\  Úis_finalÚinfor‰  rÿ   Úis_module_member_exprr™  Úget_class_final_var)	rû   rÊ  Ú	final_varÚsymÚexpr_fullnamer¤  r\  ÚnativerÏ  s	            rÁ   Úget_final_refzIRBuilder.get_final_refå  sš  € ð ˆ	Ü�d—i‘i¤Õ)¬j¸¿¹¿¹ÌÕ.Rà—)‘)—.‘.×$Ñ$ T§Y¡YÓ/ˆCÚ”z #§(¡(¬CÕ0à $§	¡	§¡× 4Ñ 4°QÑ 7× <Ñ <× EÑ E�ØŸ8™8×,Ñ,ÒL°ÀÑ0L�ÚØ #§¡�IØ"%§(¡(§-¡-×"8Ñ"8Ð!9¸¸9¿>¹>Ð:JÐK�HØ!×2Ñ2°4·9±9·>±>×3MÑ3MÓN‘FØ×'Ñ'¨Ô-ä˜$Ÿ)™)¤SÔ)¨d¯i©i×.@Ò.@Ø ŸI™I�	ØŸ9™9×-Ñ-�Ø×0Ñ0°Ó6‘ð ×*Ñ*¨4Ó0ˆCØˆØ�	Ø!Ÿh™h×/Ñ/Ð0°°#·(±(°Ð<�Ø×.Ñ.¨s¯x©x×/CÑ/CÓD�ØÐ Ø˜Y¨Ð.Ð.ØrÀ   c                ób  — t        | j                  j                  |j                  «      «      }t	        |t
        «      r#|j                  D �cg c]  }t        |«      ‘Œ }}n|g}d}|D ]>  }t	        |t        «      s y| j                  ||j                  «      }|€ y|�||ur y|}Œ@ |S c c}w )aµ  Return the Var for a class-body Final read through an instance expression.

        Return None if `expr` isn't such a read; the caller then falls back to an
        ordinary attribute read, which finds these names on the type object via
        py_get_attr (correct, just slower).

        A union-typed object qualifies only when every item resolves to the same
        declaration, since otherwise the value differs per item.
        N)
r>   rÒ   r‹  rÊ  r  r=   rw  r5   Úclass_final_var_of_instancer`  )rû   rÊ  Úinstance_typer  rw  ÚfoundrÏ  s          rÁ   r§  zIRBuilder.get_class_final_var  s¯   € ô (¨¯
©
¯©°t·y±yÓ(AÓBˆÜ�m¤YÔ/Ø7D×7JÑ7JÖK¨t”_ TÕ*ÐKˆEÑKà"�OˆEØ ˆØò 	ˆDÜ˜d¤HÔ-ÙØ×2Ñ2°4¸¿¹ÓCˆCØˆ{ÙØÐ  S°Ñ%5ÙØ‰Eð	ð ˆùò Ls   ÁB,c                ó¨  — | j                   j                  j                  |j                  «      }|€y|j	                  |«      }|€y|\  }}|j                  j                  |«      }|�0t        |j                  t        «      r|j                  j                  sy|j                  j                  j                  |j                  k7  ry|j                  S )ad  Look up a class-body Final attribute on a single instance type.

        ClassIR is the authority on which attributes were compiled as class-body
        Finals (mypyc.irbuild.util's is_class_body_final decides, and the answer
        survives serialization), so we gate on it and only use the mypy symbol table
        to find the defining class.
        N)rÑ   Ú
type_to_irr‹  rl  Úclass_final_attr_detailsr  r  r/   r¤  r¥  r\  )rû   Úinstancer`  r  ÚdetailsÚ_Údefining_irr©  s           rÁ   r®  z%IRBuilder.class_final_var_of_instance,  s«   € ð —;‘;×)Ñ)×-Ñ-¨h¯m©mÓ<ˆØÐØØ×3Ñ3°DÓ9ˆØˆ?ØØ ‰ˆˆ;Ø�m‰m×Ñ Ó%ˆØˆ;œj¨¯©´3Ô7¸s¿x¹x×?PÒ?PØð �8‰8�=‰=×!Ñ! [×%9Ñ%9Ò9ØØ�x‰xˆrÀ   c                óÞ   — |j                   �| j                  |j                   |«      S |rCt        | j                  |«      r-| j	                  || j
                  j                  |«      ||«      S y)az  Emit code for loading value of a final name (if possible).

        Args:
            final_var: Var corresponding to the final name
            fullname: its qualified name
            name: shorter name to show in errors
            native: whether the name was defined in a compiled module
            typ: its type
            line: line number where loading occurs
        N)rÛ  rø  r?   rÓ   rç  rÑ   r  )rû   r¨  r\  r`  r«  rä  r  s          rÁ   Úemit_load_finalzIRBuilder.emit_load_finalD  sd   € ð × Ñ Ð,Ø×*Ñ*¨9×+@Ñ+@À$ÓGÐGÙœ d§j¡j°(Ô;Ø×)Ñ)¨(°D·K±K×4MÑ4MÈcÓ4RÐTXÐZ^Ó_Ð_àrÀ   c                ó‚   — t        |j                  t        «      xr$ t        |j                  j                  t        «      S r  )r  rÊ  r'   r  r#   rZ  s     rÁ   r¦  zIRBuilder.is_module_member_exprX  s'   € Ü˜$Ÿ)™)¤WÓ-ÒV´*¸T¿Y¹Y¿^¹^ÌXÓ2VÐVrÀ   c                ó´  — |j                   r||j                  t        gt        |«      z  k(  r\t	        |«      }t        j                  |g «      }| j                  j                  |||j                  | j                  |«      «      }|r|S |j                  }t        |t        «      r|j                  }t        |t        «      r<|j                   | j"                  vr$|j                   | j$                  v r|j                   }|�–|j                   rŠ|| j&                  j(                  v rrt+        d„ |j                  D «       «      rV| j&                  j(                  |   }| j                  j-                  |||j                  |j.                  |j                  «      S | j1                  |«      }	| j3                  |	||j                  |j                  |j.                  ¬«      S )Nc              3  ó8   K  — | ]  }|t         t        fv –— Œ y ­wr  )r   r   )r_  r   s     rÁ   r`  z3IRBuilder.call_refexpr_with_args.<locals>.<genexpr>{  s   è ø€ ÒL°T�DœW¤iÐ0Ô0ÑLùs   ‚©rV  rW  )r\  rV  r   rÔ  Úget_call_target_fullnamer®   r‹  rÉ   Úmatching_primitive_opr  r  r  r  r&   Úimplr   Úfuncrå   ré   rÑ   Úfunc_to_declÚallr,  rW  r  rS  )
rû   rÊ  ÚcalleerU  r\  Úprimitive_candidatesr  Úcallee_nodeÚdeclrT  s
             rÁ   Úcall_refexpr_with_argsz IRBuilder.call_refexpr_with_args[  sƒ  € ð �?Š?˜tŸ~™~´'°¼SÀ»_Ñ1LÒLÜ/°Ó7ˆHÜ#/×#3Ñ#3°H¸bÓ#AÐ Ø—\‘\×7Ñ7Ø$ j°$·)±)¸T¿^¹^ÈDÓ=QóˆFñ Ø�ð —k‘kˆÜ�kÔ#4Ô5Ø%×*Ñ*ˆKô �{¤IÔ.Ø× Ñ ¨×(@Ñ(@Ñ@Ø× Ñ  D×$=Ñ$=Ñ=à%×*Ñ*ˆKàÐ#Ø—’Ø˜tŸ{™{×7Ñ7Ñ7ÜÑL¸T¿^¹^ÔLÔLà—;‘;×+Ñ+¨KÑ8ˆDØ—<‘<×$Ñ$ T¨:°t·~±~ÀtÇ~Á~ÐW[×W`ÑW`ÓaÐað —;‘;˜vÓ&ˆØ�|‰|Ø�j $§)¡)°t·~±~ÐQU×Q_ÑQ_ð ó 
ð 	
rÀ   c                ó    ‡ ‡— dˆˆ fd„}‰ j                   j                  ‰j                  ‰ j                  ‰«      ˆˆ fd„|‰j                  «      S )Nc                 ó  •— ‰ j                   rb‰j                  j                  t        t        j                  d‰ j
                  j                  «      «       ‰j                  j                  «       S ‰j                  ‰ j
                  «      S )Nz+mypyc internal error: should be unreachable)	Úright_unreachablerÉ   r  rl   ÚRUNTIME_ERRORÚrightr  rD  r  ©rÊ  rû   s   €€rÁ   Úhandle_rightz1IRBuilder.shortcircuit_expr.<locals>.handle_right‡  se   ø€ Ø×%Ò%Ø—‘× Ñ Ü&Ü*×8Ñ8ØEØŸ
™
Ÿ™óôð —|‘|×(Ñ(Ó*Ð*Ø—;‘;˜tŸz™zÓ*Ð*rÀ   c                 ó:   •— ‰j                  ‰ j                  «      S r  )r  ÚleftrÎ  s   €€rÁ   ú<lambda>z-IRBuilder.shortcircuit_expr.<locals>.<lambda>”  s   ø€ °4·;±;¸t¿y¹yÓ3I€ rÀ   ©Úreturnrq   )rÉ   Úshortcircuit_helperr  r  r  )rû   rÊ  rÏ  s   `` rÁ   Úshortcircuit_exprzIRBuilder.shortcircuit_expr†  sA   ù€ ö
	+ð �|‰|×/Ñ/Ø�G‰G�T—^‘^ DÓ)Ô+IÈ<ÐY]×YbÑYbó
ð 	
rÀ   c                óˆ  — t        |t        «      r`t        |j                  t        «      rE| j	                  |«      r4| j
                  j                  j                  |j                  «      }|r|gS yg }|j                  D ]@  }t        |t        t        f«      r'| j                  |«      }|€ y|j                  |«       Œ@ y |S )zŠFlatten classes in isinstance(obj, (A, (B, C))).

        If at least one item is not a reference to a native class, return None.
        N)r  r'   r  r-   r›  rÑ   r²  r‹  rw  r+   Úflatten_classesÚextend)rû   ÚargÚirr  r  Ú	item_parts         rÁ   rØ  zIRBuilder.flatten_classes™  s«   € ô
 �cœ7Ô#Ü˜#Ÿ(™(¤HÔ-°$×2PÑ2PÐQTÔ2UØ—[‘[×+Ñ+×/Ñ/°·±Ó9�ÙØ˜4�KØà!#ˆCØŸ	™	ò  �Ü˜d¤W¬iÐ$8Ô9Ø $× 4Ñ 4°TÓ :�IØ Ð(Ù#Ø—J‘J˜yÕ)áð ð ˆJrÀ   ©Úret_typec               ó  — t        |t        «      rt        |¬«      }t        | j                  | j
                  «      | _        | j                  j                  | j                  | j                  «       | j                  j                  | j                  «       | j                  j                  i «       | j                  j                  g «       || _        | j                  j                  | j                  «       | j                   j                  |«       | j"                  j                  | j$                  «       | j&                  j                  | j(                  «       | j*                  j                  | j,                  «       d| _        t/        «       | _        d| _        |j0                  r$| j2                  j                  t5        «       «       n#| j2                  j                  t7        «       «       | j9                  t;        «       «       y )N©r`  r   F)r  rë  r‰   r‹   rñ   rÜ   rÉ   r  rÿ   r   rÊ   rÜ  rË   rÌ   rî   rï   rÔ   r÷   rô   rø   rõ   rù   rö   rÖ   r  rð   rŽ   r�   r  r]   )rû   rî   rÞ  s      rÁ   ÚenterzIRBuilder.enter°  sj  € Ü�gœsÔ#Ü GÔ,ˆGÜ(¨¯©°d·l±lÓCˆŒØ�‰×Ñ × 0Ñ 0°$×2BÑ2BÔCØ�‰×Ñ˜TŸ\™\Ô*Ø�‰×Ñ˜bÔ!Ø×Ñ× Ñ  Ô$ØˆŒØ�‰×Ñ˜TŸ\™\Ô*Ø�‰×Ñ˜hÔ'ð 	×#Ñ#×*Ñ*¨4×+@Ñ+@ÔAØ×%Ñ%×,Ñ,¨T×-DÑ-DÔEØ×#Ñ#×*Ñ*¨4×+@Ñ+@ÔAØ !ˆÔÜ"%£%ˆÔØ %ˆÔØ×ÒØ×!Ñ!×(Ñ(Ô)AÓ)CÕDà×!Ñ!×(Ñ(Ô)<Ó)>Ô?Ø×ÑœJ›LÕ)rÀ   c                óz  — | j                   j                  «       }| j                  j                  «        | j                  j                  «       }| j                  j                  «       }| j
                  j                  «       }| j                  j                  «        | j                  j                  «       | _        | j                  j                  «       | _
        | j                  j                  «       | _        | j                   d   | _        | j
                  d   | _        |j                  ||j                   ||fS r¾  )rÊ   rP  rË   rÌ   rÔ   rï   rð   r÷   rô   rø   rõ   rù   rö   rÉ   rî   rg  rÃ  )rû   rÉ   rÌ   rÞ  rî   s        rÁ   ÚleavezIRBuilder.leaveÊ  sì   € Ø—-‘-×#Ñ#Ó%ˆØ�‰×ÑÔØ×(Ñ(×,Ñ,Ó.ˆØ—>‘>×%Ñ%Ó'ˆØ—-‘-×#Ñ#Ó%ˆØ×Ñ×!Ñ!Ô#Ø $× ;Ñ ;× ?Ñ ?Ó AˆÔØ"&×"?Ñ"?×"CÑ"CÓ"EˆÔØ $× ;Ñ ;× ?Ñ ?Ó AˆÔØ—}‘} RÑ(ˆŒØ—}‘} RÑ(ˆŒØ�|‰|˜\¨7¯>©>¸8ÀWÐLÐLrÀ   c              #  óî  K  — | j                   j                  | j                  «       | j                  j                  t	        | j                  d   «      «       | j
                  j                  g «       || _        | j                  j                  | j                  «       | j                  j                  t        «       | j                  j                  t        «       «       	 d–— | j                   j                  «        | j                  j                  «        | j
                  j                  «        | j                  j                  «        | j                  j                  «        | j                  j                  «        | j                   d   | _        | j                  d   | _        y# | j                   j                  «        | j                  j                  «        | j
                  j                  «        | j                  j                  «        | j                  j                  «        | j                  j                  «        | j                   d   | _        | j                  d   | _        w xY w­w)a  Push a lightweight scope for comprehensions.

        Unlike enter(), this reuses the same LowLevelIRBuilder (same basic
        blocks and registers) but pushes new symtable and fn_info entries
        so that the closure machinery sees a scope boundary.
        rµ  N)rÊ   rÜ  rÉ   rË   r  rÌ   rî   rï   rÔ   r„   rð   r�   rP  )rû   rî   s     rÁ   Úenter_scopezIRBuilder.enter_scopeØ  s®  è ø€ ð 	�‰×Ñ˜TŸ\™\Ô*ð
 	�‰×Ñœd 4§>¡>°"Ñ#5Ó6Ô7Ø×Ñ× Ñ  Ô$ØˆŒØ�‰×Ñ˜TŸ\™\Ô*Ø�‰×ÑœoÔ.Ø×Ñ×$Ñ$Ô%8Ó%:Ô;ð
	-Ûà�M‰M×ÑÔØ�N‰N×ÑÔ Ø×Ñ×!Ñ!Ô#Ø�N‰N×ÑÔ Ø�M‰M×ÑÔØ×!Ñ!×%Ñ%Ô'ØŸ=™=¨Ñ,ˆDŒLØŸ=™=¨Ñ,ˆD�Løð �M‰M×ÑÔØ�N‰N×ÑÔ Ø×Ñ×!Ñ!Ô#Ø�N‰N×ÑÔ Ø�M‰M×ÑÔØ×!Ñ!×%Ñ%Ô'ØŸ=™=¨Ñ,ˆDŒLØŸ=™=¨Ñ,ˆD�Lüs    ‚C I5Ã#F, Ã'CI5Æ,CI2É2I5c              #  ó*  K  — | j                   }| j                  }| j                  }d| _         	 | j                  j	                  |«      5  d–— ddd«       || _         || _        || _        y# 1 sw Y   ŒxY w# || _         || _        || _        w xY w­w)a^  Enter new borrow scope from which borrows can't leak to outer expressions.

        This is a borrow region (see LowLevelIRBuilder.borrow_region) that also
        resets the per-expression borrowing heuristic state, since the body forms
        its own top-level expression context (e.g. a comprehension iteration or a
        lambda body).
        r   N)rô   rõ   rö   rÉ   Úborrow_region)rû   r  Úold_expression_depthÚold_reassigned_in_exprÚold_expr_has_suspends        rÁ   Úenter_borrow_scopezIRBuilder.enter_borrow_scope÷  s—   è ø€ ð  $×4Ñ4ÐØ!%×!8Ñ!8ÐØ#×4Ñ4ÐØ !ˆÔð	9Ø—‘×+Ñ+¨DÓ1ñ Û÷ð %9ˆDÔ!Ø&<ˆDÔ#Ø$8ˆDÕ!÷ð ûð %9ˆDÔ!Ø&<ˆDÔ#Ø$8ˆDÕ!üs4   ‚,B¯A9 Á
A-ÁA9 ÁBÁ-A6Á2A9 Á9BÂBc           	   #  ó   K  — | j                  ||¬«       | j                  j                  |«       | j                  j                  |«       |€t	        |«      }| j                  t        |«       	 d–— | j                  «       \  }}}	}}t        ||«      }
| j                  j                  «       }| j                  j                  «       }t        ||j                  | j                  |
|¬«      }t        |||	«      }||j                  |<   |j                  |j                   |<   | j"                  j                  |«       y# | j                  «       \  }}}	}}t        ||«      }
| j                  j                  «       }| j                  j                  «       }t        ||j                  | j                  |
|¬«      }t        |||	«      }||j                  |<   |j                  |j                   |<   | j"                  j                  |«       w xY w­w)a5  Generate IR for a method.

        If the method takes arguments, you should immediately afterwards call
        add_argument() for each non-self argument (self is created implicitly).

        Args:
            class_ir: Add method to this class
            name: Short name of the method
            ret_type: Return type of the method
            fn_info: Optionally, additional information about the method
            self_type: If not None, override default type of the implicit 'self'
                argument (by default, derive type from class_ir)
        rÝ  N)Úinternal)rá  rÍ   rÜ  rÎ   rr   Úadd_argumentrI   rã  rW   rP  rU   r`  rÿ   rV   ÚmethodsrÇ  Úmethod_declsrÕ   )rû   r  r`  rÞ  rî   Ú	self_typerí  Úarg_regsrg  rÃ  ÚsigrÇ  rÛ  s                rÁ   Úenter_methodzIRBuilder.enter_method  sÁ  è ø€ ð. 	�
‰
�7 Xˆ
Ô.Ø× Ñ ×'Ñ'¨Ô-Ø×Ñ×"Ñ" 8Ô,ØÐÜ! (Ó+ˆIØ×Ñœ) YÔ/ð	&Ûà8<¿
¹
»Ñ5ˆH�d˜F H¨gÜ  hÓ/ˆCØ×+Ñ+×/Ñ/Ó1ˆDØ×*Ñ*×.Ñ.Ó0ˆHÜ˜D (§-¡-°×1AÑ1AÀ3ÐQYÔZˆDÜ˜˜h¨Ó/ˆBØ%'ˆH×Ñ˜TÑ"Ø*,¯'©'ˆH×!Ñ! $Ñ'Ø�N‰N×!Ñ! "Õ%øð 9=¿
¹
»Ñ5ˆH�d˜F H¨gÜ  hÓ/ˆCØ×+Ñ+×/Ñ/Ó1ˆDØ×*Ñ*×.Ñ.Ó0ˆHÜ˜D (§-¡-°×1AÑ1AÀ3ÐQYÔZˆDÜ˜˜h¨Ó/ˆBØ%'ˆH×Ñ˜TÑ"Ø*,¯'©'ˆH×!Ñ! $Ñ'Ø�N‰N×!Ñ! "Õ%üs    ‚A-HÁ0D? Á4CHÄ?CHÈHc                óÊ   — t        |t        «      rt        |«      }| j                  ||d¬«      }| j                  d   j                  t        |j                  ||«      «       |S )z‡Declare an argument in the current function.

        You should use this instead of directly calling add_local() in new code.
        T©Úis_argrµ  )r  rë  r/   Ú	add_localrÌ   rÜ  rX   r`  )rû   rÏ  rä  r   r  s        rÁ   rî  zIRBuilder.add_argument6  sV   € ô
 �cœ3ÔÜ�c“(ˆCØ�n‰n˜S #¨dˆnÓ3ˆØ×Ñ˜"Ñ×$Ñ$¤Z°·±¸#¸tÓ%DÔEØˆ
rÀ   c                ó&   — | j                   d   |   S r¾  ©rË   ©rû   r  s     rÁ   r
  zIRBuilder.lookupA  s   € Ø�~‰~˜bÑ! &Ñ)Ð)rÀ   c                ó  — t        |t        «      sJ |«       ‚t        |t        |j                  «      ||j
                  ¬«      }t        |«      | j                  d   |<   |r%| j                  j                  j                  |«       |S )z‚Add register that represents a symbol to the symbol table.

        Args:
            is_arg: is this a function argument
        )r÷  r  rµ  )r  r*   rm   Úremangle_redefinition_namer`  r  r–   rË   rÉ   rg  rÜ  )rû   r  rä  r÷  r  s        rÁ   rø  zIRBuilder.add_localD  st   € ô ˜&¤*Ô-Ð5¨vÓ5Ð-ÜØÔ+¨F¯K©KÓ8ÀÈfÏkÉkô
ˆô &>¸cÓ%Bˆ�‰�rÑ˜6Ñ"ÙØ�L‰L×Ñ×$Ñ$ SÔ)Øˆ
rÀ   c                ó~   — | j                  |||«       | j                  d   |   }t        |t        «      sJ |«       ‚|S )zALike add_local, but return an assignment target instead of value.rµ  )rø  rË   r  r–   )rû   r  rä  r÷  r  s        rÁ   r	  zIRBuilder.add_local_regS  sB   € ð 	�‰�v˜s FÔ+Ø—‘ Ñ# FÑ+ˆÜ˜&Ô":Ô;ÐC¸VÓCÐ;ØˆrÀ   c                óV   — | j                  t        t        «      t        |«      d¬«      S )z�Low-level function that adds a 'self' argument.

        This is only useful if using enter() instead of enter_method().
        Trö  )r	  r/   rI   rr   )rû   Úclss     rÁ   Úadd_self_to_envzIRBuilder.add_self_to_env\  s$   € ð
 ×!Ñ!¤#¤i£.´)¸C³.ÈÐ!ÓNÐNrÀ   c                ó*   — || j                   d   |<   |S r¾  rú  )rû   r  r  s      rÁ   Ú
add_targetzIRBuilder.add_targetc  s   € Ø%+ˆ�‰�rÑ˜6Ñ"ØˆrÀ   c                ó8   — | j                   j                  |«      S r  r^  r   s     rÁ   r  zIRBuilder.type_to_rtypeg  s   € Ø�{‰{×(Ñ(¨Ó-Ð-rÀ   c                ó–   — t        |t        «      rt        S || j                  vrt        S | j                  |   }| j                  |«      S r  )r  r   r}   rÒ   r†   r  )rû   r  Ú	mypy_types      rÁ   r  zIRBuilder.node_typej  sC   € Ü�dœGÔ$ä!Ð!Ø�t—z‘zÑ!Ü$Ð$Ø—J‘J˜tÑ$ˆ	Ø×!Ñ! )Ó,Ð,rÀ   c           
     óp   — | j                  ||| j                  j                  |j                  ||||¬«      S )N©rû  Úalways_definedÚkeep_alive_on_completionrü  )Úadd_var_to_classrî   Ú	env_classÚcurr_env_reg)rû   rÏ  r5  r_  rû  r	  r
  rü  s           rÁ   r  zIRBuilder.add_var_to_env_classs  sD   € ð ×$Ñ$ØØØ�L‰L×"Ñ"Ø×ÑØØ)Ø%=Øð %ó 	
ð 		
rÀ   c                ó¾   — | j                   j                  |g «      D ]>  }|| j                  j                  |t        «       «      v r y| j	                  ||«      sŒ> y y)NTF)rà   r‹  rÞ   rÖ   Úis_free_variable_in_nested_func)rû   rÅ  r  Únesteds       rÁ   r  z)IRBuilder.is_free_variable_in_nested_funcˆ  s\   € Ø×.Ñ.×2Ñ2°5¸"Ó=ò 	ˆFØ˜×,Ñ,×0Ñ0°¼»Ó?Ñ?ÙØ×3Ñ3°F¸FÕCÙð		ð
 rÀ   c                óÆ   — || j                   j                  | j                  j                  t	        «       «      v xs& | j                  | j                  j                  |«      S )z7Does a binding need to be visible to a nested function?)rÞ   r‹  rî   rÅ  rÖ   r  rû  s     rÁ   r  z$IRBuilder.is_captured_by_nested_func�  sT   € à˜×,Ñ,×0Ñ0Ø�L‰L×Ñ¤£ó
ð 
ò Nà×1Ñ1°$·,±,×2DÑ2DÀfÓMð	NrÀ   c                ó²   — | j                   j                  j                  }| j                  |||||||t	        |j
                  |j                  ¬«      ¬«      S )zDAdd a generator-owned source binding to the private generator frame.)Úis_final_classr  )rî   r  rÛ  r  rJ   r\  r  )rû   rÏ  r5  Ú	frame_regrû  r	  r
  r   s           rÁ   r  z$IRBuilder.add_var_to_generator_frame–  s]   € ð �l‰l×*Ñ*×-Ñ-ˆØ×$Ñ$ØØØØØØ)Ø%=Ü3Ø—‘¨S×-?Ñ-?ôð %ó 
ð 	
rÀ   c	                óø  — |t        |j                  «      z   }	||j                  |	<   |r|j                  j	                  |	«       |r|j
                  j	                  |	«       t        ||	«      }
|rz| j                  | j                  |«      | j                  j                  j                  «      }| j	                  t        ||	|| j                  j                  j                  «      «       | j                  ||
«      S )zNDeclare an attribute on a class and construct a target using an explicit base.)rý  r`  Ú
attributesÚ!attrs_to_keep_alive_on_completionr  Úattrs_with_defaultsr”   r  r
  rî   rÅ  r  rn   r  )rû   rÏ  r5  r   r_  rû  r	  r
  rü  r`  Úattr_targetr  s               rÁ   r  zIRBuilder.add_var_to_class®  sÈ   € ð Ô2°3·8±8Ó<Ñ<ˆØ$ˆ�‰�tÑÙ#Ø×1Ñ1×5Ñ5°dÔ;ÙØ×#Ñ#×'Ñ'¨Ô-Ü*¨4°Ó6ˆáð —)‘)˜DŸK™K¨Ó,¨d¯l©l×.@Ñ.@×.EÑ.EÓFˆCØ�H‰H”W˜T 4¨¨d¯l©l×.@Ñ.@×.EÑ.EÓFÔGð �‰˜s KÓ0Ð0rÀ   c                ó²   — |j                   sJ d«       ‚d|j                   j                  v xr+ |j                   j                  j                  d«      d   dk(  S )NúRefExpr not resolvedrÚ  r   Úbuiltins)r  r\  ÚsplitrZ  s     rÁ   Úis_builtin_ref_exprzIRBuilder.is_builtin_ref_exprÌ  sN   € Ø�yŠyÐ0Ð0Ó0ˆyØ�d—i‘i×(Ñ(Ð(Ò[¨T¯Y©Y×-?Ñ-?×-EÑ-EÀcÓ-JÈ1Ñ-MÐQ[Ñ-[Ð[rÀ   c                óÔ  — | j                  |«      rC|j                  sJ d«       ‚| j                  |j                  j                  |j                  «      S | j                  |«      r^t        |j                  t        «      rD| j                  |j                  «      s)|j                  sJ ‚| j                  |j                  «      S | j                  |j                  |j                  «      S )zÆLoads a Python-level global.

        This takes a NameExpr and uses its name as a key to retrieve the corresponding PyObject *
        from the _globals dictionary in the C-generated code.
        r  )r  r  Úload_module_attr_by_fullnamer\  r  r›  r  r-   r¡  r[  Úload_global_strr`  rZ  s     rÁ   Úload_globalzIRBuilder.load_globalÐ  s¯   € ð ×#Ñ# DÔ)Ø—9’9Ð4Ð4Ó4�9Ø×4Ñ4°T·Y±Y×5GÑ5GÈÏÉÓSÐSà×*Ñ*¨4Ô0Ü˜4Ÿ9™9¤hÔ/Ø×*Ñ*¨4¯9©9Ô5à—=’=Ð �=Ø×/Ñ/°·±Ó>Ð>Ø×#Ñ# D§I¡I¨t¯y©yÓ9Ð9rÀ   c                óx   — | j                  «       }| j                  ||«      }| j                  t        ||g|«      S r  )r  r(  ri  r�   )rû   r`  r  Ú_globalsr  s        rÁ   r!  zIRBuilder.load_global_strã  s:   € Ø×)Ñ)Ó+ˆØ�m‰m˜D $Ó'ˆØ× Ñ Ô!1°H¸c°?ÀDÓIÐIrÀ   c                óv   — | j                   xs | j                  }| j                  t        t        d|«      «      S )NÚglobals)rú   rÿ   r  rh   r|   r‘  s     rÁ   r  zIRBuilder.load_globals_dictè  s0   € Ø×+Ñ+Ò?¨t×/?Ñ/?ˆØ�x‰xœ
¤?°I¸vÓFÓGÐGrÀ   c                ót   — |j                  d«      \  }}}| j                  |«      }| j                  |||«      S ©NrÚ  )Ú
rpartitionrc  r$  )rû   r\  r  r�  r¶  r`  rÑ  s          rÁ   r   z&IRBuilder.load_module_attr_by_fullnameì  s=   € Ø"×-Ñ-¨cÓ2‰ˆ��4Ø×Ñ Ó'ˆØ×Ñ  d¨DÓ1Ð1rÀ   c                óÞ   ‡— | j                  ‰j                  «      }t        |t        «      xr@ |j                  j
                  xr( t        ˆfd„|j                  j                  D «       «      S )zIIs expr a direct reference to a native (struct) attribute of an instance?c              3  óN   •K  — | ]  }‰j                   |j                  v –— Œ y ­wr  )r`  r  )r_  rÛ  rÊ  s     €rÁ   r`  z/IRBuilder.is_native_attr_ref.<locals>.<genexpr>÷  s   øè ø€ ÒP°2�D—I‘I §¡Ô.ÑPùs   ƒ"%)r  rÊ  r  rr   r  r  Úanyrr  ©rû   rÊ  Ú	obj_rtypes    ` rÁ   r  zIRBuilder.is_native_attr_refñ  sY   ø€ à—N‘N 4§9¡9Ó-ˆ	ä�y¤)Ó,ò QØ×"Ñ"×/Ñ/òQäÓP¸×9KÑ9K×9OÑ9OÔPÓPð	
rÀ   c                óÖ   — | j                  |j                  «      }t        |t        «      xr= |j                  j
                  xr% |j                  j                  |j                  «      S )a]  Is expr a direct reference to a Final native (struct) attribute of an instance?

        A Final attribute is read-only at runtime (it has no setter), so it can never be
        reassigned after construction. This makes it safe to borrow even on free-threaded
        builds, since no concurrent store can invalidate the borrowed reference.
        )r  rÊ  r  rr   r  r  Úis_final_attrr`  r-  s      rÁ   Úis_final_native_attr_refz"IRBuilder.is_final_native_attr_refú  sV   € ð —N‘N 4§9¡9Ó-ˆ	ä�y¤)Ó,ò <Ø×"Ñ"×/Ñ/ò<à×"Ñ"×0Ñ0°·±Ó;ð	
rÀ   c                óŠ  — | j                   sy	 t        |t        «      r|j                  r|j                  }n*t        |t
        «      r|j                  r|j                  }nnŒTt        |t        «      sy| j                   D ]A  }| j                  d   j                  |«      }t        |t        «      sŒ2|j                  |u sŒA y y)až  Is the root local variable a borrow chain 'v' reads from reassigned this expression?

        A whole-expression borrow of an attribute keeps the borrow root alive only
        via the register holding it. If that register belongs to a local variable
        that is rebound (via a walrus assignment) during the same top-level
        expression, the old value may be freed while the borrow is still live.
        FTrµ  )rõ   r  rb   Úis_borrowedr%  r`   r<  rm   rË   r‹  r–   r  )rû   r}  r  r  s       rÁ   Úroot_is_reassignedzIRBuilder.root_is_reassigned  s©   € ð ×&Ò&ØàÜ˜!œWÔ%¨!¯-ª-Ø—E‘E‘Ü˜AœtÔ$¨¯ªØ—E‘E‘àð ô ˜!œXÔ&ØØ×-Ñ-ò 	ˆFØ—^‘^ BÑ'×+Ñ+¨FÓ3ˆFÜ˜&Ô":Õ;ÀÇÁÐSTÒ@TÙð	ð rÀ   c                ó"   — d| j                   d<   y)zÌMark statements in the innermost block being processed as unreachable.

        This should be called after a statement that unconditionally leaves the
        block, such as 'break' or 'return'.
        Frµ  N)rÏ   r"  s    rÁ   Úmark_block_unreachablez IRBuilder.mark_block_unreachable"  s   € ð */ˆ×"Ñ" 2Ò&rÀ   c                ó.   — t        | j                  |«      S r  )rP   r   rA  s     rÁ   rP   zIRBuilder.catch_errors+  s   € Ü˜D×,Ñ,¨dÓ3Ð3rÀ   c                óR   — | j                   j                  || j                  |«       y r  )rñ   Úwarningr   ©rû   Úmsgr  s      rÁ   r9  zIRBuilder.warning.  s   € Ø�‰×Ñ˜C ×!1Ñ!1°4Õ8rÀ   c                óR   — | j                   j                  || j                  |«       y r  )rñ   rÌ  r   r:  s      rÁ   rÌ  zIRBuilder.error1  s   € Ø�‰×Ñ˜#˜t×/Ñ/°Õ6rÀ   c                óR   — | j                   j                  || j                  |«       y r  )rñ   Únoter   r:  s      rÁ   r>  zIRBuilder.note4  s   € Ø�‰×Ñ˜˜d×.Ñ.°Õ5rÀ   c                óð   — |j                   |j                  f}|| j                  v r| j                  d|d   › d�|«       y | j                  j	                  |«       | j
                  j                  |«       y )NzDuplicate definition of "r	  z" not supported by mypyc)rÞ  r`  r×   rÌ  r  rÕ   rÜ  )rû   Úfunc_irr  r`  s       rÁ   Úadd_functionzIRBuilder.add_function7  sk   € Ø×"Ñ" G§L¡LÐ1ˆØ�4×&Ñ&Ñ&Ø�J‰JÐ2°4¸±7°)Ð;SÐTÐVZÔ[ØØ×Ñ×Ñ Ô%Ø�‰×Ñ˜gÕ&rÀ   c                óŒ   — | j                   j                  j                  }| j                  j                  j                  |«      S r  )rî   rÅ  r¥  rÑ   r²  r‹  )rû   Ú	type_infos     rÁ   Úget_current_class_irzIRBuilder.get_current_class_ir?  s2   € Ø—L‘L×&Ñ&×+Ñ+ˆ	Ø�{‰{×%Ñ%×)Ñ)¨)Ó4Ð4rÀ   c                ó¼   — | j                  t        t        |dz   d | j                  t	        t        dt        «      gt        «      «      |g|j                  «      «      S )NÚ_coroutine_setuprl  )	r  r_   rU   rÿ   rW   rX   r†   rx   r  )rû   rÞ  r%  s      rÁ   Úadd_coroutine_setup_callz"IRBuilder.add_coroutine_setup_callC  s[   € Ø�x‰xÜÜØÐ!3Ñ3ØØ×$Ñ$Ü!¤:¨fÔ6GÓ#HÐ"IÌ?Ó[ó	ð �Ø—‘ó	ó
ð 	
rÀ   c                ó:   — | j                   j                  ||«      S r  )rÉ   Úload_builtinrï  s      rÁ   rI  zIRBuilder.load_builtinQ  s   € Ø�|‰|×(Ñ(¨¨tÓ4Ð4rÀ   )rÐ   rë  rÒ   zdict[Expression, Type]rÓ   r   rñ   rQ   rÑ   rŒ   rü   r‘   rê   rº   rÜ   rœ   ré   z%dict[FuncDef, list[RegisterImplInfo]]rÔ  ÚNone)rÿ   rë  r   rë  rÔ  rJ  )r  r   ró   rò  rÔ  rq   )r  r)   rÔ  rJ  )r  zStatement | Expressionró   rò  rÔ  úValue | None)r  ró  r  ró  rÔ  rJ  )r  rj   rÔ  rq   )r  r]   rÔ  rJ  )r  r]   rÔ  rJ  )rÔ  rm   )r%  rq   r&  rë  r  ró  rÔ  rq   )rµ  )r*  rë  r  ró  rÔ  rq   )r*  ró  r  ró  rÔ  rq   )r*  rô  r  ró  rÔ  rq   )r5  rq   r6  rë  r  ró  rÔ  rq   )
r5  rq   r:  rq   r6  rë  r  ró  rÔ  rq   )F)
r<  rq   r=  rt   r  ró  r>  rò  rÔ  rq   )r  ró  rÔ  rq   )rM  úlist[Value]r  ró  rÔ  rq   )NN)rT  rq   rU  rL  r  ró  rV  úlist[ArgKind] | NonerW  zSequence[str | None] | NonerÔ  rq   )r*  rq   rG  r]   rI  r]   rÔ  rJ  )r\  rë  rÔ  rq   )r_  rq   r`  rë  rU  rL  ra  úRType | Noner  ró  rV  rM  rW  zlist[str | None] | NonerÔ  rq   )r`  rë  rÔ  rq   )rf  r­   rg  rL  r  ró  rÔ  rq   r  )
rf  rk   rg  rL  r  ró  ra  rN  rÔ  rq   )rl  rt   rm  rq   rn  rq   r  ró  r  ró  rÔ  rq   )
rm  rq   rn  rq   r  rë  r  ró  rÔ  rq   )rs  rq   r  ró  rt  rò  rÔ  rq   )rw  rL  r  ró  rÔ  rq   )rz  zstr | ValuerÔ  rJ  )r}  rq   r  ró  rÔ  rJ  )
r€  rS   r�  rë  rs  rq   r  ró  rÔ  rJ  )r�  rë  r  ró  rÔ  rK  )r–  rK  r“  rq   r  ró  r�  r]   r‘  r]   r—  rK  rÔ  rJ  )r�  rë  r  ró  rÔ  rq   )r�  rë  r&  rë  r  ró  rÔ  rq   )r  rm   r°  úCallable[[], Value]r  ró  rÔ  rJ  )
r  rm   r°  rO  r¹  ró  r  ró  rÔ  rJ  ©rÔ  rJ  )rÍ  zlist[Lvalue]r  ró  rÔ  rJ  )rÔ  rò  )rÔ  zFuncInfo | None)
rÎ  r!   rÝ  rq   rÞ  ú
str | NonerØ  rN  rÔ  rJ  )
r\  rë  rä  rt   r  ró  rå  rQ  rÔ  rq   )r*  rq   r`  rë  r  ró  rÔ  rJ  )r`  rë  r  ró  rÔ  rq   )rs  z*int | str | bytes | float | complex | boolr  ró  rÔ  rq   )rÎ  r!   r  ró  rù  rò  rÔ  r“   )
r  zValue | AssignmentTargetr  ró  ró   rò  r  rò  rÔ  rq   )r  zRegister | AssignmentTargetrÝ  rq   r  ró  rÔ  rJ  )r4  rq   r5  rt   r  ró  rÔ  rq   )r  r—   r4  rq   r  ró  rÔ  rJ  )r=  r“   r>  rq   r  ró  rÔ  rJ  )r  r—   rÝ  rq   r  ró  rÔ  rJ  )rL  r]   rM  r]   rÔ  rJ  )r*  rq   rÔ  rm   )rU  r   rÔ  z
int | None)rÊ  r   rÔ  rt   )r=  r8   rÔ  rt   )rÊ  r   rÔ  úlist[Instance])r=  r8   rÔ  rR  )rÊ  r   rÔ  r8   )r�  rë  rÔ  rò  )rÊ  r'   rÔ  rò  )rä  r-   rÔ  rò  )rÊ  r"   rÔ  ztuple[str, Var, bool] | None)rÊ  r"   rÔ  ú
Var | None)r´  r5   r`  rë  rÔ  rS  )r¨  r/   r\  rë  r`  rë  r«  rò  rä  r8   r  ró  rÔ  rK  )rÊ  r"   rÔ  rò  )rÊ  r   rÄ  r'   rU  rL  rÔ  rq   )rÊ  r%   rÔ  rq   )rÚ  zRefExpr | TupleExprrÔ  zlist[ClassIR] | None)rÈ   )rî   úFuncInfo | strrÞ  rt   rÔ  rJ  )rÔ  zJtuple[list[Register], list[RuntimeArg], list[BasicBlock], RType, FuncInfo])rî   r‰   rÔ  úIterator[None])r  ró  rÔ  rU  )rÈ   NF)r  rR   r`  rë  rÞ  rt   rî   rT  rñ  rN  rí  rò  rÔ  rU  )rÏ  z	str | Varrä  rt   r   r   rÔ  rm   )r  r*   rÔ  ÚSymbolTarget)r  r*   rä  rt   r÷  rò  rÔ  rm   )r  r*   rä  rt   r÷  rò  rÔ  r–   )r   rR   rÔ  r–   )r  r*   r  rV  rÔ  rV  )rä  zType | NonerÔ  rt   )r  r   rÔ  rt   )FFFrÈ   )rÏ  r*   r5  rt   r_  zFuncInfo | ImplicitClassrû  rò  r	  rò  r
  rò  rü  rë  rÔ  r“   )rÅ  r   r  r*   rÔ  rò  )r  r*   rÔ  rò  )FFF)rÏ  r*   r5  rt   r  rq   rû  rò  r	  rò  r
  rò  rÔ  r“   )rÏ  r*   r5  rt   r   rR   r_  rq   rû  rò  r	  rò  r
  rò  rü  rë  rÔ  r“   )rÊ  r$   rÔ  rq   rÓ  )r\  rë  r  ró  rÔ  rq   )r}  rq   rÔ  rò  )r  ró  rÔ  r   )r;  rë  r  ró  rÔ  rJ  )r@  rV   r  ró  rÔ  rJ  )rÔ  zClassIR | None)rÞ  rë  r%  rq   rÔ  rq   )r`  rë  r  ró  rÔ  rK  )„r¼   r½   r¾   Ú__doc__rý   r  r
   r  rG   r  r  r  r  r   rû   r$  r(  r.  r0  r2  r4  r8  r  r@  rD  rG  rI  rK  rO  rQ  rS  rY  r[  r^  rc  re  ri  rk  rp  rr  rv  ry  r|  rƒ  r¤  rŒ  r�  r­  r³  r¼  rÁ  r¿  rÀ  rÐ  rÕ  r×  rà  rç  rí  rð  rø  r  r  r'  r"  r(  r@  r)  rN  rQ  rS  rW  r[  rY  ri  rh  rz  r~  r‚  r�  r‰  r“  rŽ  r™  r›  r¡  r¬  r§  r®  r¹  r¦  rÈ  rÖ  rØ  r„   rá  rã  r   rå  rë  rô  r   rî  r
  rø  r	  r  r  r  r  r  r  r  r  r  r  r"  r!  r  r   r  r1  r4  r6  rP   r9  rÌ  r>  rA  rD  rG  rI  r¿   rÀ   rÁ   rÆ   rÆ   Æ   s+  „ ñð0`6àð`6ð &ð`6ð ð	`6ð
 ð`6ð ð`6ð ð`6ð ð`6ð !ð`6ð Dð`6ð 
ó`6óH:ð Ø=BÔQó ØQàÚ2ó Ø2àINõ &ðP <Rõ :ó
$ó"ó+ó.ó#ó9ô2ôDô2ô4ó:óAô^ô.ô'ô'ô(ó6ó5óGð +/Ø15ðVàðVð  ðVð ð	Vð
 (ðVð /ðVð 
óVó9ó>ð +/Ø-1ð
àð
ð ð
ð  ð	
ð
 "ð
ð ð
ð (ð
ð +ð
ð 
ó
ó.ó5ð %)ðHà"ðHð ðHð ð	Hð
 "ðHð 
óHó=ó?ôBó3ó1ó<ð	>Ø&ð	>Ø-0ð	>Ø7<ð	>ØDGð	>à	ó	>ó]ðL &*ðAàðAð ðAð ð	Að
 !ðAð ðAð #ðAð 
óAó8bó
8ó(ð(Øð(Ø)<ð(ØEHð(ØPSð(à	ó(ó$,óEó$ó
dó'ó ð "&ð	Bð '+ñBàðBð ðBð ð	Bð $ðBð 
óBð* NRð
Øð
Ø"'ð
Ø/2ð
Ø@Jð
à	ó
óaó

ð LNð6Ø=ð6ØEHð6à	ó6ð. +-ðO8ØBGñO8ØðO8Ø$'ðO8Ø;?ðO8à	óO8ðh ð"8ð
 !Ø"'ñ"8à(ð"8ð ð"8ð
 ð"8ð  ð"8ð 
ó"8óH+:óZ
0ð-Ø+ð-Ø5:ð-ØBEð-à	ó-ðB(Ø%ð(Ø.3ð(Ø;>ð(à	ó(ðE*Ø+ðE*Ø9>ðE*ØFIðE*à	óE*óN
ó
$óó;óBó"ó:CóCó64ó
4ó
.ó
Yó,4ó`óYó
4ó;óVó*óXó6ð0ØðØ(+ðØ36ðØ@DðØKOðØWZðà	óó(Wð)
Øð)
Ø&-ð)
Ø;Fð)
à	ó)
óV
ó&ð.*Àõ *ó4Mð ò-ó ð-ð< ò9ó ð9ð( ð #%Ø"&Øð'&àð'&ð ð'&ð ð	'&ð
  ð'&ð  ð'&ð ð'&ð 
ò'&ó ð'&ðR HOô 	ó*ôð  >CðØ ðØ',ðØ6:ðà	!óóOóó.ó-ð Ø$Ø).Øð
àð
ð ð
ð 'ð	
ð
 ð
ð ð
ð #'ð
ð ð
ð 
ó
ó*óNð Ø$Ø).ð
àð
ð ð
ð ð	
ð
 ð
ð ð
ð #'ð
ð 
ó
ð< Ø$Ø).Øð1àð1ð ð1ð ð	1ð
 ð1ð ð1ð ð1ð #'ð1ð ð1ð 
ó1ó<\ó:ó&Jó
Hó2ó

ó
óó4/ó4ó9ó7ó6ó'ó5ó
ô5rÀ   rÆ   c                ó  ‡ ‡‡‡— ‰ j                   j                  Šd}‰j                  D ]Õ  Š‰j                  sŒ‰ j	                  ‰j
                  «      Šdˆˆ ˆˆfd„}t        ‰t        «      sJ ‰«       ‚‰j                  }|j                  j                  s2‰ j                  ‰j                  |‰j                  j                  «       ŒŸ‰ j                  ‰j                  ||‰j                  j                  «       |dz  }Œ× y)z›Generate blocks for arguments that have default values.

    If the passed value is an error value, then assign the default
    value to the argument.
    r   c                 óÈ  •— ‰j                   €J ‚t        ‰j                   «      r‰j                  ‰j                   «      S ‰j                  j                  s}‰j
                  dz   ‰j                  j                  z   } ‰j                  j                  | ‰j                  f«       ‰j                  t        ‰j                  | ‰j                  «      «      S ‰j                  j                  } ‰j                  ‰j                  j                  j                  j                   | <   ‰j                  t#        ‰j                  j                  j$                  | ‰j&                  «      «      S r(  )Úinitializerrš   r  rî   Ú	is_nestedr\  Úvariabler`  rÙ   rÜ  rl  r  rh   rÿ   Úcallable_classrÛ  r  rb   r  r  )r`  rÚ  rÉ   rÅ  r  s    €€€€rÁ   Úget_defaultz%gen_arg_defaults.<locals>.get_defaulta  s  ø€ Ø—‘Ð2Ð2Ð2ô ˜sŸ™Ô/Ø"Ÿ>™>¨#¯/©/Ó:Ð:ð !Ÿ™×2Ò2Ø Ÿ>™>¨CÑ/°#·,±,×2CÑ2CÑC�DØ×'Ñ'×.Ñ.°°f·k±kÐ/BÔCØ"Ÿ;™;¤z°&·+±+¸tÀW×EXÑEXÓ'YÓZÐZàŸ<™<×,Ñ,�DØIOÏÉ�G—O‘O×2Ñ2×5Ñ5×@Ñ@ÀÑFØ"Ÿ;™;Ü §¡× >Ñ >× GÑ GÈÈsÏxÉxÓXóð rÀ   r	  NrÓ  )rî   rÅ  Ú	argumentsrZ  r
  r\  r  r–   r  rl  r  r³  r  r¼  )rÉ   Únbr^  r  rÚ  rÅ  r  s   `   @@@rÁ   Úgen_arg_defaultsra  U  sÎ   û€ ð �O‰O×!Ñ!€EØ	
€BØ�‰ò  ˆØ�?‹?Ø—^‘^ C§L¡LÓ1ˆF÷ð ô( ˜fÔ&>Ô?ÐGÀÓGÐ?Ø—/‘/ˆCØ—8‘8×)Ò)Ø×&Ñ& v§¡¸ÀSÇ_Á_×EYÑEYÕZà×.Ñ.Ø—O‘O [°"°c·o±o×6JÑ6Jôð �a‘‘ñA rÀ   c                ó&   — | j                  dd«      S )aM  Remangle names produced by mypy when allow-redefinition-old is used and a name
    is used with multiple types within a single block.

    We only need to do this for locals, because the name is used as the name of the register;
    for globals, the name itself is stored in a register for the purpose of doing dict
    lookups.
    ú'Ú	__redef__)Úreplacerà  s    rÁ   rý  rý  €  s   € ð �<‰<˜˜[Ó)Ð)rÀ   c                óØ   — t        | j                  t        «      rEt        | j                  j                  «      }t        |t
        «      r|j                  j                  S | j                  S r  )r  r  r,   r>   r  r5   rl  r\  )Úrefr  s     rÁ   r¾  r¾  ‹  sF   € Ü�#—(‘(œIÔ&ä  §¡§¡Ó1ˆÜ�fœhÔ'Ø—;‘;×'Ñ'Ð'Ø�<‰<ÐrÀ   c                  ó4   ‡ — e Zd ZdZdd„Zdˆ fd„Zdd„Zˆ xZS )ÚWalrusTargetCollectorzCCollect the symbols assigned to by walrus expressions in a subtree.c                ó"   — t        «       | _        y r  )rÖ   Útargetsr"  s    rÁ   rý   zWalrusTargetCollector.__init__—  s   € Ü(+«ˆ�rÀ   c                ó®   •— |j                   j                  �/| j                  j                  |j                   j                  «       t        ‰| �  |«       y r  )r  r  rk  r  ÚsuperÚvisit_assignment_expr©rû   rº  Ú	__class__s     €rÁ   rn  z+WalrusTargetCollector.visit_assignment_exprš  s8   ø€ Ø�8‰8�=‰=Ð$Ø�L‰L×Ñ˜QŸX™XŸ]™]Ô+Ü‰Ñ% aÕ(rÀ   c                 ó   — y r  r¿   ©rû   rº  s     rÁ   Úvisit_lambda_exprz'WalrusTargetCollector.visit_lambda_exprŸ  ó   € àrÀ   rP  )rº  r   rÔ  rJ  ©rº  r    rÔ  rJ  )r¼   r½   r¾   rW  rý   rn  rs  Ú__classcell__©rp  s   @rÁ   ri  ri  ”  s   ø„ ÙMó.õ)÷
rÀ   ri  c                óP   — t        «       }| j                  |«       |j                  S )zìReturn the symbols reassigned via a walrus expression within 'expr'.

    Walrus (':=') is the only way to rebind a variable in the middle of evaluating
    an expression, so this is the complete set of in-expression reassignments.
    )ri  r  rk  )rÊ  Ú	collectors     rÁ   r  r  ¤  s$   € ô &Ó'€IØ‡K�K�	ÔØ×ÑÐrÀ   c                  óX   ‡ — e Zd ZdZd	d„Zd
d„Zdd„Zdd„Zdˆ fd„Zdˆ fd„Z	dd„Z
ˆ xZS )ÚSuspendDetectorz7Detect await/yield/yield from expressions in a subtree.c                ó   — d| _         y )NF©r°  r"  s    rÁ   rý   zSuspendDetector.__init__²  s	   € Øˆ�
rÀ   c                ó   — d| _         y ©NTr}  rr  s     rÁ   Úvisit_await_exprz SuspendDetector.visit_await_exprµ  ó	   € Øˆ�
rÀ   c                ó   — d| _         y r  r}  rr  s     rÁ   Úvisit_yield_exprz SuspendDetector.visit_yield_expr¸  r�  rÀ   c                ó   — d| _         y r  r}  rr  s     rÁ   Úvisit_yield_from_exprz%SuspendDetector.visit_yield_from_expr»  r�  rÀ   c                ó\   •— t        |j                  «      rd| _        t        ‰| �  |«       y r  )r,  Úis_asyncr°  rm  Úvisit_generator_exprro  s     €rÁ   rˆ  z$SuspendDetector.visit_generator_expr¾  s$   ø€ ô ˆq�z‰zŒ?ØˆDŒJÜ‰Ñ$ QÕ'rÀ   c                ó\   •— t        |j                  «      rd| _        t        ‰| �  |«       y r  )r,  r‡  r°  rm  Úvisit_dictionary_comprehensionro  s     €rÁ   rŠ  z.SuspendDetector.visit_dictionary_comprehensionÆ  s"   ø€ Üˆq�z‰zŒ?ØˆDŒJÜ‰Ñ.¨qÕ1rÀ   c                 ó   — y r  r¿   rr  s     rÁ   rs  z!SuspendDetector.visit_lambda_exprË  rt  rÀ   rP  )rº  r   rÔ  rJ  )rº  r0   rÔ  rJ  )rº  r1   rÔ  rJ  )rº  r   rÔ  rJ  )rº  r   rÔ  rJ  ru  )r¼   r½   r¾   rW  rý   r€  rƒ  r…  rˆ  rŠ  rs  rv  rw  s   @rÁ   r{  r{  ¯  s)   ø„ ÙAóóóóõ(õ2÷
rÀ   r{  c                óP   — t        «       }| j                  |«       |j                  S )a'  Does evaluating 'expr' involve a suspension point (await/yield/yield from)?

    A whole-expression borrow can't safely span a suspension point, since the
    borrowed value and its borrow root are held in registers that aren't spilled
    into the generator environment across the suspend.
    )r{  r  r°  )rÊ  Údetectors     rÁ   rö   rö   Ð  s"   € ô Ó €HØ‡K�K�ÔØ�>‰>ÐrÀ   c           	     ó”  — g }d}|D �]=  }|j                   t        k(  r|r|}ne| j                  |d|«      }|}nO|j                   t        k(  r| j                  |d|«      }n(|j                   t        k(  sJ ‚| j                  |d|«      }|j                   t        k7  rN| j                  || j                  |j                  |«      | j                  |«      g|t        t        gddg¬«      }n.| j                  || j                  |j                  |«      g|«      }| j                  ||j                  |«       |j                  |«       �Œ@ |S )aR  Create objects representing various kinds of Python 3.12 type parameters.

    The "typing_mod" argument is the "_typing" module object. The type objects
    are looked up from it.

    The returned list has one item for each "type_args" item, in the same order.
    Each item is either a TypeVar, TypeVarTuple or ParamSpec instance.
    NÚTypeVarÚTypeVarTupleÚ	ParamSpecÚinfer_variancer½  )r   r   r$  r   r   rS  r(  r`  rG  r   r   rí  rÜ  )	rÉ   Ú
typing_modÚ	type_argsr  ÚtvsÚtype_var_importedÚ
type_paramÚtvtÚtvs	            rÁ   Úcreate_type_paramsrš  Ü  s=  € ð €CØ&*ÐØó ˆ
Ø�?‰?œmÒ+Ù à'‘à×)Ñ)¨*°iÀÓF�Ø$'Ñ!Ø�_‰_Ô 3Ò3Ø×%Ñ% j°.À$ÓG‰Cà—?‘?¤oÒ5Ð5Ð5Ø×%Ñ% j°+¸tÓDˆCØ�?‰?Ô1Ò1à—‘ØØ×!Ñ! *§/¡/°4Ó8¸'¿,¹,ÀtÓ:LÐMØÜ"¤IÐ.ØÐ!1Ð2ð !ó ‰Bð —‘  w×'7Ñ'7¸
¿¹ÈÓ'NÐ&OÐQUÓVˆBØ×Ñ˜b *§/¡/°4Ô8Ø�
‰
�2Žð3ð4 €JrÀ   c           	     óR  — |j                   }|j                  D �]  }|j                  sŒt        |j                  «      rŒ'| j	                  | j                  |j                  «      ||j                     j                  |j                  «      }|j                  sM|j                  dz   |j                  j                  z   }| j                  t        ||| j                  «      «       ŒÍ|€J ‚| j                  t        ||j                  j                  ||j                  «      «       �Œ y)zÞCalculate default argument values and store them.

    They are stored in statics for top level functions and in
    the function objects for nested functions (while constants are
    still stored computed on demand).
    rÚ  N)rÅ  r_  rZ  rš   r  r  r\  rl  r  r[  r\  r`  r  rc   rÿ   rn   )rÉ   rî   Úfunc_regÚsymtablerÅ  rÚ  r*  r`  s           rÁ   Úcalculate_arg_defaultsrž    sÝ   € ð �M‰M€EØ�‰ó Sˆà�?‹?¤;¨s¯©Õ#?Ø—N‘NØ—‘˜sŸ™Ó/°¸#¿,¹,Ñ1G×1LÑ1LÈcÏhÉhóˆEð ×$Ò$Ø—~‘~¨Ñ+¨c¯l©l×.?Ñ.?Ñ?�Ø—‘œJ u¨d°G×4GÑ4GÓHÕIàÐ+Ð+Ð+Ø—‘œG H¨c¯l©l×.?Ñ.?ÀÈÏÉÓQÖRñSrÀ   )rÉ   rÆ   rÔ  rJ  )r`  rë  rÔ  rë  )rg  r'   rÔ  rë  )rÊ  r   rÔ  zset[SymbolNode])rÊ  r   rÔ  rò  )
rÉ   rÆ   r“  rq   r”  zlist[TypeParam]r  ró  rÔ  rL  )
rÉ   rÆ   rî   r‰   rœ  rK  r�  zdict[SymbolNode, SymbolTarget]rÔ  rJ  )árW  Ú
__future__r   Úcollections.abcr   r   r   Ú
contextlibr   Útypingr   r	   r
   Ú
mypy.buildr   Úmypy.maptyper   Ú
mypy.nodesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   Úmypy.traverserr2   Ú
mypy.typesr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   Ú	mypy.utilr?   r@   Úmypy.visitorrA   rB   Úmypyc.commonrC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   Úmypyc.crashrP   Úmypyc.errorsrQ   Úmypyc.ir.class_irrR   rS   Úmypyc.ir.func_irrT   rU   rV   rW   rX   Úmypyc.ir.opsrY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   Úmypyc.ir.rtypesrr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   r‡   Úmypyc.irbuild.constant_foldrˆ   Úmypyc.irbuild.contextr‰   rŠ   Úmypyc.irbuild.ll_builderr‹   Úmypyc.irbuild.mapperrŒ   Úmypyc.irbuild.nonlocalcontrolr�   rŽ   r�   r�   Úmypyc.irbuild.prebuildvisitorr‘   Úmypyc.irbuild.preparer’   Úmypyc.irbuild.targetsr“   r”   r•   r–   r—   Úmypyc.irbuild.utilr˜   r™   rš   Úmypyc.irbuild.vecr›   Úmypyc.optionsrœ   Úmypyc.primitives.dict_opsr�   rž   Úmypyc.primitives.generic_opsrŸ   r    r¡   Úmypyc.primitives.list_opsr¢   r£   r¤   r¥   Úmypyc.primitives.misc_opsr¦   r§   r¨   r©   rª   r«   r¬   Úmypyc.primitives.registryr­   r®   Úmypyc.primitives.tuple_opsr¯   r¸   Ú__annotations__rº   Ú	ExceptionrÄ   rV  rÆ   ra  rý  r¾  ri  r  r{  rö   rš  rž  r¿   rÀ   rÁ   ú<module>rÄ     s,  ðòõ
 #ç 8Ñ 8Ý %ß 'Ñ 'å Ý 2÷&÷ &÷ &÷ &÷ &÷ &÷ &÷ &÷ &õ &õN ,÷÷ ÷ ó ÷ 2ß <÷÷ ÷ õ õ %Ý ß 6ß ZÕ Z÷÷ ÷ ÷ ÷ ÷ õ ÷6÷ ÷ ÷ ÷ ÷ õ0 ;ß 9Ý 6Ý '÷ó õ :Ý 2÷õ ÷ IÑ HÝ *Ý )ß Hß HÑ H÷ó ÷÷ ñ ÷ IÝ ?ò !MÐ ˜Ó Lô	Ð! %Ñ(Ð*:¸4Ñ*@ô 	ô	˜9ô 	ð (Ð*>Ñ>€÷L5ñ L5ó^4(óV*óôÐ,ô ó ôÐ&ô óB	ð'Øð'Ø$)ð'Ø6Eð'ØMPð'àó'ðTSØðSàðSð ðSð -ð	Sð
 
ôSrÀ   