grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026 ”qcã @sÇdZddlZddlmZmZmZmZmZmZmZm Z m Z m Z m Z m Z mZddlZdddddgZd d„ZGd d „d ƒZeƒZGd d„deƒZGd d„deƒZGdd„deƒZGdd„deƒZedkrÃddlZddlZeejdƒ�ZejƒZ WdQRXee ej!j"ejdƒddƒZ#x?e#j$ƒD]1Z%e#j&e%ƒZ'e(e'e'j)ƒe'j*ƒƒqŽWdS)z2Interface to the compiler's internal symbol tableséN) ÚUSEÚ DEF_GLOBALÚ DEF_LOCALÚ DEF_PARAMÚ DEF_IMPORTÚ DEF_BOUNDÚ SCOPE_OFFÚ SCOPE_MASKÚFREEÚLOCALÚGLOBAL_IMPLICITÚGLOBAL_EXPLICITÚCELLÚsymtableÚ SymbolTableÚClassÚFunctionÚSymbolcCs"tj|||ƒ}t||ƒS)N)Ú _symtablerÚ_newSymbolTable)ÚcodeÚfilenameZ compile_typeÚtop©rú-/opt/alt/python35/lib64/python3.5/symtable.pyr sc@s4eZdZdd„Zdd„Zdd„ZdS)ÚSymbolTableFactorycCstjƒ|_dS)N)ÚweakrefÚWeakValueDictionaryÚ_SymbolTableFactory__memo)ÚselfrrrÚ__init__szSymbolTableFactory.__init__cCsK|jtjkrt||ƒS|jtjkr>t||ƒSt||ƒS)N)ÚtyperÚ TYPE_FUNCTIONrÚ TYPE_CLASSrr)rÚtablerrrrÚnews   zSymbolTableFactory.newcCsN||f}|jj|dƒ}|dkrJ|j||ƒ}|j|<|S)N)rÚgetr%)rr$rÚkeyÚobjrrrÚ__call__s   zSymbolTableFactory.__call__N)Ú__name__Ú __module__Ú __qualname__r r%r)rrrrrs   rc@sÄeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„ZdS) rcCs||_||_i|_dS)N)Ú_tableÚ _filenameÚ_symbols)rZ raw_tablerrrrr 's  zSymbolTable.__init__cCsm|jtkrd}nd|jj}|jjdkrMdj||jƒSdj||jj|jƒSdS)NÚz%s Úglobalz<{0}SymbolTable for module {1}>z<{0}SymbolTable for {1} in {2}>)Ú __class__rr*r-ÚnameÚformatr.)rZkindrrrÚ__repr__,s   zSymbolTable.__repr__cCsO|jjtjkrdS|jjtjkr2dS|jjtjkrKdSdS)NÚmoduleZfunctionÚclass)r-r!rZ TYPE_MODULEr"r#)rrrrÚget_type9szSymbolTable.get_typecCs |jjS)N)r-Úid)rrrrÚget_idCszSymbolTable.get_idcCs |jjS)N)r-r3)rrrrÚget_nameFszSymbolTable.get_namecCs |jjS)N)r-Úlineno)rrrrÚ get_linenoIszSymbolTable.get_linenocCst|jjtjkƒS)N)Úboolr-r!rr")rrrrÚ is_optimizedLszSymbolTable.is_optimizedcCst|jjƒS)N)r>r-Únested)rrrrÚ is_nestedOszSymbolTable.is_nestedcCst|jjƒS)N)r>r-Úchildren)rrrrÚ has_childrenRszSymbolTable.has_childrencCsdS)z7Return true if the scope uses exec. Deprecated method.Fr)rrrrÚhas_execUszSymbolTable.has_execcCs|jjjƒS)N)r-ÚsymbolsÚkeys)rrrrÚget_identifiersYszSymbolTable.get_identifierscCs^|jj|ƒ}|dkrZ|jj|}|j|ƒ}t|||ƒ}|j|<|S)N)r/r&r-rEÚ_SymbolTable__check_childrenr)rr3ZsymÚflagsÚ namespacesrrrÚlookup\s  zSymbolTable.lookupcs‡fdd†ˆjƒDƒS)Ncsg|]}ˆj|ƒ‘qSr)rK)Ú.0Úident)rrrú es z+SymbolTable.get_symbols..)rG)rr)rrÚ get_symbolsdszSymbolTable.get_symbolscs ‡‡fdd†ˆjjDƒS)Ncs1g|]'}|jˆkrt|ˆjƒ‘qSr)r3rr.)rLÚst)r3rrrrNhs z0SymbolTable.__check_children..)r-rB)rr3r)r3rrZ__check_childrengszSymbolTable.__check_childrencs‡fdd†ˆjjDƒS)Ncs"g|]}t|ˆjƒ‘qSr)rr.)rLrP)rrrrNms z,SymbolTable.get_children..)r-rB)rr)rrÚ get_childrenlszSymbolTable.get_childrenN)r*r+r,r r5r8r:r;r=r?rArCrDrGrKrOrHrQrrrrr%s             c@sdeZdZdZdZdZdZdd„Zdd„Zdd„Z dd „Z d d „Z dS) rNcs&t‡‡fdd†ˆjƒDƒƒS)Ncs,g|]"}ˆˆjj|ƒr|‘qSr)r-rE)rLrM)rÚ test_funcrrrNzs z.Function.__idents_matching..)ÚtuplerG)rrRr)rrRrZ__idents_matchingyszFunction.__idents_matchingcCs.|jdkr'|jdd„ƒ|_|jS)NcSs|t@S)N)r)ÚxrrrÚsz)Function.get_parameters..)Ú_Function__paramsÚ_Function__idents_matching)rrrrÚget_parameters}szFunction.get_parameterscsF|jdkr?ttf‰‡fdd†}|j|ƒ|_|jS)Ncs|t?t@ˆkS)N)rr )rT)ÚlocsrrrU…sz%Function.get_locals..)Ú_Function__localsr rrW)rÚtestr)rYrÚ get_locals‚s  zFunction.get_localscsF|jdkr?ttf‰‡fdd†}|j|ƒ|_|jS)Ncs|t?t@ˆkS)N)rr )rT)ÚglobrrrUŒsz&Function.get_globals..)Ú_Function__globalsr r rW)rr[r)r]rÚ get_globals‰s  zFunction.get_globalscCs4|jdkr-dd„}|j|ƒ|_|jS)NcSs|t?t@tkS)N)rr r )rTrrrrU’sz$Function.get_frees..)Ú_Function__freesrW)rÚis_freerrrÚ get_frees�s zFunction.get_frees) r*r+r,rVrZr`r^rWrXr\r_rbrrrrrqs     c@s"eZdZdZdd„ZdS)rNcCsO|jdkrHi}x!|jjD]}d||j)r4rg)rrrrr5¬szSymbol.__repr__cCs|jS)N)rg)rrrrr;¯szSymbol.get_namecCst|jtj@ƒS)N)r>rhrr)rrrrÚ is_referenced²szSymbol.is_referencedcCst|jt@ƒS)N)r>rhr)rrrrÚ is_parameterµszSymbol.is_parametercCst|jttfkƒS)N)r>rir r )rrrrÚ is_global¸szSymbol.is_globalcCst|jtkƒS)N)r>rir )rrrrÚis_declared_global»szSymbol.is_declared_globalcCst|jt@ƒS)N)r>rhr)rrrrÚis_local¾szSymbol.is_localcCst|jtkƒS)N)r>rir )rrrrraÁszSymbol.is_freecCst|jt@ƒS)N)r>rhr)rrrrÚ is_importedÄszSymbol.is_importedcCst|jt@ƒS)N)r>rhr)rrrrÚ is_assignedÇszSymbol.is_assignedcCs 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>rj)rrrrÚ is_namespaceÊs zSymbol.is_namespacecCs|jS)z.Return a list of namespaces bound to this name)rj)rrrrÚget_namespaces×szSymbol.get_namespacescCs,t|jƒdkr!tdƒ‚|jdS)z�Returns the single namespace bound to this name. Raises ValueError if the name is bound to multiple namespaces. rcz$name is bound to multiple namespacesr)ÚlenrjÚ ValueError)rrrrÚ get_namespaceÛs zSymbol.get_namespace)r*r+r,r r5r;rkrlrmrnrorarprqrrrsrvrrrrr¤s            Ú__main__rcÚexec)+Ú__doc__rrrrrrrrr r r r r rrÚ__all__rrrÚobjectrrrrr*ÚosÚsysÚopenÚargvÚfÚreadÚsrcÚpathÚsplitÚmodrGrMrKÚinfoÚprintrorrrrrrÚs& X   L& @ )