
    i                    N    d Z ddlmZ ddlZddlmZmZmZ ddlm	Z	 dd
Z
ddZdS )z.Compute vtables of native (extension) classes.    )annotationsN)ClassIRVTableEntriesVTableMethod)is_same_method_signatureclsr   returnNonec           
     D     j         dS  j        s#t          d  j        D                        _         j        dd         D ]i}t          |           |j        s|j                                        D ]6\  } j        s*t          fd j	        D                       s
| j        <   7ji  _          j
        rL j
        j         J  j                              j
        j                    t            j
                   _         j        }d  j        D             } g fd|D             z   D ]}t          j        |j                                                  D ]}|                     |j        d          k    rgt)          |           j         |j        <    j                             |j        f          }|                    t1          ||j        ||                      j        s,|D ]+}t          |           t           |           j        |<   *dS dS )	z)Compute the vtable structure for a class.Nc              3  $   K   | ]}|j         V  d S N)inherits_python).0xs     S/root/projects/qq-shell/venv/lib64/python3.11/site-packages/mypyc/irbuild/vtable.py	<genexpr>z!compute_vtable.<locals>.<genexpr>   s%      >>1,>>>>>>       c              3  *   K   | ]}|j         v V  d S r   )
attributes)r   bnames     r   r   z!compute_vtable.<locals>.<genexpr>   s*      +W+WQDAL,@+W+W+W+W+W+Wr   c                     g | ]}|j         	|S  )is_trait)r   ts     r   
<listcomp>z"compute_vtable.<locals>.<listcomp>&   s    333
3!333r   c                    g | ]}|u|	S r   r   )r   r   r   s     r   r   z"compute_vtable.<locals>.<listcomp>(   s    <<<Aq||a|||r   Tprefer_method)vtableis_generatedanymrohas_dictcompute_vtabler   r   itemsbase_mrobaseupdatespecialize_parent_vtablevtable_entries	itertoolschainmethodsvalues
get_methodr   lenglue_methodsgetappendr   trait_vtables)	r   r   typentries
all_traitsfnshadowtraitr   s	   `       @r   r&   r&      sp   
z ?>>cg>>>>>WQRR[ + +qz 	++-- 	+ 	+ID#< ++W+W+W+W#,+W+W+W(W(W +'*t$	+ CJ
x Ex***
#(/***5c38DD  G33SW333JU<<<<<<<< E E/!)"2"2"4"455 	E 	EBS^^BG4^@@@@&)'ll
27# )--sBGn==|ArwFCCDDD	E < L 	L 	LE5!!!'?U'K'KCe$$L L	L 	Lr   parentr   c                   g }|j         D ]}|j                            |j        d          }|sJ |                     |j        d          }|r|\  }}t          |j        |j                  s|j        dk    r"t          |j        |j        ||j                  }n8t          |j        |j        |j	        |j        |j        f         |j                  }|
                    |           |S )zFGenerate the part of a vtable corresponding to a parent class or traitTr   __init__)r,   r   r1   r   get_method_and_classr   sigr   shadow_methodr3   r5   )r   r=   updatedentryorig_parent_method
method_clschild_methoddefining_clss           r   r+   r+   9   s   G&   #Y11%*D1QQ!!!!--ej-MM
 	)3&L, ));)?AQRR%*j88$UY
L%J]^^$IJ -uy%*.EF'	  	uNr   )r   r   r	   r
   )r   r   r=   r   r	   r   )__doc__
__future__r   r-   mypyc.ir.class_irr   r   r   mypyc.sametyper   r&   r+   r   r   r   <module>rM      s    4 4 " " " " " "     B B B B B B B B B B 3 3 3 3 3 3+L +L +L +L\     r   