o
    2g                     @  sP   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
dZ
dddZdS )z.Compute vtables of native (extension) classes.    )annotationsN)ClassIRVTableEntriesVTableMethod)is_same_method_signatureclsr   returnNonec              	     s~  | j durdS | jstdd | jD | _| jdd D ](}t| |js&q|j D ]\ }| jsCt fdd| j	D sC|| j < q+qi | _ | j
rb| j
j dusSJ | j | j
j  t| | j
| _| j}dd | jD }| g| j D ]3}t|j D ](}|| j|jdd	krt|| j |j< | j| |jf}|t||j|| q}qs| js|D ]}t| t| || j|< qdS dS )
z)Compute the vtable structure for a class.Nc                 s  s    | ]}|j V  qd S N)inherits_python).0x r   L/home/garg/my-data/venv/lib/python3.10/site-packages/mypyc/irbuild/vtable.py	<genexpr>   s    z!compute_vtable.<locals>.<genexpr>   c                 3  s    | ]} |j v V  qd S r
   )
attributes)r   bnamer   r   r      s    c                 S  s   g | ]}|j r|qS r   )is_trait)r   tr   r   r   
<listcomp>&   s    z"compute_vtable.<locals>.<listcomp>Tprefer_method)vtableis_generatedanymrohas_dictcompute_vtabler   r   itemsbase_mrobaseupdatespecialize_parent_vtablevtable_entriestraits	itertoolschainmethodsvalues
get_methodr   lenglue_methodsgetappendr   trait_vtables)r   r   typentries
all_traitsfnshadowtraitr   r   r   r       sD   


r    parentr   c                 C  s   g }|j D ]J}|jj|jdd}|sJ | j|jdd}|rJ|\}}t|j|js.|jdkr9t|j|j||j}nt|j|j|j	|j|jf |j}|
| q|S )zFGenerate the part of a vtable corresponding to a parent class or traitTr   __init__)r&   r   r,   r   get_method_and_classr   sigr   shadow_methodr.   r0   )r   r8   updatedentryorig_parent_method
method_clschild_methoddefining_clsr   r   r   r%   9   s&   

r%   )r   r   r   r	   )r   r   r8   r   r   r   )__doc__
__future__r   r(   mypyc.ir.class_irr   r   r   mypyc.sametyper   r    r%   r   r   r   r   <module>   s    
.