
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \m  ã               @   sN  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 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eƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZedk�rJddlZddlZeejd ƒ�Zej ƒ Z!W dQ R X ee!ej"j#ejd ƒd dƒZ$x0e$j%ƒ D ]$Z&e$j'e&ƒZ(e)e(e(j*ƒ e(j+ƒ ƒ �q"W dS )z2Interface to the compiler's internal symbol tablesé    N)ÚUSEÚ
DEF_GLOBALÚ	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 j| ||ƒ}t||ƒS )N)Ú	_symtabler   Ú_newSymbolTable)ÚcodeÚfilenameZcompile_typeÚtop© r   ú /usr/lib64/python3.6/symtable.pyr      s    c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚSymbolTableFactoryc             C   s   t jƒ | _d S )N)Ú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 )N)Útyper   ÚTYPE_FUNCTIONr   Ú
TYPE_CLASSr   r   )r    Útabler   r   r   r   Únew   s
    

zSymbolTableFactory.newc             C   s8   ||f}| j j|d ƒ}|d kr4| j||ƒ }| j |< |S )N)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 )N)Ú_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|| jƒS dj|| jj| jƒS d S )NÚ z%s Úglobalz<{0}SymbolTable for module {1}>z<{0}SymbolTable for {1} in {2}>)Ú	__class__r   r+   r.   ÚnameÚformatr/   )r    Zkindr   r   r   Ú__repr__,   s    
zSymbolTable.__repr__c             C   sX   | j jtjkrdS | j jtjkr$dS | j jtjkr6dS | j jdksTtdj| j jƒƒ‚d S )	NÚmoduleZfunctionÚclassé   é   é   zunexpected type: {0})r9   r:   r;   )r.   r"   r   ZTYPE_MODULEr#   r$   ÚAssertionErrorr5   )r    r   r   r   Úget_type9   s    zSymbolTable.get_typec             C   s   | j jS )N)r.   Úid)r    r   r   r   Úget_idC   s    zSymbolTable.get_idc             C   s   | j jS )N)r.   r4   )r    r   r   r   Úget_nameF   s    zSymbolTable.get_namec             C   s   | j jS )N)r.   Úlineno)r    r   r   r   Ú
get_linenoI   s    zSymbolTable.get_linenoc             C   s   t | jjtjkƒS )N)Úboolr.   r"   r   r#   )r    r   r   r   Úis_optimizedL   s    zSymbolTable.is_optimizedc             C   s   t | jjƒS )N)rC   r.   Únested)r    r   r   r   Ú	is_nestedO   s    zSymbolTable.is_nestedc             C   s   t | jjƒS )N)rC   r.   Úchildren)r    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jƒ S )N)r.   ÚsymbolsÚkeys)r    r   r   r   Úget_identifiersY   s    zSymbolTable.get_identifiersc             C   sD   | j j|ƒ}|d kr@| jj| }| j|ƒ}t|||ƒ }| j |< |S )N)r0   r'   r.   rJ   Ú_SymbolTable__check_childrenr   )r    r4   ZsymÚflagsÚ
namespacesr   r   r   Úlookup\   s    
zSymbolTable.lookupc                s   ‡ fdd„ˆ j ƒ D ƒS )Nc                s   g | ]}ˆ j |ƒ‘qS r   )rP   )Ú.0Úident)r    r   r   ú
<listcomp>e   s    z+SymbolTable.get_symbols.<locals>.<listcomp>)rL   )r    r   )r    r   Úget_symbolsd   s    zSymbolTable.get_symbolsc                s   ‡ ‡fdd„ˆj jD ƒS )Nc                s"   g | ]}|j ˆ krt|ˆjƒ‘qS r   )r4   r   r/   )rQ   Úst)r4   r    r   r   rS   h   s   z0SymbolTable.__check_children.<locals>.<listcomp>)r.   rG   )r    r4   r   )r4   r    r   Z__check_childreng   s    zSymbolTable.__check_childrenc                s   ‡ fdd„ˆ j jD ƒS )Nc                s   g | ]}t |ˆ jƒ‘qS r   )r   r/   )rQ   rU   )r    r   r   rS   m   s   z,SymbolTable.get_children.<locals>.<listcomp>)r.   rG   )r    r   )r    r   Úget_childrenl   s    
zSymbolTable.get_childrenN)r+   r,   r-   r!   r6   r=   r?   r@   rB   rD   rF   rH   rI   rL   rP   rT   rM   rV   r   r   r   r   r   %   s   
c               @   sD   e 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S )r   Nc                s   t ‡ ‡fdd„ˆ jƒ D ƒƒS )Nc                s    g | ]}ˆˆ j j| ƒr|‘qS r   )r.   rJ   )rQ   rR   )r    Ú	test_funcr   r   rS   z   s    z.Function.__idents_matching.<locals>.<listcomp>)ÚtuplerL   )r    rW   r   )r    rW   r   Z__idents_matchingy   s    zFunction.__idents_matchingc             C   s    | j d kr| jdd„ ƒ| _ | j S )Nc             S   s   | t @ S )N)r   )Úxr   r   r   Ú<lambda>   s    z)Function.get_parameters.<locals>.<lambda>)Ú_Function__paramsÚ_Function__idents_matching)r    r   r   r   Úget_parameters}   s    
zFunction.get_parametersc                s0   | j d kr*ttf‰ ‡ fdd„}| j|ƒ| _ | j S )Nc                s   | t ? t@ ˆ kS )N)r	   r
   )rY   )Úlocsr   r   rZ   …   s    z%Function.get_locals.<locals>.<lambda>)Ú_Function__localsr   r   r\   )r    Útestr   )r^   r   Ú
