a DOg@sXdZddlZddlmZmZmZmZmZmZmZm Z m Z m Z m Z m Z mZmZmZddlZgdZddZGdddZeZGd d d ZGd d d eZGd ddeZGdddZedkrTddlZddlZeejdZe Z!Wdn1s0Yee!ej"#ejdddZ$e$%D]$Z&e$'e&Z(e)e(e(*e(+q.dS)z2Interface to the compiler's internal symbol tablesN)USE DEF_GLOBAL DEF_NONLOCAL DEF_LOCAL DEF_PARAM DEF_IMPORT DEF_BOUND DEF_ANNOT SCOPE_OFF SCOPE_MASKFREELOCALGLOBAL_IMPLICITGLOBAL_EXPLICITCELL)symtable SymbolTableClassFunctionSymbolcCst|||}t||SN) _symtabler_newSymbolTable)codefilenameZ compile_typetopr /usr/lib64/python3.9/symtable.pyr src@s$eZdZddZddZddZdS)SymbolTableFactorycCst|_dSr)weakrefWeakValueDictionary_SymbolTableFactory__memoselfrrr__init__szSymbolTableFactory.__init__cCs6|jtjkrt||S|jtjkr,t||St||Sr)typer TYPE_FUNCTIONr TYPE_CLASSrr)r#tablerrrrnews     zSymbolTableFactory.newcCs8||f}|j|d}|dur4|||}|j|<|Sr)r!getr))r#r(rkeyobjrrr__call__s zSymbolTableFactory.__call__N)__name__ __module__ __qualname__r$r)r-rrrrrsrc@s|eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZdS)rcCs||_||_i|_dSr)_table _filename_symbols)r#Z raw_tablerrrrr$'szSymbolTable.__init__cCsN|jtkrd}n d|jj}|jjdkr6d||jSd||jj|jSdS)Nz%s rz<{0}SymbolTable for module {1}>z<{0}SymbolTable for {1} in {2}>) __class__rr.r1nameformatr2)r#kindrrr__repr__,s   zSymbolTable.__repr__cCsX|jjtjkrdS|jjtjkr$dS|jjtjkr6dS|jjdvsTJd|jjdS)Nmodulefunctionclass)zunexpected type: {0})r1r%rZ TYPE_MODULEr&r'r7r"rrrget_type9s zSymbolTable.get_typecCs|jjSr)r1idr"rrrget_idCszSymbolTable.get_idcCs|jjSr)r1r6r"rrrget_nameFszSymbolTable.get_namecCs|jjSr)r1linenor"rrr get_linenoIszSymbolTable.get_linenocCst|jjtjkSr)boolr1r%rr&r"rrr is_optimizedLszSymbolTable.is_optimizedcCs t|jjSr)rFr1nestedr"rrr is_nestedOszSymbolTable.is_nestedcCs t|jjSr)rFr1childrenr"rrr has_childrenRszSymbolTable.has_childrencCs |jjSr)r1symbolskeysr"rrrget_identifiersUszSymbolTable.get_identifierscCsT|j|}|durP|jj|}||}|jjdk}t||||d}|j|<|S)Nr module_scope)r3r*r1rL_SymbolTable__check_childrenr6r)r#r6Zsymflags namespacesrPrrrlookupXs    zSymbolTable.lookupcsfddDS)Ncsg|]}|qSr)rT.0identr"rr cz+SymbolTable.get_symbols..)rNr"rr"r get_symbolsbszSymbolTable.get_symbolscsfddjjDS)Ncs"g|]}|jkrt|jqSr)r6rr2rVstr6r#rrrXfs z0SymbolTable.__check_children..r1rJ)r#r6rr]rZ__check_childrenes zSymbolTable.__check_childrencsfddjjDS)Ncsg|]}t|jqSr)rr2r[r"rrrXksz,SymbolTable.get_children..r^r"rr"r get_childrenjs zSymbolTable.get_childrenN)r.r/r0r$r9r@rBrCrErGrIrKrNrTrZrQr_rrrrr%s   rc@sPeZdZdZdZdZdZdZddZddZ ddZ dd Z d d Z d d Z dS)rNcstfddDS)Nc3s"|]}jj|r|VqdSr)r1rLrUr#Z test_funcrr ysz-Function.__idents_matching..)tuplerNr`rr`rZ__idents_matchingxszFunction.__idents_matchingcCs |jdur|dd|_|jS)NcSs|t@Sr)rxrrr~rYz)Function.get_parameters..)_Function__params_Function__idents_matchingr"rrrget_parameters|s zFunction.get_parameterscs0|jdur*ttffdd}|||_|jS)Ncs|t?t@vSrr r rcZlocsrrrerYz%Function.get_locals..)_Function__localsr rrgr#testrrjr get_localss    zFunction.get_localscs0|jdur*ttffdd}|||_|jS)Ncs|t?t@vSrrircglobrrrerYz&Function.get_globals..)_Function__globalsrrrgrlrror get_globalss    zFunction.get_globalscCs |jdur|dd|_|jS)NcSs|t@Sr)rrcrrrrerYz(Function.get_nonlocals..)_Function__nonlocalsrgr"rrr get_nonlocalss zFunction.get_nonlocalscCs$|jdurdd}|||_|jS)NcSs|t?t@tkSr)r r r rcrrrrerYz$Function.get_frees..)_Function__freesrg)r#is_freerrr get_freess  zFunction.get_frees)r.r/r0rfrkrurqrsrgrhrnrrrtrwrrrrrosrc@seZdZdZddZdS)rNcCs6|jdur0i}|jjD]}d||j<qt||_|jS)Nr=)_Class__methodsr1rJr6rb)r#dr\rrr get_methodss     zClass.get_methods)r.r/r0rxrzrrrrrsrc@seZdZd$ddddZddZdd Zd d Zd d ZddZddZ ddZ ddZ ddZ ddZ ddZddZddZd d!Zd"d#ZdS)%rNFrOcCs.||_||_|t?t@|_|p d|_||_dS)Nr) _Symbol__name_Symbol__flagsr r _Symbol__scope_Symbol__namespaces_Symbol__module_scope)r#r6rRrSrPrrrr$s  zSymbol.__init__cCs d|jS)Nz)r7r{r"rrrr9szSymbol.__repr__cCs|jSr)r{r"rrrrCszSymbol.get_namecCst|jtj@Sr)rFr|rrr"rrr is_referencedszSymbol.is_referencedcCst|jt@Sr)rFr|rr"rrr is_parameterszSymbol.is_parametercCs"t|jttfvp|jo|jt@S)z0Return *True* if the sysmbol is global. )rFr}rrrr|rr"rrr is_globalszSymbol.is_globalcCst|jt@Sr)rFr|rr"rrr is_nonlocalszSymbol.is_nonlocalcCst|jtkSr)rFr}rr"rrris_declared_globalszSymbol.is_declared_globalcCs"t|jttfvp|jo|jt@S)z.Return *True* if the symbol is local. )rFr}r rrr|rr"rrris_localszSymbol.is_localcCst|jt@Sr)rFr|r r"rrr is_annotatedszSymbol.is_annotatedcCst|jtkSr)rFr}r r"rrrrvszSymbol.is_freecCst|jt@Sr)rFr|rr"rrr is_importedszSymbol.is_importedcCst|jt@Sr)rFr|rr"rrr is_assignedszSymbol.is_assignedcCs t|jS)aReturns 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. )rFr~r"rrr is_namespaces zSymbol.is_namespacecCs|jS)z.Return a list of namespaces bound to this name)r~r"rrrget_namespacesszSymbol.get_namespacescCs t|jdkrtd|jdS)zReturns the single namespace bound to this name. Raises ValueError if the name is bound to multiple namespaces. r=z$name is bound to multiple namespacesr)lenr~ ValueErrorr"rrr get_namespaceszSymbol.get_namespace)N)r.r/r0r$r9rCrrrrrrrrvrrrrrrrrrrs  r__main__r=exec),__doc__rrrrrrrrr r r r r rrrr__all__rrrrrrrr.ossysopenargvfreadsrcpathsplitmodrNrWrTinfoprintrrrrrrs&DJ, M &