U \k^ @sNdZddlZddlmZmZmZmZmZmZmZm Z m Z m Z m Z m Z mZmZmZddlZdddddgZd dZGd d d ZeZGd ddeZGd ddeZGdddeZGdddeZedkrJddlZddlZeejdZ e !Z"W5QRXee"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_EXPLICITCELLsymtable SymbolTableClassFunctionSymbolcCst|||}t||SN) _symtabler_newSymbolTable)codefilenameZ compile_typetopr/usr/lib/python3.8/symtable.pyr sc@s$eZdZddZddZddZdS)SymbolTableFactorycCst|_dSr)weakrefZWeakValueDictionary_SymbolTableFactory__memoselfrrr__init__szSymbolTableFactory.__init__cCs6|jtjkrt||S|jtjkr,t||St||Sr)typer TYPE_FUNCTIONr TYPE_CLASSrr)r"tablerrrrnews     zSymbolTableFactory.newcCs8||f}|j|d}|dkr4|||}|j|<|Sr)r getr()r"r'rkeyobjrrr__call__s zSymbolTableFactory.__call__N)__name__ __module__ __qualname__r#r(r,rrrrrsrc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdS) rcCs||_||_i|_dSr)_table _filename_symbols)r"Z raw_tablerrrrr#'szSymbolTable.__init__cCsN|jtkrd}n d|jj}|jjdkr6d||jSd||jj|jSdS)Nz%s globalz<{0}SymbolTable for module {1}>z<{0}SymbolTable for {1} in {2}>) __class__rr-r0nameformatr1)r"Zkindrrr__repr__,s   zSymbolTable.__repr__cCsX|jjtjkrdS|jjtjkr$dS|jjtjkr6dS|jjdksTtd|jjdS)NmoduleZfunctionclass)zunexpected type: {0})r0r$rZ TYPE_MODULEr%r&AssertionErrorr7r!rrrget_type9s zSymbolTable.get_typecCs|jjSr)r0idr!rrrget_idCszSymbolTable.get_idcCs|jjSr)r0r6r!rrrget_nameFszSymbolTable.get_namecCs|jjSr)r0linenor!rrr get_linenoIszSymbolTable.get_linenocCst|jjtjkSr)boolr0r$rr%r!rrr is_optimizedLszSymbolTable.is_optimizedcCs t|jjSr)rEr0nestedr!rrr is_nestedOszSymbolTable.is_nestedcCs t|jjSr)rEr0childrenr!rrr has_childrenRszSymbolTable.has_childrencCsdS)z7Return true if the scope uses exec. Deprecated method.Frr!rrrhas_execUszSymbolTable.has_execcCs |jjSr)r0symbolskeysr!rrrget_identifiersYszSymbolTable.get_identifierscCsD|j|}|dkr@|jj|}||}t|||}|j|<|Sr)r2r)r0rL_SymbolTable__check_childrenr)r"r6Zsymflags namespacesrrrlookup\s    zSymbolTable.lookupcsfddDS)Ncsg|]}|qSr)rR.0identr!rr esz+SymbolTable.get_symbols..)rNr!rr!r get_symbolsdszSymbolTable.get_symbolscsfddjjDS)Ncs"g|]}|jkrt|jqSr)r6rr1rTstr6r"rrrVhs z0SymbolTable.__check_children..r0rI)r"r6rrZrZ__check_childrengs zSymbolTable.__check_childrencsfddjjDS)Ncsg|]}t|jqSr)rr1rXr!rrrVmsz,SymbolTable.get_children..r[r!rr!r get_childrenls zSymbolTable.get_childrenN)r-r.r/r#r8r?rArBrDrFrHrJrKrNrRrWrOr\rrrrr%s  c@sPeZdZdZdZdZdZdZddZddZ ddZ dd Z d d Z d d Z dS)rNcstfddDS)Nc3s"|]}jj|r|VqdSr)r0rLrSr"Z test_funcrr {sz-Function.__idents_matching..)tuplerNr]rr]rZ__idents_matchingzszFunction.__idents_matchingcCs |jdkr|dd|_|jS)NcSs|t@Sr)rxrrrz)Function.get_parameters..)_Function__params_Function__idents_matchingr!rrrget_parameters~s zFunction.get_parameterscs0|jdkr*ttffdd}|||_|jS)Ncs|t?t@kSrr r r`Zlocsrrrbrcz%Function.get_locals..)_Function__localsr rrer"Ztestrrhr get_localss    zFunction.get_localscs0|jdkr*ttffdd}|||_|jS)Ncs|t?t@kSrrgr`Zglobrrrbrcz&Function.get_globals..)_Function__globalsrrrerjrrlr get_globalss    zFunction.get_globalscCs |jdkr|dd|_|jS)NcSs|t@Sr)rr`rrrrbrcz(Function.get_nonlocals..)_Function__nonlocalsrer!rrr get_nonlocalss zFunction.get_nonlocalscCs$|jdkrdd}|||_|jS)NcSs|t?t@tkSr)r r r r`rrrrbrcz$Function.get_frees..)_Function__freesre)r"is_freerrr get_freess  zFunction.get_frees)r-r.r/rdrirqrmrorerfrkrnrprsrrrrrqsc@seZdZdZddZdS)rNcCs6|jdkr0i}|jjD]}d||j<qt||_|jS)Nr;)_Class__methodsr0rIr6r_)r"drYrrr get_methodss     zClass.get_methods)r-r.r/rtrvrrrrrsc@seZdZd"ddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!ZdS)#rNcCs(||_||_|t?t@|_|p d|_dS)Nr) _Symbol__name_Symbol__flagsr r _Symbol__scope_Symbol__namespaces)r"r6rPrQrrrr#szSymbol.__init__cCs d|jS)Nz)r7rwr!rrrr8szSymbol.__repr__cCs|jSr)rwr!rrrrBszSymbol.get_namecCst|jtj@Sr)rErxrrr!rrr is_referencedszSymbol.is_referencedcCst|jt@Sr)rErxrr!rrr is_parameterszSymbol.is_parametercCst|jttfkSr)rEryrrr!rrr is_globalszSymbol.is_globalcCst|jt@Sr)rErxrr!rrr is_nonlocalszSymbol.is_nonlocalcCst|jtkSr)rEryrr!rrris_declared_globalszSymbol.is_declared_globalcCst|jt@Sr)rErxrr!rrris_localszSymbol.is_localcCst|jt@Sr)rErxr r!rrr is_annotatedszSymbol.is_annotatedcCst|jtkSr)rEryr r!rrrrrszSymbol.is_freecCst|jt@Sr)rErxrr!rrr is_importedszSymbol.is_importedcCst|jt@Sr)rErxrr!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. )rErzr!rrr is_namespaces zSymbol.is_namespacecCs|jS)z.Return a list of namespaces bound to this name)rzr!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)lenrz ValueErrorr!rrr get_namespaceszSymbol.get_namespace)N)r-r.r/r#r8rBr{r|r}r~rrrrrrrrrrrrrrrs   __main__r;exec)-__doc__rrrrrrrrr r r r r rrrr__all__rrrobjectrrrrr-ossysopenargvfreadsrcpathsplitmodrNrUrRinfoprintrrrrrrs&DL, F