a
    ze;                     @   s   d dl Z d dlZd dlZd dlZd dlmZmZmZ g dZ	i Z
G dd dZG dd deZG dd	 d	e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 Zdd Zedkre  dS )!    N)NAMEDEDENTOP)
readmodulereadmodule_exClassFunctionc                   @   s   e Zd Zdd Zdd ZdS )_Objectc                 C   s(   || _ || _|| _|| _|| _i | _d S N)modulenamefilelinenoparentchildrenselfr   r   r   r   r    r   /usr/lib/python3.9/pyclbr.py__init__6   s    z_Object.__init__c                 C   s   || j |< d S r
   )r   )r   r   objr   r   r   	_addchild>   s    z_Object._addchildN)__name__
__module____qualname__r   r   r   r   r   r   r	   4   s   r	   c                   @   s   e Zd ZdddZdS )r   Nc                 C   s   t | ||||| d S r
   )r	   r   r   r   r   r   r   D   s    zFunction.__init__)N)r   r   r   r   r   r   r   r   r   B   s   r   c                       s&   e Zd Zd fdd	Zdd Z  ZS )r   Nc                    s0   t | ||||| |d u r g n|| _i | _d S r
   )r	   r   supermethods)r   r   r   r   r   r   r   	__class__r   r   r   J   s    zClass.__init__c                 C   s   || j |< d S r
   )r   )r   r   r   r   r   r   
_addmethodO   s    zClass._addmethod)N)r   r   r   r   r   __classcell__r   r   r   r   r   H   s   r   c                 C   s:   t | j|| j|| }| || t| tr6| || |S r
   )r   r   r   r   
isinstancer   r   )ob	func_namer   Znewfuncr   r   r   _nest_functionS   s
    
r$   c                 C   s&   t | j||| j|| }| || |S r
   )r   r   r   r   )r"   
class_namer   r   Znewclassr   r   r   _nest_class[   s    r&   c                 C   s6   i }t | |pg  D ]\}}t|tr|||< q|S r
   )_readmoduleitemsr!   r   )r   pathreskeyvaluer   r   r   r   a   s
    

r   c                 C   s   t | |p
g S r
   )r'   )r   r)   r   r   r   r   m   s    r   c              	   C   s~  |d urd|| f }n| }|t v r*t | S i }| tjv rL|d u rL|t | < |S | d}|dkr| d | }| |d d  }t|||}|d urd||f }d|vrtd|t||d |S d }	|d ur|}
n
|tj }
tj	
||
}|d u rtd||d|t |< |jd ur$|j|d< z|j|}W n ttfyP   | Y S 0 |d u r`|S |j|}t||||||S )	Nz%s.%s.r      __path__zNo package named {}zno module named )r   )_modulessysbuiltin_module_namesrfindr'   ImportErrorformatr)   	importlibutil_find_spec_from_pathModuleNotFoundErrorsubmodule_search_locationsloader
get_sourceAttributeErrorget_filename_create_tree)r   r)   	inpackage
fullmoduletreeipackageZ	submoduler   fZsearch_pathspecsourcefnamer   r   r   r'   v   sJ    	





r'   c           !   
   C   sD  t |}g }t|j}z|D ]\}	}
}}}|	tkr`|\}}|r^|d d |kr^|d= qBq"|
dkr|\}}|r|d d |kr|d= qpt|dd \}	}}|	tkrq"d }|r|d d }t|||}nt	| |||}|||< |
||f q"|
dkr|\}}|r(|d d |kr(|d= qt|dd \}	}}|	tkrJq"t|dd \}	}
}d }|
dkrg }d}g }t|dd \}	}
}|
dv r|dkrd	|}||v r|| }nL|d
}t|dkr|d }|d }|tv rt| }||v r|| }|
| g }|
dkr0|d7 }nZ|
dkrR|d8 }|dkrqn8|
dkrh|dkrhn"|	ttfv rz|dkrz|
|
 qz|}|r|d d }t||||}nt| ||||}|||< |
||f q"|
dkrf|d dkrft|}|D ]b\}}zJ|d u r t|| n0zt||| W n tyN   t|g  Y n0 W n   Y n0 q q"|
dkr"|d dkr"t|\}}
|r"|
dkrq"t|}zt|||}W n   Y q"Y n0 |D ]X\}} ||v r|| || p|< n0|dkr|D ] }|d dkr|| ||< qqq"W n ty6   Y n0 |  |S )Nr.   defr      class()), r-   rN   rO   importfrom*_)ioStringIOtokenizegenerate_tokensreadliner   nextr   r$   r   appendjoinsplitlenr0   r   r&   r   _getnamelistr'   r4   _getnameStopIterationclose)!rA   r)   rH   rG   rB   r@   rE   stackg	tokentypetokenstartZ_end_liner   Z
thisindentr#   Zcur_funcZcur_objr%   Zinheritnameslevelr   ncmdZ	cur_classmodulesmodZ_mod2Zn2r   r   r   r?      s    




















r?   c                 C   sl   g }t | \}}|sqh|dkr,t | \}}nd }|||f |dkr\d|vr\t| d }q>|dkrqhq|S )NasrO   
r.   )ra   r\   r[   )re   rj   r   rg   Zname2r   r   r   r`   E  s    r`   c                 C   s   g }t | dd \}}|tkr0|dkr0d |fS || t | dd \}}|dkrXqt | dd \}}|tkrvq|| q:d||fS )Nr      rT   r-   )r[   r   r\   r]   )re   partsrf   rg   r   r   r   ra   [  s    
ra   c            
      C   sX  dd l } ztjd }W n   t}Y n0 | j|rj| j|g}| j|}| 	drn|d d }ng }t
||}dd }t| |dd}d	}|rT| }t|trqt|d
sd|_t|trt|j |dd}|D ]}	|j| |	_q|| t|tr,tdd|j |j|j|j qt|trtdd|j |j|j qd S )Nr   r.   z.pyc                 S   s   t | ddS )Nr   r   )getattr)ar   r   r   <lambda>|      z_main.<locals>.<lambda>T)r+   reversert   indentz{}class {} {} {} z{}def {} {})osr1   argv__file__r)   existsdirnamebasenamelowerendswithr   sortedvaluespopr!   listhasattrr|   r	   r   extendr   printr5   r   r   r   r   )
r~   rq   r)   rB   Z
lineno_keyZobjsZindent_levelr   Znew_objsr"   r   r   r   _mainm  sD    







r   __main__)N)N)N)N)rV   r1   importlib.utilr6   rX   rg   r   r   r   __all__r0   r	   r   r   r$   r&   r   r   r'   r?   r`   ra   r   r   r   r   r   r   <module>)   s*   


	
@ &