o
     JAf'                     @   sV  	 d dl Z d dl 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 d dlZg dZdd ZG dd dZe ZG dd	 d	ZG d
d deZG dd deZG dd dZedkrd dlZd dlZeejd  Ze Z W d   n1 s}w   Y  ee ej!"ejd  d dZ#e#$ D ]Z%e#&e%Z'e(e'e') e'*  qdS dS )    N)USE
DEF_GLOBALDEF_NONLOCAL	DEF_LOCAL	DEF_PARAM
DEF_IMPORT	DEF_BOUND	DEF_ANNOT	SCOPE_OFF
SCOPE_MASKFREELOCALGLOBAL_IMPLICITGLOBAL_EXPLICITCELL)symtableSymbolTableClassFunctionSymbolc                 C   s   	 t | ||}t||S N)	_symtabler   _newSymbolTable)codefilenameZcompile_typetop r   /usr/lib/python3.10/symtable.pyr      s   
r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )SymbolTableFactoryc                 C   s   t  | _d S r   )weakrefWeakValueDictionary_SymbolTableFactory__memoselfr   r   r   __init__   s   zSymbolTableFactory.__init__c                 C   s6   |j tjkrt||S |j tjkrt||S t||S r   )typer   TYPE_FUNCTIONr   
TYPE_CLASSr   r   )r#   tabler   r   r   r   new   s
   


zSymbolTableFactory.newc                 C   s8   ||f}| j |d }|d u r| || }| j |< |S r   )r!   getr)   )r#   r(   r   keyobjr   r   r   __call__    s
   zSymbolTableFactory.__call__N)__name__
__module____qualname__r$   r)   r-   r   r   r   r   r      s    r   c                   @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )r   c                 C   s   || _ || _i | _d S r   )_table	_filename_symbols)r#   Z	raw_tabler   r   r   r   r$   ,   s   
zSymbolTable.__init__c                 C   sJ   | j tkrd}nd| j j }| jjdkrd|| jS d|| jj| jS )N z%s r   z<{0}SymbolTable for module {1}>z<{0}SymbolTable for {1} in {2}>)	__class__r   r.   r1   nameformatr2   )r#   kindr   r   r   __repr__1   s   
zSymbolTable.__repr__c                 C   s<   	 | j jtjkr
dS | j jtjkrdS | j jtjkrdS d S )Nmodulefunctionclass)r1   r%   r   ZTYPE_MODULEr&   r'   r"   r   r   r   get_type>   s   zSymbolTable.get_typec                 C   
   	 | j jS r   )r1   idr"   r   r   r   get_idM   s   zSymbolTable.get_idc                 C   r>   r   )r1   r6   r"   r   r   r   get_nameR   s   zSymbolTable.get_namec                 C   r>   r   )r1   linenor"   r   r   r   
get_lineno[   s   zSymbolTable.get_linenoc                 C   s   	 t | jjtjkS r   )boolr1   r%   r   r&   r"   r   r   r   is_optimizeda   s   zSymbolTable.is_optimizedc                 C      	 t | jjS r   )rD   r1   nestedr"   r   r   r   	is_nestedg      zSymbolTable.is_nestedc                 C   rF   r   )rD   r1   childrenr"   r   r   r   has_childrenl   rI   zSymbolTable.has_childrenc                 C   s   	 | j j S r   )r1   symbolskeysr"   r   r   r   get_identifiersq   rI   zSymbolTable.get_identifiersc                 C   sV   	 | j |}|d u r)| jj| }| |}| jjdk}t||||d }| j |< |S )Nr   module_scope)r3   r*   r1   rL   _SymbolTable__check_childrenr6   r   )r#   r6   Zsymflags
namespacesrP   r   r   r   lookupv   s   
zSymbolTable.lookupc                    s   	  fdd   D S )Nc                    s   g | ]}  |qS r   )rT   .0identr"   r   r   
<listcomp>   s    z+SymbolTable.get_symbols.<locals>.<listcomp>)rN   r"   r   r"   r   get_symbols   s   zSymbolTable.get_symbolsc                    s    fddj jD S )Nc                    s"   g | ]}|j  krt|jqS r   )r6   r   r2   rV   str6   r#   r   r   rX      s
    

