
    ih^                    
   d 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mZ ddlmZmZ ddlmZmZmZmZ ddlmZmZ  G d	 d
e          Zee         Z G d d          Z G d d          Zd dZd!dZd"dZd#dZ d$dZ!dS )%z'Intermediate representation of classes.    )annotations)
NamedTuple)PROPSET_PREFIXJsonDict)FuncDeclFuncIRFuncSignature
RuntimeArg)	DeserMapsValue)	RInstanceRTypedeserialize_typeobject_rprimitive)NameGeneratorexported_namec                  8    e Zd ZU ded<   ded<   ded<   ded<   d	S )
VTableMethodz	'ClassIR'clsstrnamer   methodFuncIR | Noneshadow_methodN)__name__
__module____qualname____annotations__     P/root/projects/qq-shell/venv/lib64/python3.11/site-packages/mypyc/ir/class_ir.pyr   r   H   s9         NNNIIINNN      r    r   c                     e Zd ZdZ	 	 	 	 	 d;d<dZd=dZed=d            Zd>dZd?dZ	d@dZ
dAdZdBdZdCdZdDdZdDdZdDd ZdDd!ZdDd"ZdEd%ZdEd&Zdd'dFd*Zdd'dGd,ZdDd-ZdHd.ZdId0ZdJd2ZdHd3ZdKd5ZedLd9            Zd:S )MClassIRzpIntermediate representation of a class.

    This also describes the runtime structure of native instances.
    FTr   r   module_nameis_traitboolis_generatedis_abstractis_ext_classis_final_classreturnNonec                p   || _         || _        || _        || _        || _        || _        || _        d| _        d| _        d| _	        d| _
        d| _        d| _        d | _        t          |d |t          g t!          |                               | _        t          d|z   dz   d |t          t%          dt&                    gt!          |                               | _        i | _        g | _        i | _        i | _        i | _        i | _        i | _        d | _        g | _        i | _        d | _        g | _         | g| _!        | g| _"        g | _#        tI                      | _%        tI                      | _&        tI                      | _'        d| _(        g | _)        d | _*        d| _+        d| _,        d| _-        d | _.        d S )NF	__mypyc___setuptype)/r   r$   r%   r'   r(   r)   r*   is_augmentedinherits_pythonhas_dictallow_interpreted_subclassesneeds_getseters_serializablebuiltin_baser   r	   r   ctorr
   r   setup
attributes	deletablemethod_declsmethodsglue_methods
propertiesproperty_typesvtablevtable_entriestrait_vtablesbasetraitsmrobase_mrochildrensetattrs_with_defaults_always_initialized_attrs_sometimes_initialized_attrsinit_self_leakbitmap_attrsenv_user_functionreuse_freed_instance
is_acyclicis_enumcoroutine_name)selfr   r$   r%   r'   r(   r)   r*   s           r!   __init__zClassIR.__init__X   s    	& (&(, "$,1)  % # )-T4mB	RV6X6XYY	
 $):f.?@@A9T??SS	
 

 -/$& 24*, @B DF 13-1-/;= %)	%' $(&(,v /1 .1UU  4755& 7:ee) $ (* 15 %*!
    +/r    c                .    d                     |           S )NzClassIR(name={self.name}, module_name={self.module_name}, is_trait={self.is_trait}, is_generated={self.is_generated}, is_abstract={self.is_abstract}, is_ext_class={self.is_ext_class}, is_final_class={self.is_final_class})rT   )formatrW   s    r!   __repr__zClassIR.__repr__   s    
 D!!	
