
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,aU  ã                	   @   sJ  d Z 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dddddg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�rFddlZddlZeejd ƒ�Ze  ¡ Z!W 5 Q R X ee!ej" #ejd ¡d dƒZ$e$ %¡ D ]$Z&e$ 'e&¡Z(e)e(e( *¡ e( +¡ ƒ �q dS )z2Interface to the compiler's internal symbol tablesé    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   ú-/opt/alt/python38/lib64/python3.8/symtable.pyr      s    c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚSymbolTableFactoryc                 C   s   t  ¡ | _d S r   )ÚweakrefZ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 kr4|  ||¡ }| 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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   sN   | j tkrd}nd| j j }| jjdkr6d || j¡S d || jj| j¡S d S )NÚ z%s r   z<{0}SymbolTable for module {1}>z<{0}SymbolTable for {1} in {2}>)Ú	__class__r   r-   r0   ÚnameÚformatr1   )r"   Zkindr   r   r   Ú__repr__,   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r6dS d S )NÚmoduleZfunctionÚclass)r0   r$   r   ZTYPE_MODULEr%   r&   r!   r   r   r   Úget_type9   s    zSymbolTable.get_typec                 C   s   | j jS r   )r0   Úidr!   r   r   r   Úget_idC   s    zSymbolTable.get_idc                 C   s   | j jS r   )r0   r5   r!   r   r   r   Úget_nameF   s    zSymbolTable.get_namec                 C   s   | j jS r   )r0   Úlinenor!   r   r   r   Ú
get_linenoI   s    zSymbolTable.get_linenoc                 C   s   t | jjtjkƒS r   )Úboolr0   r$   r   r%   r!   r   r   r   Úis_optimizedL   s    zSymbolTable.is_optimizedc                 C   s   t | jjƒS r   )r@   r0   Únestedr!   r   r   r   Ú	is_nestedO   s    zSymbolTable.is_nestedc                 C   s   t | jjƒS r   )r@   r0   Úchildrenr!   r   r   r   Úhas_childrenR   s    zSymbolTable.has_childrenc                 C   s   dS )z7Return true if the scope uses exec.  Deprecated method.Fr   r!   r   r   r   Úhas_execU   s    zSymbolTable.has_execc                 C   s   | j j ¡ S r   )r0   ÚsymbolsÚkeysr!   r   r   r   Úget_identifiersY   s    zSymbolTable.get_identifiersc                 C   sT   | j  |¡}|d krP| jj| }|  |¡}| jjdk}t||||d� }| j |< |S )Nr   ©Úmodule_scope)r2   r)   r0   rG   Ú_SymbolTable__check_childrenr5   r   )r"   r5   ZsymÚflagsÚ
namespacesrK   r   r   r   Úlookup\   s    
ÿzSymbolTable.lookupc                    s   ‡ fdd„ˆ   ¡ D ƒS )Nc                    s   g | ]}ˆ   |¡‘qS r   )rO   ©Ú.0Úidentr!   r   r   Ú
<listcomp>g   s     z+SymbolTable.get_symbols.<locals>.<listcomp>)rI   r!   r   r!   r   Úget_symbolsf   s    zSymbolTable.get_symbolsc                    s   ‡ ‡fdd„ˆj jD ƒS )Nc                    s"   g | ]}|j ˆ krt|ˆjƒ‘qS r   )r5   r   r1   ©rQ   Úst©r5   r"   r   r   rS   j   s   
þz0SymbolTable.__check_children.<locals>.<listcomp>©r0   rD   )r"   r5   r   rW   r   Z__check_childreni   s    ÿzSymbolTable.__check_childrenc                    s   ‡ fdd„ˆ j jD ƒS )Nc                    s   g | ]}t |ˆ jƒ‘qS r   )r   r1   rU   r!   r   r   rS   o   s   ÿz,SymbolTable.get_children.<locals>.<listcomp>rX   r!   r   r!   r   Úget_childrenn   s    
ÿzSymbolTable.get_childrenN)r-   r.   r/   r#   r7   r:   r<   r=   r?   rA   rC   rE   rF   rI   rO   rT   rL   rY   r   r   r   r   r   %   s   

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   )r0   rG   rP   ©r"   Z	test_funcr   r   Ú	<genexpr>}   s    ÿz-Function.__idents_matching.<locals>.<genexpr>)ÚtuplerI   rZ   r   rZ   r   Z__idents_matching|   s    zFunction.__idents_matchingc                 C   s    | j d kr|  dd„ ¡| _ | j S )Nc                 S   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€   s    
zFunction.get_parametersc                    s0   | j d kr*ttf‰ ‡ fdd„}|  |¡| _ | j S )Nc                    s   | t ? t@ ˆ kS r   ©r
   r   r]   ©Zlocsr   r   r_   ˆ   r`   z%Function.get_locals.<locals>.<lambda>)Ú_Function__localsr   r   rb   ©r"   Ztestr   re   r   Ú
get_locals…   s
    
zFunction.get_localsc                    s0   | j d kr*ttf‰ ‡ fdd„}|  |¡| _ | j S )Nc                    s   | t ? t@ ˆ kS r   rd   r]   ©Zglobr   r   r_   �   r`   z&Function.get_globals.<locals>.<lambda>)Ú_Function__globalsr   r   rb   rg   r   ri   r   Úget_globalsŒ   s
    