z0SymbolTable.__check_children.<locals>.<listcomp>r1   rJ   )r#   r6   r   r\   r   Z__check_children   s   zSymbolTable.__check_childrenc                    s   	  fdd j jD S )Nc                    s   g | ]}t | jqS r   )r   r2   rZ   r"   r   r   rX      s    z,SymbolTable.get_children.<locals>.<listcomp>r]   r"   r   r"   r   get_children   s   
zSymbolTable.get_childrenN)r.   r/   r0   r$   r9   r=   r@   rA   rC   rE   rH   rK   rN   rT   rY   rQ   r^   r   r   r   r   r   *   s    	r   c                   @   sP   e Zd ZdZdZdZdZdZdd Zdd Z	dd Z
dd	 Zd
d Zdd ZdS )r   Nc                    s   t  fdd  D S )Nc                 3   s$    | ]} j j| r|V  qd S r   )r1   rL   rU   r#   Z	test_funcr   r   	<genexpr>   s    z-Function.__idents_matching.<locals>.<genexpr>)tuplerN   r_   r   r_   r   Z__idents_matching   s   zFunction.__idents_matchingc                 C   "   	 | j d u r| dd | _ | j S )Nc                 S      | t @ S r   )r   xr   r   r   <lambda>       z)Function.get_parameters.<locals>.<lambda>)_Function__params_Function__idents_matchingr"   r   r   r   get_parameters      
zFunction.get_parametersc                    2   	 | j d u rttf  fdd}| || _ | j S )Nc                       | t ? t@  v S r   r
   r   rd   Zlocsr   r   rf          z%Function.get_locals.<locals>.<lambda>)_Function__localsr   r   ri   r#   testr   ro   r   
get_locals      
zFunction.get_localsc                    rl   )Nc                    rm   r   rn   rd   globr   r   rf      rp   z&Function.get_globals.<locals>.<lambda>)_Function__globalsr   r   ri   rr   r   rv   r   get_globals   ru   zFunction.get_globalsc                 C   rb   )Nc                 S   rc   r   )r   rd   r   r   r   rf      rg   z(Function.get_nonlocals.<locals>.<lambda>)_Function__nonlocalsri   r"   r   r   r   get_nonlocals   rk   zFunction.get_nonlocalsc                 C   s&   	 | j d u rdd }| || _ | j S )Nc                 S   s   | t ? t@ tkS r   )r
   r   r   rd   r   r   r   rf      rp   z$Function.get_frees.<locals>.<lambda>)_Function__freesri   )r#   is_freer   r   r   	get_frees   s
   
zFunction.get_frees)r.   r/   r0   rh   rq   r|   rx   rz   ri   rj   rt   ry   r{   r~   r   r   r   r   r      s    		r   c                   @   s   e Zd ZdZdd ZdS )r   Nc                 C   s8   	 | j d u ri }| jjD ]}d||j< qt|| _ | j S )N   )_Class__methodsr1   rJ   r6   ra   )r#   dr[   r   r   r   get_methods   s   

zClass.get_methods)r.   r/   r0   r   r   r   r   r   r   r      s    r   c                   @   s   e Zd Zd$ddddZdd Zdd	 Zd
d Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# ZdS )%r   NFrO   c                C   s.   || _ || _|t? t@ | _|pd| _|| _d S )Nr   )_Symbol__name_Symbol__flagsr
   r   _Symbol__scope_Symbol__namespaces_Symbol__module_scope)r#   r6   rR   rS   rP   r   r   r   r$      s
   

zSymbol.__init__c                 C   s   d | jS )Nz<symbol {0!r}>)r7   r   r"   r   r   r   r9      s   zSymbol.__repr__c                 C      	 | j S r   )r   r"   r   r   r   rA      s   zSymbol.get_namec                 C   s   	 t | jtj@ S r   )rD   r   r   r   r"   r   r   r   is_referenced   s   zSymbol.is_referencedc                 C      	 t | jt@ S r   )rD   r   r   r"   r   r   r   is_parameter      zSymbol.is_parameterc                 C   $   	 t | jttfv p| jo| jt@ S r   )rD   r   r   r   r   r   r   r"   r   r   r   	is_global      zSymbol.is_globalc                 C   r   r   )rD   r   r   r"   r   r   r   is_nonlocal      zSymbol.is_nonlocalc                 C      	 t | jtkS r   )rD   r   r   r"   r   r   r   is_declared_global  r   zSymbol.is_declared_globalc                 C   r   r   )rD   r   r   r   r   r   r   r"   r   r   r   is_local  r   zSymbol.is_localc                 C   r   r   )rD   r   r	   r"   r   r   r   is_annotated  r   zSymbol.is_annotatedc                 C   r   r   )rD   r   r   r"   r   r   r   r}        zSymbol.is_freec                 C   r   r   )rD   r   r   r"   r   r   r   is_imported  r   zSymbol.is_importedc                 C   r   r   )rD   r   r   r"   r   r   r   is_assigned  r   zSymbol.is_assignedc                 C   s   	 t | jS r   )rD   r   r"   r   r   r   is_namespace!  s   

zSymbol.is_namespacec                 C   r   r   )r   r"   r   r   r   get_namespaces.  s   zSymbol.get_namespacesc                 C   s"   	 t | jdkrtd| jd S )Nr   z$name is bound to multiple namespacesr   )lenr   
ValueErrorr"   r   r   r   get_namespace2  s   
zSymbol.get_namespacer   )r.   r/   r0   r$   r9   rA   r   r   r   r   r   r   r   r}   r   r   r   r   r   r   r   r   r   r      s"    r   __main__r   exec)+r   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   __all__r   r   r   r   r   r   r   r.   ossysopenargvfreadsrcpathsplitmodrN   rW   rT   infoprintr   r   r   r   r   r   <module>   s.    D	l6`