r    c                $    | j          d| j         S )N.)r$   r   rW   s    r!   fullnamezClassIR.fullname   s    "00TY000r    ClassIR | Nonec                t    t          | j                  dk    r| j        d         j        s| j        d         S dS )z7Return the actual concrete base class, if there is one.   N)lenrF   r%   rW   s    r!   	real_basezClassIR.real_base   s4    tx==1TXa[%98A;tr    intc                x    | j         
J d            || j         v sJ | j        d|            | j         |         S )Nzvtable not computed yet has no attribute )rA   r   rT   r   s     r!   vtable_entryzClassIR.vtable_entry   sQ    {&&(A&&&t{"""ty$N$Nd$N$N"""{4  r    tuple[RType, ClassIR]c                    | j         D ]6}||j        v r|j        |         |fc S ||j        v r|j        |         |fc S 7t          | j        d|          Nrd   )rF   r:   r@   KeyErrorr   rT   r   irs      r!   attr_detailszClassIR.attr_details  s    ( 	3 	3Br}$$}T*B....r((((.2222 )$)AAAABBBr    r   c                8    |                      |          d         S )Nr   )rm   re   s     r!   	attr_typezClassIR.attr_type  s      &&q))r    r   c                x    | j         D ]}||j        v r|j        |         c S t          | j        d|          ri   )rF   r<   rj   r   rk   s      r!   method_declzClassIR.method_decl  sV    ( 	- 	-Br&&t,,,, '$)AAAABBBr    r	   c                6    |                      |          j        S N)rq   sigre   s     r!   
method_sigzClassIR.method_sig  s    %%))r    c                V    	 |                      |           n# t          $ r Y dS w xY wdS NFT)rq   rj   re   s     r!   
has_methodzClassIR.has_method  sE    	T"""" 	 	 	55	t    
&&c                   |                                  }|| j        S |                               r8|                               }|D ]}|                              |k    r dS dS t	          fd|D                        S )NFTc              3  B   K   | ]}|                               V  d S rs   )rx   ).0subcr   s     r!   	<genexpr>z*ClassIR.is_method_final.<locals>.<genexpr>*  s/      BBT4??400BBBBBBr    )
subclassesr*   rx   rq   any)rT   r   subsrq   r}   s    `   r!   is_method_finalzClassIR.is_method_final  s      <&&??4   	C**400K ! !##D))[88 55 94BBBBTBBBBBBBr    c                V    	 |                      |           n# t          $ r Y dS w xY wdS rw   )ro   rj   re   s     r!   has_attrzClassIR.has_attr,  sC    	NN4     	 	 	55	try   c                D    t          fd| j        D                       S )Nc              3  *   K   | ]}|j         v V  d S rs   )r;   r|   rl   r   s     r!   r~   z'ClassIR.is_deletable.<locals>.<genexpr>4  s*      ;;B42<';;;;;;r    r   rF   re   s    `r!   is_deletablezClassIR.is_deletable3  s(    ;;;;$(;;;;;;r    c                B    |                      |          rdS || j        v S )NF)r   rK   re   s     r!   is_always_definedzClassIR.is_always_defined6  s+    T"" 	5t555r    namesr   c                B    |                     | j        | j                  S rs   )private_namer$   r   rT   r   s     r!   name_prefixzClassIR.name_prefix;  s    !!$"2DI>>>r    c                0    t          | j                   dS )NObject)r   r\   r   s     r!   struct_namezClassIR.struct_name>  s    ..6666r    prefer_methodr   tuple[FuncIR, ClassIR] | Nonec               t    | j         D ]/}||j        v r$|j        |         }|s|j        j        r d S ||fc S 0d S rs   )rF   r=   declimplicit)rT   r   r   rl   func_irs        r!   get_method_and_classzClassIR.get_method_and_classA  sg     ( 	# 	#Brz!!*T*$  )>    44{""" " tr    r   c               H    |                      ||          }|r|d         nd S )Nr   r   )r   )rT   r   r   ress       r!   
get_methodzClassIR.get_methodP  s-    ''M'JJ&s1vv$&r    c                D    t          fd| j        D                       S )Nc              3  *   K   | ]}|j         v V  d S rs   )r<   r   s     r!   r~   z*ClassIR.has_method_decl.<locals>.<genexpr>U  s*      >>r42?*>>>>>>r    r   re   s    `r!   has_method_declzClassIR.has_method_declT  s(    >>>>TX>>>>>>r    c                (    | j         g k    o| j         S rs   )rH   r4   rW   s    r!   has_no_subclasseszClassIR.has_no_subclassesW  s    }"L4+L'LLr    set[ClassIR] | Nonec                    | j         | j        rdS t          | j                   }| j         D ]7}|j         r.|                                }| dS |                    |           8|S )zReturn all subclasses of this class, both direct and indirect.

        Return None if it is impossible to identify all subclasses, for example
        because we are performing separate compilation.
        N)rH   r4   rI   r   update)rT   resultchild
