NL iUdZddlmZddlmZmZddlmZddlm Z m Z m Z m Z m Z ddlmZddlmZddlmZmZmZmZmZmZmZmZmZmZmZmZmZm 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/m0Z0dd l1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;mm?Z?m@Z@dd lAmBZBmCZCdd lDmEZEmFZFmGZGmHZHdd lImJZJddlKmLZLddlMmNZNmOZOddlPmQZQmRZRmSZSmTZTmUZUddlVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZiddljmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|ddl}m~Z~mZddlmZddlmZddlmZmZmZmZddlmZddlmZddlmZmZmZmZmZddlmZmZddlmZddlmZmZddlmZmZmZddlmZmZmZddlmZmZmZdd lmZmZdd!lmZhd"Zd#ed$<Gd%d&eBeieCd'ZGd(d)eZe eefZGd*d+Zd1d,Zd2d-Zd3d.Z d4d/Z d5d0Zy')6zrBuilder class to transform a mypy AST to the IR form. See the docstring of class IRBuilder for more information. ) annotations)IteratorSequence)contextmanager)AnyCallableFinalUnionoverload)Graph)map_instance_to_supertype) ARG_NAMEDARG_POSGDEFLDEFPARAM_SPEC_KIND TYPE_VAR_KINDTYPE_VAR_TUPLE_KINDArgKindCallExpr Decorator ExpressionFuncDef IndexExprIntExprLvalue MemberExprMypyFileNameExprOpExprOverloadedFuncDefRefExprStarExpr Statement SymbolNode TupleExpr TypeAliasTypeInfo TypeParam UnaryExprVar) AnyType DeletedTypeInstance ProperType TupleTypeType TypedDictType TypeOfAnyTypeVarLikeTypeUninhabitedType UnionTypeget_proper_type) module_prefix split_target)ExpressionVisitorStatementVisitor) BITMAP_BITSGENERATOR_ATTRIBUTE_PREFIX SELF_NAMETEMP_ATTR_NAME) catch_errors)Errors)ClassIRNonExtClassInfo)INVALID_FUNC_DEFFuncDeclFuncIR FuncSignature RuntimeArg)NAMESPACE_MODULENAMESPACE_TYPE_VARAssign BasicBlockBranch ComparisonOpGetAttr InitStaticIntegerIntOp LoadStaticOpPrimitiveDescriptionRaiseStandardErrorRegisterSetAttrTupleGet UnreachableValue) RInstanceRTupleRTypeRUnionbitmap_rprimitivebytes_rprimitivec_pyssize_t_rprimitivedict_rprimitiveint_rprimitiveis_float_rprimitiveis_list_rprimitiveis_none_rprimitiveis_object_rprimitive is_taggedis_tuple_rprimitivenone_rprimitiveobject_rprimitivestr_rprimitive)FuncInfo ImplicitClass)LowLevelIRBuilder)Mapper)BaseNonlocalControlGeneratorNonlocalControlLoopNonlocalControlNonlocalControl)PreBuildVisitor)RegisterImplInfo)AssignmentTargetAssignmentTargetAttrAssignmentTargetIndexAssignmentTargetRegisterAssignmentTargetTuple)bytes_from_str is_constant)CompilerOptions)dict_get_item_opdict_set_item_op)iter_opnext_op py_setattr_op)list_get_item_unsafe_op list_pop_lastto_list)check_unpack_count_opget_module_dict_op import_op)CFunctionDescription function_ops)tuple_get_item_unsafe_op>!===>=+-<><=r int_borrow_friendly_opc eZdZy) IRVisitorN__name__ __module__ __qualname__[/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mypyc/irbuild/builder.pyrrrrNc eZdZy)UnsupportedExceptionNrrrrrrrrrceZdZdZ dzdZd{dZeddd|dZed}dZddd~dZdd Zdd Z dd Z dd Z dd Z ddZ ddZddZddZddZddZddZddZdddZddZddZddZddZddZddZddZ d ddZdd Zdd!Z d dd"Z dd#Z!dd$Z" d dd%Z#dd&Z$dd'Z%dd(Z&dd)Z'dd*Z(dd+Z) dd,Z*dd-Z+ dd.Z,dd/Z-dd0Z.dd1Z/ dd2Z0dd3Z1dd4Z2dd5Z3dd6Z4dd7Z5dd8Z6 ddd9 dd:Z7 d dd;Z8dd<Z9dd=Z:dd>Z; ddd? dd@Z< d ddAZ=dddBZ>ddCZ?ddDZ@ ddEZA ddFZB ddGZCddHZDddIZEddJZFddKZGddLZHddMZIddNZJddOZKddPZLddQZMddRZNddSZOddTZPddUZQddVZRddWZSddXZTddYZUddZZVdd[ZW dd\ZXdd]ZY dd^ZZdd_Z[dd`Z\de]daddbZ^ddcZ_e` d dddZaebfddeZcddfZddddgZe d ddhZfddiZgddjZhddkZiddlZj d ddmZkddnZlddoZmddpZnddqZoddrZpddsZqddtZrdduZsddvZtddwZuddxZvddyZwy) IRBuilderahBuilder 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|||_|jg|_ig|_gg|_g|_g|_dg|_||_||_ ||_ ||_ g|_ g|_ t|_g|_g|_g|_t|_||_d|_d|_|j.|_|j0|_|j2|_|j4j7|_|j:|_|j>|_| |_ ||_!tEtFdd|_$|jHg|_%g|_&||_'i|_(d|_)y)NTrF)*rpbuilderbuilders symtables runtime_argsfunction_name_stackclass_ir_stackblock_reachable_stackcurrent_modulemappertypesgraph ret_types functionssetfunction_namesclasses final_namestype_var_namescallable_class_namesoptionslambda_counter temp_counterfree_variables prop_settersencapsulating_funcs nested_funcskeys nested_fitemsfuncs_to_decoratorsfdefs_to_decoratorsmodule_import_groupssingledispatch_implsvisitorrnrDfn_infofn_infosnonlocal_controlerrorsimports can_borrow) selfrrrrrpbvrrrs r__init__zIRBuilder.__init__sl)9  @Bt57D.0 -/37",   &(');>5&( 46)+.1e!  "00,,#&#:#:  --224#&#:#: $'$<$<!$8!  0"b9 )- 8: )+ rcX||_||_|jj||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)rrrs rrzIRBuilder.set_modules( '&  [9rFrcyNr)rnoders racceptzIRBuilder.acceptsNQrcyrr)rrs rrzIRBuilder.accepts/2rc,|j|j5t|tr|j}||_ |j |j }|j||j||j}||_|s|j|cdddS |j |j  dddy#t$rt|j|}YowxYw#t$rY>wxYw#1swYyxYw)aTransform 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. N) r@line isinstancerrrrcoerce node_typerrWflush_keep_alives)rrrold_can_borrowress rrzIRBuilder.accept s  tyy ) $ +!%",9++dll3C++c4>>$+?KC#1!**,!  $KK --  ,9"4>>$#78C9,)  sT$D ACD -C;D #C85D 7C88D ; DD DD  Dc8|jjyr)rrrs rrzIRBuilder.flush_keep_alives)s &&(rc8|jj|Sr)radd)rops rrz IRBuilder.add.s||##rc:|jj|yr)rgoto)rtargets rrzIRBuilder.goto1s &!rc:|jj|yr)ractivate_blockrblocks rrzIRBuilder.activate_block4s ##E*rc:|jj|yr)rgoto_and_activaters rrzIRBuilder.goto_and_activate7s &&u-rc6|jjSr)rrrs rrzIRBuilder.self:||  ""rc<|jj|||Sr)r py_get_attrrobjattrrs rrzIRBuilder.py_get_attr=s||''T488rc8|jj|Sr)rload_strrvalues rrzIRBuilder.load_str@||$$U++rcJ|jjt|S)zLoad 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}rs rload_bytes_from_str_literalz%IRBuilder.load_bytes_from_str_literalCs||&&~e'<==rc8|jj|Sr)rload_intrs rrzIRBuilder.load_intLrrc8|jj|Sr)r load_floatrs rrzIRBuilder.load_floatOs||&&u--rc<|jj|||Sr)runary_op)rlregexpr_oprs rrzIRBuilder.unary_opRs||$$T7D99rc>|jj||||Sr)r binary_oprrrregrrs rr zIRBuilder.binary_opUs||%%dD'4@@rcV|jj|||||jS)Nr)rrr)rsrc target_typerforces rrzIRBuilder.coerceXs&||""3 T5T__"]]rc6|jjSr)r none_objectrs rrzIRBuilder.none_object[s||''))rc6|jjSr)rnoners rrzIRBuilder.none^rrc6|jjSr)rtruers rrzIRBuilder.truearrc6|jjSr)rfalsers rrzIRBuilder.falseds||!!##rc:|jj||Sr)r new_list_oprvaluesrs rrzIRBuilder.new_list_opgs||''55rc:|jj||Sr)r new_set_oprs rrzIRBuilder.new_set_opjs||&&vt44rc>|jj||||Sr)rtranslate_is_opr s rrzIRBuilder.translate_is_opms||++D$FFrNc@|jj|||||Sr)rpy_call)rfunction arg_valuesr arg_kinds arg_namess rr!zIRBuilder.py_callps!||##Hj$ 9UUrc>|jj|||yr)radd_bool_branch)rrrrs rr'zIRBuilder.add_bool_branchzs $$UD%8rc8|jj|Sr)rload_native_type_object)rfullnames rr)z!IRBuilder.load_native_type_object}s||33H==rc Z|jj||||||||jSr)rgen_method_callr)rbasenamer# result_typerr$r%s rr,zIRBuilder.gen_method_calls0||++ $ Ky)T__  rc8|jj|Sr)r load_module)rr.s rr1zIRBuilder.load_modules||''--rc<|jj|||Sr)rcall_c)rdescargsrs rr3zIRBuilder.call_cs||""4t44rc>|jj||||Sr)r primitive_op)rr4r5rr/s rr7zIRBuilder.primitive_ops||((tT;GGrc@|jj|||||Sr)rint_op)rtypelhsrhsrrs rr9zIRBuilder.int_ops||""4c2t<|jj||||Sr)rcompare_tuples)rr;r<rrs rr>zIRBuilder.compare_tupless||**3R>>rc:|jj||Sr)r builtin_len)rvalrs rr@zIRBuilder.builtin_lens||''T22rc:|jj||Sr)r new_tuple)ritemsrs rrCzIRBuilder.new_tuples||%%eT22rc8|jj|Sr)r debug_print)rtoprints rrFzIRBuilder.debug_prints||''00rc<|jj||y)zFMake an object immortal on free-threaded builds (to avoid contention).N)rset_immortal_if_free_threaded)rvrs rrIz'IRBuilder.set_immortal_if_free_threadeds 221d;rc|j|}|jt|j||g||jj ||yr)rr7rdictrrI)rnon_extkeyrAr key_unicodes radd_to_non_ext_dictzIRBuilder.add_to_non_ext_dictsFmmC(  *W\\;,LdS 223=rcFd|j|<tt}}|j|||||j||j t |j |g|}|jt||t|j|y)N namespace) rrLcheck_if_module_loadedrr3rrrrPrIr)ridr needs_importoutrs r gen_importzIRBuilder.gen_imports R&L*,c  ##BlC@ L) I b(9':DA E21ABC s#rc|j|}|j||jd|}|j|||y)anGenerate code that checks if the module `id` has been loaded yet. Arguments: id: name of module to check if imported 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 loadedzis notN)r1rrr')rrUrrVrW first_load comparisons rrTz IRBuilder.check_if_module_loadedsF%%b) ))*d6F6F6H(TXY  Zl;rc|jtg|}|jt||j |g|Sr)r3rr7rr)rmodulermod_dicts r get_modulezIRBuilder.get_modules:;;12t<  !1HdmmF>S3TVZ[[rcp|j|||j||}|j|||S)zLook 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. )rXr_r)rr]rr module_objs rget_module_attrzIRBuilder.get_module_attrs7 %__VT2  D$77rc ^tt}}|jt|||tj|j ||jt ||j ||j||j||j |y)z:If target is NULL, assign value produced by get_val to it.N) rLrrMIS_ERRORrrKrr:r)rrget_valr error_block body_blocks rassign_if_nullzIRBuilder.assign_if_nullsx",, Z   ZIJ K(  GIv{{D IJK * J'rc tt}}|jt|jjd|t zz t d|t dz zzttj|}|jt|t dttj}|jt|||tj|j||jt||j!||j"||j%||j|y)Nr)rLr9r`rr5r<rQrRANDrrNEQrMBOOLrrKrr:r) rrreindexrrfrgobs rassign_if_bitmap_unsetz IRBuilder.assign_if_bitmap_unsets#-, Z KK  LL  b5K#77 8 A%;?346G H II    HH\!WQ0A%BLOOT U ; FKK@A K(  GIv{{D IJK * J'rct|jdst|jdr|jy|j yNrj)rgrrhadd_implicit_returnadd_implicit_unreachablers rmaybe_add_implicit_returnz#IRBuilder.maybe_add_implicit_returns= dnnR0 15I$..Y[J\5]  $ $ &  ) ) +rc<|jjd}|jsw|j|jj |j dd}|j dj|||jjjyyrt) rblocks terminatedrrrr gen_returnrfitemr)rrretvals rruzIRBuilder.add_implicit_return sy ##B'[[!2!2!4dnnR6H"MF  ! !" % 0 0vt||?Q?Q?V?V W rc|jjd}|js|jt yyrt)rryrzrrZrs rrvz"IRBuilder.add_implicit_unreachables2 ##B' HH[] # rcn|D]}t|tst|jts/t|jjt sT|jj|j j}t|ts|jr|jd|y)Nz;Only class variables defined as ClassVar can be assigned to) rrexprr"rr(r.r+ is_classvarerror)rlvaluesrlvaluevars rdisallow_class_assignmentsz$IRBuilder.disallow_class_assignmentss  dF6:.v{{G4v{{//:kk&&v{{388c3'JJ\^bc drc2t|jdkSN)lenrrs rnon_function_scopezIRBuilder.non_function_scope#s4==!Q&&rcB|jry|jdSr)rrrs rtop_level_fn_infozIRBuilder.top_level_fn_info's  " " $}}Qr) type_overridect|tsJ|t|jtsJ|j|jj| |j }n|d|j }|Jd|j ||xs|j||j}|jj||jf|jt|||jyy)N.zFull name not set for variable)rrrr+ final_valuer.rrrrappendr:rrPr)rr rvalue_reg class_namerr.coerceds rinit_final_staticzIRBuilder.init_final_static,s&(+3V3+&++s+8V[[8+ ;; " " *!{{$Qv{{m4# E%E E#kk*m.Ut~~f?UW]WbWbcG    # #T7<<$8 9 HHZt/?/?@ A +rc t|j|}|J|\}}|jj||||d|dS)Nzvalue for final name "z " was not set)r error_msg)r9rrload_static_checked)rr*typr error_name split_namer]r.s rload_final_staticzIRBuilder.load_final_static@s]"$**h7 %%%! ||//   .zl-H 0  rc|dzt|z}|jj||jt |||j t yN___rR)strrrrrPrrJ)rrr.r unique_names r init_type_varzIRBuilder.init_type_varNsFUlSY.  "";/ E;0@0@L^_`rc |jtt|dzt|z|jt Sr)rrSrlrrrJ)rr.rs r load_type_varzIRBuilder.load_type_varSs:xx !u s4y(  ,    rc"t|tr"|r|jS|jSt|tr|j j |St|tr|j j|St|tr|j j|St|tr|j j|St|tr|j j|SJd)zQLoad value of a final name, class-level attribute, or constant folded expression.zUnsupported literal value)rboolrrintrrfloatrrrbytesrcomplex load_complex)rrAs rload_literal_valuezIRBuilder.load_literal_value]s c4 yy{"zz|# S !<<((- - U #<<**3/ / S !<<((- - U #<<**3/ / W %<<,,S1 1 55 55r)for_readc|dk(r |j}t|tr|j}t|tr |j }|#|j sJt|j}|s.t|tr|jr|jd||jtk(r||jdvrt|tr6t|jts|j!|j}n|j#|}|j$j&r.|j)|||j$j*dt,S|j/||S|j1|S|jt2k(r7|j5}|j7|j}t9||SJ|jt|t:rB|j=|j>}|j=|j@} t9|| St|tBrF|jE|} |j=|jF| } tI| |j| St|tJrvd} g} tM|jND]N\}}|jQ|}| jS|t|tTs9| |jd||} PtW| | St|tTr|jQ|jFSJd|z)Nrjz2Cannot assign to the first argument of classmethodF)reassignprefixrz%Two starred expressions in assignmentUnsupported lvalue: %r),rrrrrfuncis_special_formr+r.is_clsrkindrrr:r- type_to_rtyperr is_generatoradd_var_to_env_classgenerator_classr= add_local_reglookuprload_globals_dictrrzrrr-roris_native_attr_refrryr& enumeraterDget_assignment_targetrr#r|)rrrrsymbolreg_type globals_dictr.r-rorrstar_idxridxitemtargs rrzIRBuilder.get_assignment_targetqs 2:;;D fh '[[F&),~----V[[) 63 7FMM OQUV{{d"!33!&#.z&++{7[#'#5#5fkk#B#'>>  ||00#88"$ LL88%*#= 9  --fh?? ;;v..$#557 }}V[[1,\4@@)fkk)u  *;;v{{+DKK -E(u5 5  +008J++fkkj+AC'V[[ZP P  *#'HG&v||4 # T11$7t$dH-+ #JDQ"H  #)(; ;  )--fkk: :7.77urct|tr|St|tr |jSt|trS|j |j d|jg|j|}||SJ|j jt|trt|jjtrl|jjjjrB|xr |j}|jt!|j|j"||S|j%|j|j"|SJd|z)N __getitem__)borrowr)rr[r{registerrzr,r-ror:ryrr\class_ir is_ext_classrrrOrr)rrrrregrs rreadzIRBuilder.reads fe $M f6 7?? " f3 4&& ]V\\NFKKC *&++** *5 f2 3&**//95&**//:R:R:_:_#9(9(9xx FKKf UVV'' FKKFF7.77urct|jtr |jjjsJ|j t |||dS)zPRead an attribute that might have an error value without raising AttributeError.T)allow_error_value)rr:r\rrrrOrs rread_nullable_attrzIRBuilder.read_nullable_attrsB#((I.3883D3D3Q3QQQxxT44HIIrc t|tr7|jt||j ||j |yt|t rC|j ||j |}|jt|j|yt|trt|jtrO|j ||j |}|jt|j|j||y|j|j}|jj!|}|j#t$|j||g|yt|t&rI|j)|j*d|j,|gd|}|J|j*j yt|t.rt|j t0r|j2|j j4}t7|t7|j8k(sJt;t7|D]>}|jt=|||} |j?|j8|| |@ytA|j stC|j r |j2|jE|||y|jG|||yJd)N __setitem__zUnsupported assignment target)$rrWrrK coerce_rvaluer:r{rryobj_typer\rXrrrrboxr7rrzr,r-ror|r]rrrrDrangerYassignrfrjprocess_sequence_assignment!process_iterator_tuple_assignment) rrrrrN boxed_reg target_reg2rtypesi item_values rrzIRBuilder.assigns8 fh ' HHVFD$6$6z6;;PT$UV W  8 9++J TJJ HHVFOOZ8 9  4 5&//95!// FKKN V[[*dKLmmFKK0 LL,,Z8 !!-&**c91MtT  5 6.. ]V\\:,FdK* ; W rc8|jjyr)rpoprs rpop_loop_stackzIRBuilder.pop_loop_stacks !!#rct|j}|xjdz c_|jt|||jj }|S)IMoves a given Value instance into the generator class' environment class.rk)r?rrr+rr)rr:r.rs rmake_spill_targetzIRBuilder.make_spill_targetsP !$"3"3!45 Q**3t9dDLL|j|j|Sr)get_sequence_type_from_typerrrs rget_sequence_typezIRBuilder.get_sequence_types// 40@AArc6t|}t|tr>'' X))+*:*:1*=>> _ 533K4K4KL L  Y /BMBSBST$dkk//5TFT6{azz|#33DLAA!k!u+W X K?2K!LMSWW XUsE5'E:"F:Fc>|j|j|S)zpFind dict type of a dict-like expression. This is useful for dict subclasses like SymbolTable. )get_dict_base_type_from_typerrs rget_dict_base_typezIRBuilder.get_dict_base_types 00D1ABBrc t|}t|tr2|jDcgc]}|j |D]}|c}}St|t r|j |j St|tr3|j}td|jjD}nAt|tr'td|jjD}n Jd|t||gScc}}w)Nc3@K|]}|jdk(s|yw)ztyping.MappingNr*.0r-s r z9IRBuilder.get_dict_base_type_from_type..s!JZ9Zc3@K|]}|jdk(s|yw)z builtins.dictNrrs rr z9IRBuilder.get_dict_base_type_from_type..s /9Yr!z!Failed to extract dict base from )r7rr6rDrr4rr2fallbacknextr:mror.r )rrrinner dict_bases rrz&IRBuilder.get_dict_base_type_from_types%k2 k9 -(--!>>tD  k? 344[5L5LM M k= 1%..K!,!1!1!5!5I X .!,!1!1!5!5I L=k]K K5)+yABB-sD c|j|}|Dcgc] }|j|jd"}}tj|Scc}w)Nrrrr5r_rrrdict_base_typestrs rget_dict_key_typezIRBuilder.get_dict_key_typeO11$79HIA$$$QVVAY/II++F33J%Ac|j|}|Dcgc] }|j|jd"}}tj|Scc}w)Nrkr)r*s rget_dict_value_typezIRBuilder.get_dict_value_typer.r/c`|j|}|j|}t||gSr)r-r1r])rrkey_type value_types rget_dict_item_typezIRBuilder.get_dict_item_types2))$/--d3 x,--rc||jvrttj}nt |j|}|j |j jj}|jd|gg|d}ddl m }t|tr&t}|jD] }|||} |S|jd|gg|dS)z>:JKH!22499>>3M3MNF  ' ' -$))S)dii.@.@ II 99--006  Y. .rc|j|j|jS|rCt|j|r-|j ||j j |||Sy)azEmit 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)rrr8rrrr)rrUr*r.rXrrs remit_load_finalzIRBuilder.emit_load_finalLsb  ,**9+@+@A A  djj(;))(DKK4M4Mc4RTXZ^_ _rct|jtxr$t|jjtSr)rrr"rrrs rrTzIRBuilder.is_module_member_expr`s'$))W-V*TYY^^X2VVrc|jr||jtgt|zk(r\t |}t j |g}|jj|||j|j|}|r|S|j}t|tr |j}t|tr<|j |j"vr$|j |j$vr |j }||jr||j&j(vrrt+d|jDrV|j&j(|}|jj-|||j|j.|jS|j1|} |j3| ||j|j|j.S)Nc38K|]}|ttfvywr)rr)rrs rr z3IRBuilder.call_refexpr_with_args..sLTDWi00Lsr$r%)r*r$rrget_call_target_fullnamerrPrmatching_primitive_oprrrrr!implrrrrr func_to_declallcallr%rr!) rrcalleer#r*primitive_candidatesr callee_nodedeclr"s rcall_refexpr_with_argsz IRBuilder.call_refexpr_with_argscs ??t~~'S_1LL/7H#/#3#3Hb#A \\77$j$))T^^D=QF kk k#4 5%**K {I .  (@(@@  D$=$==%**K  #t{{777LT^^LL;;++K8D<<$$T:t~~t~~W[W`W`a a;;v&|| j$))t~~QUQ_Q_  rcdfd }jjjjfd|jS)Ncjrbjjttjdj j jjSjj S)Nz+mypyc internal error: should be unreachable) right_unreachablerrrV RUNTIME_ERRORrightrrrrrsr handle_rightz1IRBuilder.shortcircuit_expr..handle_rightse%%   &*88E ||((**;;tzz* *rc:jjSr)rleftrpsrz-IRBuilder.shortcircuit_expr..s4;;tyy3Irreturnr[)rshortcircuit_helperrrr)rrrqs`` rshortcircuit_exprzIRBuilder.shortcircuit_exprsA +||// GGT^^D)+I ? JL)rc|jj}|jj|jj}|jj}|j j}|j j|jd|_|j d|_|j||j||fSrt) rrrrrrrrrr5ry)rrrrrs rleavezIRBuilder.leaves--##% ((,,. >>%%'--##% !!#}}R( }}R( ||\7>>8WLLrc#K|j|||jj||jj|| t |}|j t | d|j\}}}}}t||} |jj}|jj}t||j|j| } t| ||} | |j|<| j|j |<|j"j| y#|j\}}}}}t||} |jj}|jj}t||j|j| } t| ||} | |j|<| j|j |<|j"j| wxYww)a5Generate 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) rN)rrrrr\ add_argumentr>rrGrrEr.rrFmethodsri method_declsr) rrr.rr self_typearg_regsr5rysigrir~s r enter_methodzIRBuilder.enter_methods, 7X .   ''- ""8,  !(+I )Y/ & 8< 5HdFHgh/C++//1D**..0HD(--1A1A3GDh/B%'H  T "*,''H ! !$ ' NN ! !" %9= 5HdFHgh/C++//1D**..0HD(--1A1A3GDh/B%'H  T "*,''H ! !$ ' NN ! !" %s A-H 0D=4C H =C HH ct|tr t|}|j||d}|jdj t |j|||S)zDeclare an argument in the current function. You should use this instead of directly calling add_local() in new code. Tis_argrj)rrr+ add_localrrrHr.)rrrrrs rrzIRBuilder.add_argumentsV c3 c(CnnS#dn3 "$$Z#t%DE rc&|jd|Srtr)rrs rrzIRBuilder.lookups~~b!&))rct|tsJ|t|t|j||j }t ||jd|<|r%|jjj||S)zAdd register that represents a symbol to the symbol table. Args: is_arg: is this a function argument )rrrj) rr%rWremangle_redefinition_namer.rr{rrr5r)rrrrrs rrzIRBuilder.add_local st &*-5v5- +FKK8fkk &>c%Br6"  LL   $ $S ) rc~|j||||jd|}t|tsJ||S)zALike add_local, but return an assignment target instead of value.rj)rrrr{)rrrrrs rrzIRBuilder.add_local_regsB vsF+#F+&":;CVC; rcV|jttt|dS)zLow-level function that adds a 'self' argument. This is only useful if using enter() instead of enter_method(). Tr)rr+r>r\)rclss radd_self_to_envzIRBuilder.add_self_to_env#s$ !!#i.)C.!NNrc*||jd|<|Srtr)rrrs r add_targetzIRBuilder.add_target*s%+r6" rc8|jj|Sr)rrrMs rrzIRBuilder.type_to_rtype.s{{((--rct|trtS||jvrtS|j|}|j |Sr)rrrdrrlr)rr mypy_types rrzIRBuilder.node_type1sC dG $! ! tzz !$ $JJt$ !!),,rc6|t|jz}||jjj|<|r/|jjj j |t|j|}|r|j|j||jjj} |j t|j|| |jjj|j||Sr)rr.r env_class attributesattrs_with_defaultsrry curr_env_regrrr|rrXr) rrrr-ralways_definedrr. attr_targetrs rrzIRBuilder.add_var_to_env_class:s2388<<27 ))$/  LL " " 6 6 : :4 @*4+<+ >##DIItyy99rcv|j}|j|}|jt||g|Sr)rrr7r)rr.r_globalsrs rrzIRBuilder.load_global_strls8))+mmD!  !1Hc?DIIrcV|jttd|jS)Nglobals)rrSrcrrs rrzIRBuilder.load_globals_dictqs xx ?It?O?OPQQrct|jd\}}}|j|}|j|||SNr) rpartitionr1r)rr*rr]_r.rss rrz&IRBuilder.load_module_attr_by_fullnamets="--c24'dD11rc&|j|j}t|txre|jj xrM|jj |jxr&|jj|j S)zIIs expr a direct reference to a native (struct) attribute of an instance?) rrrr\rrhas_attrr. get_method)rr obj_rtypes rrzIRBuilder.is_native_attr_refysvNN499- y) , =""// =""++DII6 =&&11$))<<  rc"d|jd<y)zMark 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'. FrjN)rrs rmark_block_unreachablez IRBuilder.mark_block_unreachables */""2&rc.t|j|Sr)r@r)rrs rr@zIRBuilder.catch_errorssD,,d33rcR|jj||j|yr)rwarningrrmsgrs rrzIRBuilder.warnings C!1!148rcR|jj||j|yr)rrrrs rrzIRBuilder.errors #t//6rcR|jj||j|yr)rnoterrs rrzIRBuilder.notes d..5rc|j|jf}||jvr|jd|dd|y|jj ||j j |y)NzDuplicate definition of "rkz" not supported by mypyc)rr.rrrrr)rfunc_irrr.s r add_functionzIRBuilder.add_functionsk""GLL1 4&& & JJ247);STVZ [  % g&r)rrrzdict[Expression, Type]rr rrArrqrrvrrrrrz%dict[FuncDef, list[RegisterImplInfo]]rvNone)rrrrrvr)rrrrrvr[)rr$rvr)rzStatement | Expressionrrrv Value | None)rvr)rrTrvr[)rrLrvr)rrLrvr)rvrW)rr[rrrrrvr[)rrrvr[)rrrvr[)rrrvr[)rr[rrrrrvr[) rr[r r[rrrrrvr[)F) r r[rr^rrrrrvr[ru)r list[Value]rrrvr[)NN) r"r[r#rrrr$list[ArgKind] | Noner%zSequence[str | None] | Nonervr[)rr[rrLrrLrvr)r*rrvr[)r-r[r.rr#rr/ RType | Nonerrr$rr%zlist[str | None] | Nonervr[)r.rrvr[)r4rr5rrrrvr[r) r4rUr5rrrr/rrvr[) r:r^r;r[r<r[rrrrrvr[) r;r[r<r[rrrrrvr[)rAr[rrrvr[)rDrrrrvr[)rGz str | Valuervr)rJr[rrrvr) rMrCrNrrAr[rrrvr)rUrrrrvr) rUrrrrVrLrWrLrvr)r]rrrrvr[)r]rrrrrrvr[)rrWreCallable[[], Value]rrrvr) rrWrerrorrrrvr)rz list[Lvalue]rrrvr)rvr)rvzFuncInfo | None) rrrr[r str | Nonerrrvr) r*rrr^rrrrrvr[)rr[r.rrrrvr)r.rrrrvr[)rAz*int | str | bytes | float | complex | boolrvr[)rj)rrrrrrrvrx)rjF)rValue | AssignmentTargetrrrrrvr[)rRegister | AssignmentTargetrr[rrrvr)rr[rr^rrrvr[)rr|rr[rrrvr)rrxrr[rrrvr)rr|rr[rrrvr)rrLrrLrvr)r:r^rvrx)rr[rvrx)rr[rvr)rr[rvr)r rrvz int | None)rrrvr^)rr1rvr^)rrrvlist[Instance])rr1rvr)rrrvr1)r]rrvr)rr"rvr)rr(rvr)rrrvztuple[str, Var, bool] | None)rUr+r*rr.rrXrrr1rrrvr)rrrvr)rrrfr"r#rrvr[)rr rvr[)r}zRefExpr | TupleExprrvzlist[ClassIR] | None)r)rFuncInfo | strrr^rvr)rvzJtuple[list[Register], list[RuntimeArg], list[BasicBlock], RType, FuncInfo])rN) rrBr.rrr^rrrrrvzIterator[None])rz str | Varrr^rrrvrW)rr%rv SymbolTarget)rr%rr^rrrvrW)rr%rr^rrrvr{)rrBrvr{)rr%rrrvr)rz Type | Nonervr^)rrrvr^)FFr)rr%rr^r-zFuncInfo | ImplicitClassrrrrrrrvrx)rrrvr[)r*rrrrvr[)rrrvr)rrrrrvr)rrFrrrvr)xrrr__doc__rrr rrrrrrrrrrrrrr rrrrrrrrr!r'r)r,r1r3r7r9r>r@rCrFrIrPrXrTr_rbrhrrrwrurvrrrrrrrrrrrrrrrrrrrrrr r rrrrr-r1r5rBrDrFrHrNrYr[rTrjrxr{rkrrrrrrrrrrrrrrrrrrrrrr@rrrrrrrrrs0G G &G  G  G  G G G !G DG  G V:=BQQ 22IN>) $"+.#9,>,.:A^*##$65G+/15 VV V V ( V / V V9>+/-1        "    (  +     .5%) H"HH H " H  H=?331< >& >-0 >7< >DG >  > $ < <  <0:  (  (E*+E*9>E*FIE* E*N $ &B"6CC64 4 . Y,44;V>(+36@DKOWZ (W) ) &-) ;F) ) V &.**" M #%"& &&&&&& &&  &&  && &&&&PHO *  >C ',6: !O.-$1 11' 1  1  11 16\:&J R2  /4976'rrcjjd}jD]jsj j dfd }t tsJj}|jjs2jj|jjjj||jj|dz }y)zGenerate blocks for arguments that have default values. If the passed value is an error value, then assign the default value to the argument. rcjJtjrjjSjjs}j dzj jz}jj|jfjtj|jSj j}jjjjj |<jt#jjj$|j&Sr) initializerr~rr is_nestedr*variabler.rrr:rrSrcallable_classr~rrOself_regr)r.r}rr|rs r get_defaultz%gen_arg_defaults..get_defaults222s/">>#//::!22 >>C/#,,2C2CCD''..fkk/BC";;z&++tWEXEX'YZZ<<,,DIOGOO2255@@F";; > > G GsxxXrrkNru)rr| argumentsrrrrr{rr: error_overlaprhrrr)rnbrrr}r|rs` @@@rgen_arg_defaultsrs OO ! !E B  ??^^CLL1F  (f&>? G G?//C88))&&v S__EYEYZ..OO["coo6J6JaA rc&|jddS)aIRemangle names produced by mypy when allow-redefinition 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__)replacers rrrs <<[ ))rct|jtrEt|jj}t|t r|j jS|jSr)rrr'r7rr.r:r*)refrs rr`r`sF#((I& 1 fh ';;'' ' <<rc g}d}|D]:}|jtk(r|r|}ne|j|d|}|}nO|jtk(r|j|d|}n(|jtk(sJ|j|d|}|jtk7rL|j ||j |j|jg|ttgddg}n-|j ||j |jg|}|j||j||j|=|S)aRCreate 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. NTypeVar TypeVarTuple ParamSpecinfer_variancer_) rrrrrr!rr.rrrrr) r typing_mod type_argsrtvstype_var_imported type_paramtvttvs rcreate_type_paramsrs5 C&* ??m + '))*iF$'! __ 3 3%%j.$GC??o5 55%%j+tDC ??1 1!!*//2GLLNC"I.!12 !Bw'7'7 'H&I4PBb*//48 234 Jrc R|j}|jD] }|jst|jr'|j |j |j||j j|j}|jsM|jdz|j jz}|jt|||j|J|jt||j j||jy)zCalculate 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). rN)r|rrr~rrrr:rrr*r.rrPrrX)rrfunc_regsymtabler|r}rr.s rcalculate_arg_defaultsr s MME S ??;s#?NNs/#,,1G1L1LchhE$$~~+cll.?.?? JudG4G4GHI+++ GHcll.?.?QR Sr)rrrvr)r.rrvr)rr"rvr) rrrr[rzlist[TypeParam]rrrvr) rrrrnrrrzdict[SymbolNode, SymbolTarget]rvr)r __future__rcollections.abcrr contextlibrtypingrrr r r mypy.buildr mypy.maptyper mypy.nodesrrrrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+ mypy.typesr,r-r.r/r0r1r2r3r4r5r6r7 mypy.utilr8r9 mypy.visitorr:r; mypyc.commonr<r=r>r? mypyc.crashr@ mypyc.errorsrAmypyc.ir.class_irrBrCmypyc.ir.func_irrDrErFrGrH mypyc.ir.opsrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr[mypyc.ir.rtypesr\r]r^r_r`rarbrcrdrerfrgrhrirjrkrlrmmypyc.irbuild.contextrnromypyc.irbuild.ll_builderrpmypyc.irbuild.mapperrqmypyc.irbuild.nonlocalcontrolrrrsrtrumypyc.irbuild.prebuildvisitorrvmypyc.irbuild.preparerwmypyc.irbuild.targetsrxryrzr{r|mypyc.irbuild.utilr}r~ mypyc.optionsrmypyc.primitives.dict_opsrrmypyc.primitives.generic_opsrrrmypyc.primitives.list_opsrrrmypyc.primitives.misc_opsrrrmypyc.primitives.registryrrmypyc.primitives.tuple_opsrr__annotations__r Exceptionrrrrrr`rrrrrrs #.%882@    2<[[$6ZZ*(:6' :2;)HHHUUZZH?!ML !%(*:4*@  9 -/CCD G'G'T((V*' '$)'6E'MP''TS S SS- S  Sr