zFunction.get_globalsc                 C   s    | j d kr|  dd„ ¡| _ | j S )Nc                 S   s   | t @ S r   )r   r]   r   r   r   r_   •   r`   z(Function.get_nonlocals.<locals>.<lambda>)Ú_Function__nonlocalsrb   r!   r   r   r   Úget_nonlocals“   s    
zFunction.get_nonlocalsc                 C   s$   | j d krdd„ }|  |¡| _ | j S )Nc                 S   s   | t ? t@ tkS r   )r
   r   r   r]   r   r   r   r_   š   r`   z$Function.get_frees.<locals>.<lambda>)Ú_Function__freesrb   )r"   Úis_freer   r   r   Ú	get_frees˜   s    
zFunction.get_frees)r-   r.   r/   ra   rf   rn   rj   rl   rb   rc   rh   rk   rm   rp   r   r   r   r   r   s   s   c                   @   s   e Zd ZdZdd„ ZdS )r   Nc                 C   s6   | j d kr0i }| jjD ]}d||j< qt|ƒ| _ | j S )Né   )Ú_Class__methodsr0   rD   r5   r\   )r"   ÚdrV   r   r   r   Úget_methods£   s    

zClass.get_methods)r-   r.   r/   rr   rt   r   r   r   r   r   Ÿ   s   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   NFrJ   c                C   s.   || _ || _|t? t@ | _|p d| _|| _d S )Nr   )Ú_Symbol__nameÚ_Symbol__flagsr
   r   Ú_Symbol__scopeÚ_Symbol__namespacesÚ_Symbol__module_scope)r"   r5   rM   rN   rK   r   r   r   r#   ®   s
    
zSymbol.__init__c                 C   s   d  | j¡S )Nz<symbol {0!r}>)r6   ru   r!   r   r   r   r7   µ   s    zSymbol.__repr__c                 C   s   | j S r   )ru   r!   r   r   r   r=   ¸   s    zSymbol.get_namec                 C   s   t | jtj@ ƒS r   )r@   rv   r   r   r!   r   r   r   Úis_referenced»   s    zSymbol.is_referencedc                 C   s   t | jt@ ƒS r   )r@   rv   r   r!   r   r   r   Úis_parameter¾   s    zSymbol.is_parameterc                 C   s"   t | jttfkp| jo| jt@ ƒS )z0Return *True* if the sysmbol is global.
        )r@   rw   r   r   ry   rv   r   r!   r   r   r   Ú	is_globalÁ   s    ÿzSymbol.is_globalc                 C   s   t | jt@ ƒS r   )r@   rv   r   r!   r   r   r   Úis_nonlocalÇ   s    zSymbol.is_nonlocalc                 C   s   t | jtkƒS r   )r@   rw   r   r!   r   r   r   Úis_declared_globalÊ   s    zSymbol.is_declared_globalc                 C   s"   t | jttfkp| jo| jt@ ƒS )z.Return *True* if the symbol is local.
        )r@   rw   r   r   ry   rv   r   r!   r   r   r   Úis_localÍ   s    ÿzSymbol.is_localc                 C   s   t | jt@ ƒS r   )r@   rv   r	   r!   r   r   r   Úis_annotatedÓ   s    zSymbol.is_annotatedc                 C   s   t | jtkƒS r   )r@   rw   r   r!   r   r   r   ro   Ö   s    zSymbol.is_freec                 C   s   t | jt@ ƒS r   )r@   rv   r   r!   r   r   r   Úis_importedÙ   s    zSymbol.is_importedc                 C   s   t | jt@ ƒS r   )r@   rv   r   r!   r   r   r   Úis_assignedÜ   s    zSymbol.is_assignedc                 C   s
   t | jƒS )a‰  Returns true if name binding introduces new namespace.

        If the name is used as the target of a function or class
        statement, this will be true.

        Note that a single name can be bound to multiple objects.  If
        is_namespace() is true, the name may also be bound to other
        objects, like an int or list, that does not introduce a new
        namespace.
        )r@   rx   r!   r   r   r   Úis_namespaceß   s    zSymbol.is_namespacec                 C   s   | j S )z.Return a list of namespaces bound to this name)rx   r!   r   r   r   Úget_namespacesì   s    zSymbol.get_namespacesc                 C   s    t | jƒdkrtdƒ‚| jd S )z�Returns the single namespace bound to this name.

        Raises ValueError if the name is bound to multiple namespaces.
        rq   z$name is bound to multiple namespacesr   )Úlenrx   Ú
ValueErrorr!   r   r   r   Úget_namespaceð   s    zSymbol.get_namespace)N)r-   r.   r/   r#   r7   r=   rz   r{   r|   r}   r~   r   r€   ro   r�   r‚   rƒ   r„   r‡   r   r   r   r   r   ¬   s    Ú__main__rq   Úexec),Ú__doc__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ÚmodrI   rR   rO   ÚinfoÚprintr   rƒ   r   r   r   r   Ú<module>   s&   DN,M