child_subss       r!   r   zClassIR.subclassesZ  sy     = D$E 4T]##] 	* 	*E~ *"--//
%44j)))r    list[ClassIR] | Nonec                n    |                                  }|dS d |D             }t          |d           S )zReturn all concrete (i.e. non-trait and non-abstract) subclasses.

        Include both direct and indirect subclasses. Place classes with no children first.
        Nc                .    h | ]}|j         	|j        |S r   )r%   r(   )r|   cs     r!   	<setcomp>z.ClassIR.concrete_subclasses.<locals>.<setcomp>s  s&    III!AJI!-IAIIIr    c                <    t          | j        pg           | j        fS rs   )r`   rH   r   )r   s    r!   <lambda>z-ClassIR.concrete_subclasses.<locals>.<lambda>w  s    s1:3C/D/Daf.M r    )key)r   sorted)rT   r   concretes      r!   concrete_subclasseszClassIR.concrete_subclassesk  sI    
   <4IItIII h$M$MNNNNr    c                >    t          d | j        D                       S )Nc              3  $   K   | ]}|j         V  d S rs   )r6   )r|   cis     r!   r~   z*ClassIR.is_serializable.<locals>.<genexpr>z  s%      772#777777r    r   rW   s    r!   is_serializablezClassIR.is_serializabley  s!    77dh777777r    r   c                    i d j         d j        d j        d j        d j        d j        d j        d j        d	 j        d
 j	        d j
        d j        d j        d j        d j                                        dd  j                                        D             d fd j                                        D             i dd  j                                        D             dd  j                                        D             dd  j                                        D             dt-           j                  d j        dt3           j                  dd  j                                        D             d j        r j        j        nd d d!  j        D             d"d#  j        D             d$d%  j         D             d& j!        d'  j!        D             nd d( j"        d)tG           j$                  d*tG           j%                  d+tG           j&                  d, j'         j(        r j(        j)        nd  j*         j+         j,         j-        d-S ).Nr   r$   r%   r)   r(   r'   r1   r*   r2   r3   r4   r5   r6   r7   r8   r:   c                @    g | ]\  }}||                                 fS r   	serializer|   kts      r!   
<listcomp>z%ClassIR.serialize.<locals>.<listcomp>  s)    RRR$!QAq{{}}-RRRr    r<   c                b    g | ]+\  }}||j         v r|j        n|                                f,S r   )r=   idr   )r|   r   drT   s      r!   r   z%ClassIR.serialize.<locals>.<listcomp>  sL       Aq A--ADD1;;==A  r    r=   c                &    g | ]\  }}||j         fS r   )r   )r|   r   ms      r!   r   z%ClassIR.serialize.<locals>.<listcomp>  s"    CCCdaAD	CCCr    r>   c                :    g | ]\  \  }}}|j         |f|j        fS r   )r\   r   )r|   cirr   r   s       r!   r   z%ClassIR.serialize.<locals>.<listcomp>  s;       .9hsA#,"AD)  r    r@   c                @    g | ]\  }}||                                 fS r   r   r   s      r!   r   z%ClassIR.serialize.<locals>.<listcomp>  s)    ZZZda1;;==1ZZZr    r?   rA   rB   rC   c                @    g | ]\  }}|j         t          |          fS r   )r\   serialize_vtable)r|   r   vs      r!   r   z%ClassIR.serialize.<locals>.<listcomp>  s9       8>Q/223  r    rD   rE   c                    g | ]	}|j         
S r   r\   r|   r   s     r!   r   z%ClassIR.serialize.<locals>.<listcomp>  s    ;;;s|;;;r    rF   c                    g | ]	}|j         
S r   r   r   s     r!   r   z%ClassIR.serialize.<locals>.<listcomp>  s    555SCL555r    rG   c                    g | ]	}|j         
S r   r   r   s     r!   r   z%ClassIR.serialize.<locals>.<listcomp>  s    ???#???r    rH   c                    g | ]	}|j         
S r   r   r   s     r!   r   z%ClassIR.serialize.<locals>.<listcomp>  s    777#777r    r;   rJ   rK   rL   rM   )rO   rP   rQ   rR   is_coroutine).r   r$   r%   r)   r(   r'   r1   r*   r2   r3   r4   r5   r6   r7   r8   r   r:   itemsr<   r=   r>   r@   listr?   rA   r   rB   rC   rD   r\   rE   rF   rG   rH   r;   r   rJ   rK   rL   rM   rO   r   rP   rQ   rR   rS   rW   s   `r!   r   zClassIR.serialize|  s   8
DI8
4+8
 8
 D-	8

 4+8
 D-8
 D-8
 d18
 t38
 8
 +D,M8
 t38
 T/8
 D-8
 DI''))8
" RR$/:O:O:Q:QRRR#8
(      -3355  )8
 8