get_locals‚   s
    
zFunction.get_localsc                s0   | j d kr*ttf‰ ‡ fdd„}| j|ƒ| _ | j S )Nc                s   | t ? t@ ˆ kS )N)r	   r
   )rY   )Úglobr   r   rZ   Œ   s    z&Function.get_globals.<locals>.<lambda>)Ú_Function__globalsr   r   r\   )r    r`   r   )rb   r   Úget_globals‰   s
    
zFunction.get_globalsc             C   s$   | j d krdd„ }| j|ƒ| _ | j S )Nc             S   s   | t ? t@ tkS )N)r	   r
   r   )rY   r   r   r   rZ   ’   s    z$Function.get_frees.<locals>.<lambda>)Ú_Function__freesr\   )r    Úis_freer   r   r   Ú	get_frees�   s    
zFunction.get_frees)r+   r,   r-   r[   r_   re   rc   r\   r]   ra   rd   rg   r   r   r   r   r   q   s   c               @   s   e Zd ZdZdd„ ZdS )r   Nc             C   s:   | j d kr4i }x| jjD ]}d||j< qW t|ƒ| _ | j S )Nr9   )Ú_Class__methodsr.   rG   r4   rX   )r    ÚdrU   r   r   r   Úget_methods›   s    

zClass.get_methods)r+   r,   r-   rh   rj   r   r   r   r   r   —   s   c               @   s†   e Zd Z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S )!r   Nc             C   s(   || _ || _|t? t@ | _|p f | _d S )N)Ú_Symbol__nameÚ_Symbol__flagsr	   r
   Ú_Symbol__scopeÚ_Symbol__namespaces)r    r4   rN   rO   r   r   r   r!   ¦   s    zSymbol.__init__c             C   s   dj | jƒS )Nz<symbol {0!r}>)r5   rk   )r    r   r   r   r6   ¬   s    zSymbol.__repr__c             C   s   | j S )N)rk   )r    r   r   r   r@   ¯   s    zSymbol.get_namec             C   s   t | jtj@ ƒS )N)rC   rl   r   r   )r    r   r   r   Úis_referenced²   s    zSymbol.is_referencedc             C   s   t | jt@ ƒS )N)rC   rl   r   )r    r   r   r   Úis_parameterµ   s    zSymbol.is_parameterc             C   s   t | jttfkƒS )N)rC   rm   r   r   )r    r   r   r   Ú	is_global¸   s    zSymbol.is_globalc             C   s   t | jtkƒS )N)rC   rm   r   )r    r   r   r   Úis_declared_global»   s    zSymbol.is_declared_globalc             C   s   t | jt@ ƒS )N)rC   rl   r   )r    r   r   r   Úis_local¾   s    zSymbol.is_localc             C   s   t | jt@ ƒS )N)rC   rl   r   )r    r   r   r   Úis_annotatedÁ   s    zSymbol.is_annotatedc             C   s   t | jtkƒS )N)rC   rm   r   )r    r   r   r   rf   Ä   s    zSymbol.is_freec             C   s   t | jt@ ƒS )N)rC   rl   r   )r    r   r   r   Úis_importedÇ   s    zSymbol.is_importedc             C   s   t | jt@ ƒS )N)rC   rl   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.
        )rC   rn   )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)rn   )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.
        r9   z$name is bound to multiple namespacesr   )Úlenrn   Ú
ValueError)r    r   r   r   Úget_namespaceÞ   s    zSymbol.get_namespace)N)r+   r,   r-   r!   r6   r@   ro   rp   rq   rr   rs   rt   rf   ru   rv   rw   rx   r{   r   r   r   r   r   ¤   s   
Ú__main__r9   Úexec),Ú__doc__r   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   Ú__all__r   r   r   Úobjectr   r   r   r   r+   ÚosÚsysÚopenÚargvÚfÚreadÚsrcÚpathÚsplitÚmodrL   rR   rP   ÚinfoÚprintrs   rw   r   r   r   r   Ú<module>   s&   @L&C

