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

  \m  ã               @   sJ  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�rFd 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 )é    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   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)r.   r"   r   ZTYPE_MODULEr#   r$   )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)r?   r.   Únested)r    r   r   r   Ú	is_nestedO   s    zSymbolTable.is_nestedc             C   s   t | jjƒS )N)r?   r.   Úchildren)r    r   r   r   Úhas_childrenR   s    zSymbolTable.has_childrenc             C   s   dS )NFr   )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.   rF   Ú_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   )rL   )Ú.0Úident)r    r   r   ú
<listcomp>e   s    z+SymbolTable.get_symbols.<locals>.<listcomp>)rH   )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/   )rM   Úst)r4   r    r   r   rO   h   s   z0SymbolTable.__check_children.<locals>.<listcomp>)r.   rC   )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/   )rM   rQ   )r    r   r   rO   m   s   z,SymbolTable.get_children.<locals>.<listcomp>)r.   rC   )r    r   )r    r   Úget_childrenl   s    
zSymbolTable.get_childrenN)r+   r,   r-   r!   r6   r9   r;   r<   r>   r@   rB   rD   rE   rH   rL   rP   rI   rR   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.   rF   )rM   rN   )r    Ú	test_funcr   r   rO   z   s    z.Function.__idents_matching.<locals>.<listcomp>)ÚtuplerH   )r    rS   r   )r    rS   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
   )rU   )Úlocsr   r   rV   …   s    z%Function.get_locals.<locals>.<lambda>)Ú_Function__localsr   r   rX   )r    Útestr   )rZ   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
   )rU   )Úglobr   r   rV   Œ   s    z&Function.get_globals.<locals>.<lambda>)Ú_Function__globalsr   r   rX   )r    r\   r   )r^   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   )rU   r   r   r   rV   ’   s    z$Function.get_frees.<locals>.<lambda>)Ú_Function__freesrX   )r    Úis_freer   r   r   Ú	get_frees�   s    
zFunction.get_frees)r+   r,   r-   rW   r[   ra   r_   rX   rY   r]   r`   rc   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 )Né   )Ú_Class__methodsr.   rC   r4   rT   )r    ÚdrQ   r   r   r   Úget_methods›   s    

zClass.get_methods)r+   r,   r-   re   rg   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   rJ   rK   r   r   r   r!   ¦   s    zSymbol.__init__c             C   s   dj | jƒS )Nz<symbol {0!r}>)r5   rh   )r    r   r   r   r6   ¬   s    zSymbol.__repr__c             C   s   | j S )N)rh   )r    r   r   r   r<   ¯   s    zSymbol.get_namec             C   s   t | jtj@ ƒS )N)r?   ri   r   r   )r    r   r   r   Úis_referenced²   s    zSymbol.is_referencedc             C   s   t | jt@ ƒS )N)r?   ri   r   )r    r   r   r   Úis_parameterµ   s    zSymbol.is_parameterc             C   s   t | jttfkƒS )N)r?   rj   r   r   )r    r   r   r   Ú	is_global¸   s    zSymbol.is_globalc             C   s   t | jtkƒS )N)r?   rj   r   )r    r   r   r   Úis_declared_global»   s    zSymbol.is_declared_globalc             C   s   t | jt@ ƒS )N)r?   ri   r   )r    r   r   r   Úis_local¾   s    zSymbol.is_localc             C   s   t | jt@ ƒS )N)r?   ri   r   )r    r   r   r   Úis_annotatedÁ   s    zSymbol.is_annotatedc             C   s   t | jtkƒS )N)r?   rj   r   )r    r   r   r   rb   Ä   s    zSymbol.is_freec             C   s   t | jt@ ƒS )N)r?   ri   r   )r    r   r   r   Úis_importedÇ   s    zSymbol.is_importedc             C   s   t | jt@ ƒS )N)r?   ri   r   )r    r   r   r   Úis_assignedÊ   s    zSymbol.is_assignedc             C   s
   t | jƒS )N)r?   rk   )r    r   r   r   Úis_namespaceÍ   s    zSymbol.is_namespacec             C   s   | j S )N)rk   )r    r   r   r   Úget_namespacesÚ   s    zSymbol.get_namespacesc             C   s    t | jƒdkrtdƒ‚| jd S )Nrd   z$name is bound to multiple namespacesr   )Úlenrk   Ú
ValueError)r    r   r   r   Úget_namespaceÞ   s    zSymbol.get_namespace)N)r+   r,   r-   r!   r6   r<   rl   rm   rn   ro   rp   rq   rb   rr   rs   rt   ru   rx   r   r   r   r   r   ¤   s   
Ú__main__rd   Úexec)+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ÚmodrH   rN   rL   ÚinfoÚprintrp   rt   r   r   r   r   Ú<module>   s$   @L&C