2 CCdl.@.@.B.BCCC38
4   =A=N=T=T=V=V  58
> ZZd>Q>W>W>Y>YZZZ?8
@ $t//A8
B dkC8
D .t/BCCE8
F   BFBTBZBZB\B\  G8
N $)=DI&&O8
P ;;t{;;;Q8
R 55DH555S8
T ?????U8
V ;?=;T777777Z^Y8
\ ]8
^ "6$*B#C#C_8
` (0N)O)Oa8
b +F43T,U,Uc8
d d1e8
 8
f ?C>T!^!7!:!:Z^$($=/| /o8
 8
 8
 8	
r    datactxr   c                J   |d         dz   |d         z   }|j         v sJ d|z              j         |         |d         _        |d         _        |d         _        |d         _        |d	         _        |d
         _        |d         _        |d         _        |d         _	        |d         _
        |d         _        |d         _        t          j        |d                   _        fd|d         D             _        fd|d         D             _        fd|d         D             _        fd|d         D             _        fd|d         D             _        fd|d         D             _        |d         _        t/          |d                   _        fd |d!         D             _        |d"         }|rj         |         nd _        fd#|d$         D             _        fd%|d&         D             _        fd'|d(         D             _        |d)         ofd*|d)         D             _        |d+         _        tA          |d,                   _!        tA          |d-                   _"        tA          |d.                   _#        |d/         _$        |d0         rj%        |d0                  nd _&        |d1         _'        |(                    d2d3          _)        |d4         _*        |d5         _+        S )6Nr$   r[   r   zClass %s not in deser class mapr%   r'   r(   r)   r1   r*   r2   r3   r4   r5   r6   r7   r8   c                8    i | ]\  }}|t          |          S r   r   r|   r   r   r   s      r!   
<dictcomp>z'ClassIR.deserialize.<locals>.<dictcomp>  s*    TTTA,Q44TTTr    r:   c                    i | ]B\  }}|t          |t                    rj        |         j        nt	          j        |          CS r   )
isinstancer   	functionsr   r   deserializer|   r   r   r   s      r!   r   z'ClassIR.deserialize.<locals>.<dictcomp>  s\     
 
 
1 
1c(:(:\s}Q$$@TUVX[@\@\
 
 
r    r<   c                2    i | ]\  }}|j         |         S r   )r   r   s      r!   r   z'ClassIR.deserialize.<locals>.<dictcomp>  s&    FFFdaaq)FFFr    r=   c                R    i | ]#\  \  }}}j         |         |fj        |         $S r   )classesr   )r|   r   r   r   r   s       r!   r   z'ClassIR.deserialize.<locals>.<dictcomp>  sB     
 
 
6?fq!aS[^Qq!1
 
 
r    r>   c                8    i | ]\  }}|t          |          S r   r   r   s      r!   r   z'ClassIR.deserialize.<locals>.<dictcomp>  s*    \\\TQQ 0C 8 8\\\r    r@   c                p    i | ]2}|j         |         j                             t          |z             f3S r   )r=   getr   )r|   r   rl   s     r!   r   z'ClassIR.deserialize.<locals>.<dictcomp>  sF     
 
 
GHA
1rz~~nq.@AAB
 
 
r    r?   rA   rB   c                N    i | ]!\  }}j         |         t          |          "S r   )r   deserialize_vtabler   s      r!   r   z'ClassIR.deserialize.<locals>.<dictcomp>  s=     
 
 
;?1aCKN.q#66
 
 
r    rC   rD   c                *    g | ]}j         |         S r   r   r|   sr   s     r!   r   z'ClassIR.deserialize.<locals>.<listcomp>  s    <<<S[^<<<r    rE   c                *    g | ]}j         |         S r   r   r   s     r!   r   z'ClassIR.deserialize.<locals>.<listcomp>  s    666Q#+a.666r    rF   c                *    g | ]}j         |         S r   r   r   s     r!   r   z'ClassIR.deserialize.<locals>.<listcomp>  s    @@@!s{1~@@@r    rG   rH   c                *    g | ]}j         |         S r   r   r   s     r!   r   z'ClassIR.deserialize.<locals>.<listcomp>  s    +U+U+UqCKN+U+U+Ur    r;   rJ   rK   rL   rM   rO   rP   rQ   FrR   r   ),r   r%   r'   r(   r)   r1   r*   r2   r3   r4   r5   r6   r7   r   r   r8   r:   r<   r=   r>   r@   r?   rA   r   rB   rC   rD   rE   rF   rG   rH   r;   rI   rJ   rK   rL   rM   r   rO   rP   r   rQ   rR   rS   )r   r   r   r\   rD   rl   s     `  @r!   r   zClassIR.deserialize  s   &,tF|;3;&&&(IH(T&&&[":&~.m,~.~. !12!"34:&*./M*N'!"340~.&tF|S99TTTTlASTTT
 
 
 
^,
 
 
 GFFFd9oFFF

 
 
 
CGCW
 
 
 ]\\\TJZE[\\\
 
 
 
LPQ]L^
 
 
 N	.t4D/EsKK
 
 
 
CGCX
 
 
 F|'+5#+d##<<<<T(^<<<	6666$u+666@@@@tJ/?@@@:&U+U+U+U+UDDT+U+U+UK(!$T*?%@!A!A'*40K+L'M'M$*-d3Q.R*S*S' !128<=P8Q[CM$2344W[ 	 #''=">u55)_
 0	r    N)FFFTF)r   r   r$   r   r%   r&   r'   r&   r(   r&   r)   r&   r*   r&   r+   r,   )r+   r   )r+   r]   )r   r   r+   rb   )r   r   r+   rg   )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   r+   r#   )r   r   r   __doc__rU   rY   propertyr\   ra   rf   rm   ro   rq   ru   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   classmethodr   r   r    r!   r#   r#   R   sz         "!!$P/ P/ P/ P/ P/d
 
 
 
 1 1 1 X1   ! ! ! !
C C C C* * * *C C C C* * * *   C C C C   < < < <6 6 6 6
? ? ? ?7 7 7 7 38      >C ' ' ' ' ' '? ? ? ?M M M M   "O O O O8 8 8 89
 9
 9
 9
v 9 9 9 [9 9 9r    r#   c                      e Zd ZdZdd	Zd
S )NonExtClassInfozInformation needed to construct a non-extension class (Python class).

    Includes the class dictionary, a tuple of base classes,
    the class annotations dictionary, and the metaclass.
    dictr   basesanns	metaclassr+   r,   c                >    || _         || _        || _        || _        d S rs   )r   r   r   r   )rT   r   r   r   r   s        r!   rU   zNonExtClassInfo.__init__  s"    	
	"r    N)
r   r   r   r   r   r   r   r   r+   r,   )r   r   r   r   rU   r   r    r!   r   r     s2         # # # # # #r    r   entryr+   r   c                ~    d| j         j        | j        | j        j        j        | j        r| j        j        j        nd dS )Nr   ).classr   r   r   r   )r   r\   r   r   r   r   r   )r   s    r!   serialize_vtable_entryr     sF     y!
,#&8=8KU,144QU  r    rA   VTableEntrieslist[JsonDict]c                    d | D             S )Nc                ,    g | ]}t          |          S r   )r   )r|   r   s     r!   r   z$serialize_vtable.<locals>.<listcomp>  s!    666!"1%%666r    r   )rA   s    r!   r   r     s    66v6666r    r   r   r   c                    | d         dk    rUt          |j        | d                  | d         |j        | d                  | d         r|j        | d                  nd           S J d| d         z              )	Nr   r   r   r   r   r   FzBogus vtable .class: %s)r   r   r   r   r   s     r!   deserialize_vtable_entryr    s~    H~''KU$LM$x.)484ISCM$/00t	
 
 	
 =+d8n<<<<r    c                     fd| D             S )Nc                0    g | ]}t          |          S r   )r  )r|   xr   s     r!   r   z&deserialize_vtable.<locals>.<listcomp>  s$    ;;;$Q,,;;;r    r   r  s    `r!   r   r     s    ;;;;d;;;;r    class_irr   c                |    |                                  }|dS | j        s| j        s|                    |            |S )zFReturn all concrete classes among the class itself and its subclasses.N)r   r(   r%   append)r  r   s     r!   all_concrete_classesr    sJ    ++--Ht  "H$5 "!!!Or    N)r   r   r+   r   )rA   r   r+   r   )r   r   r   r   r+   r   )r   r   r   r   r+   r   )r  r#   r+   r   )"r   
__future__r   typingr   mypyc.commonr   r   mypyc.ir.func_irr   r   r	   r
   mypyc.ir.opsr   r   mypyc.ir.rtypesr   r   r   r   mypyc.namegenr   r   r   r   r   r#   r   r   r   r  r   r  r   r    r!   <module>r     s   - - " " " " " "       1 1 1 1 1 1 1 1 H H H H H H H H H H H H ) ) ) ) ) ) ) ) Q Q Q Q Q Q Q Q Q Q Q Q 6 6 6 6 6 6 6 6z! ! ! ! !: ! ! ! \"_ _ _ _ _ _ _ _D# # # # # # # #   7 7 7 7= = = =< < < <     r    