grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026î ¤ fìã @sÏdZddlZddlmZmZmZmZmZmZmZm Z m Z m Z m Z m Z mZmZddlZdddddgZd d„ZGd d „d ƒZeƒZGd d„deƒZGd d„deƒZGdd„deƒZGdd„deƒZedkrËddlZddlZeejdƒ�Zej ƒZ!WdQXee!ej"j#ejdƒddƒZ$xBe$j%ƒD]1Z&e$j'e&ƒZ(e)e(e(j*ƒe(j+ƒƒq“WndS)z2Interface to the compiler's internal symbol tableséN)ÚUSEÚ DEF_GLOBALÚ DEF_LOCALÚ DEF_PARAMÚ DEF_IMPORTÚ DEF_BOUNDÚOPT_IMPORT_STARÚ 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/python34/lib64/python3.4/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.newcCsQ||f}|jj|dƒ}|dkrM|j||ƒ}|j|z<{0}SymbolTable for {1} in {2}>)Ú __class__rr+r.ÚnameÚformatr/)r ZkindrrrÚ__repr__,s   zSymbolTable.__repr__cCs||jjtjkrdS|jjtjkr2dS|jjtjkrKdS|jjdksxtdj|jjƒƒ‚dS) NÚmoduleZfunctionÚclassééézunexpected type: {0})r9r:r;)r.r"rZ TYPE_MODULEr#r$ÚAssertionErrorr5)r rrrÚget_type9szSymbolTable.get_typecCs |jjS)N)r.Úid)r rrrÚget_idCszSymbolTable.get_idcCs |jjS)N)r.r4)r rrrÚget_nameFszSymbolTable.get_namecCs |jjS)N)r.Úlineno)r rrrÚ get_linenoIszSymbolTable.get_linenocCs&t|jjtjko"|jj ƒS)N)Úboolr.r"rr#Ú optimized)r rrrÚ is_optimizedLszSymbolTable.is_optimizedcCst|jjƒS)N)rCr.Únested)r rrrÚ is_nestedPszSymbolTable.is_nestedcCst|jjƒS)N)rCr.Úchildren)r rrrÚ has_childrenSszSymbolTable.has_childrencCsdS)z7Return true if the scope uses exec. Deprecated method.Fr)r rrrÚhas_execVszSymbolTable.has_execcCst|jjt@ƒS)z&Return true if the scope uses import *)rCr.rDr)r rrrÚhas_import_starZszSymbolTable.has_import_starcCs|jjjƒS)N)r.ÚsymbolsÚkeys)r rrrÚget_identifiers^szSymbolTable.get_identifierscCsa|jj|ƒ}|dkr]|jj|}|j|ƒ}t|||ƒ}|j|js z+SymbolTable.get_symbols..)rN)r r)r rÚ get_symbolsiszSymbolTable.get_symbolscs ‡‡fdd†ˆjjDƒS)Ncs1g|]'}|jˆkrt|ˆjƒ‘qSr)r4rr/)rSÚst)r4r rrrUms z0SymbolTable.__check_children..)r.rH)r r4r)r4r rZ__check_childrenlszSymbolTable.__check_childrencs‡fdd†ˆjjDƒS)Ncs"g|]}t|ˆjƒ‘qSr)rr/)rSrW)r rrrUrs z,SymbolTable.get_children..)r.rH)r r)r rÚ get_childrenqszSymbolTable.get_childrenN)r+r,r-r!r6r=r?r@rBrErGrIrJrKrNrRrVrOrXrrrrr%s              c@sdeZdZdZdZdZdZdd„Zdd„Zdd„Z dd „Z d d „Z dS) rNcs&t‡‡fdd†ˆjƒDƒƒS)Ncs,g|]"}ˆˆjj|ƒr|‘qSr)r.rL)rSrT)r Ú test_funcrrrUs z.Function.__idents_matching..)ÚtuplerN)r rYr)r rYrZ__idents_matching~szFunction.__idents_matchingcCs1|jdkr*|jdd„ƒ|_n|jS)NcSs|t@S)N)r)ÚxrrrÚ„sz)Function.get_parameters..)Ú_Function__paramsÚ_Function__idents_matching)r rrrÚget_parameters‚szFunction.get_parameterscsI|jdkrBttf‰‡fdd†}|j|ƒ|_n|jS)Ncs|t?t@ˆkS)N)r r )r[)Úlocsrrr\Šsz%Function.get_locals..)Ú_Function__localsr rr^)r Útestr)r`rÚ get_locals‡s  zFunction.get_localscsI|jdkrBttf‰‡fdd†}|j|ƒ|_n|jS)Ncs|t?t@ˆkS)N)r r )r[)Úglobrrr\‘sz&Function.get_globals..)Ú_Function__globalsr rr^)r rbr)rdrÚ get_globalsŽs  zFunction.get_globalscCs7|jdkr0dd„}|j|ƒ|_n|jS)NcSs|t?t@tkS)N)r r r )r[rrrr\—sz$Function.get_frees..)Ú_Function__freesr^)r Úis_freerrrÚ get_frees•s zFunction.get_frees) r+r,r-r]rargrer^r_rcrfrirrrrrvs     c@s"eZdZdZdd„ZdS)rNcCsR|jdkrKi}x!|jjD]}d||j)r5rm)r rrrr6±szSymbol.__repr__cCs|jS)N)rm)r rrrr@´szSymbol.get_namecCst|jtj@ƒS)N)rCrnrr)r rrrÚ is_referenced·szSymbol.is_referencedcCst|jt@ƒS)N)rCrnr)r rrrÚ is_parameterºszSymbol.is_parametercCst|jttfkƒS)N)rCror r)r rrrÚ is_global½szSymbol.is_globalcCst|jtkƒS)N)rCror)r rrrÚis_declared_globalÀszSymbol.is_declared_globalcCst|jt@ƒS)N)rCrnr)r rrrÚis_localÃszSymbol.is_localcCst|jtkƒS)N)rCror )r rrrrhÆszSymbol.is_freecCst|jt@ƒS)N)rCrnr)r rrrÚ is_importedÉszSymbol.is_importedcCst|jt@ƒS)N)rCrnr)r rrrÚ 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. )rCrp)r rrrÚ is_namespaceÏs zSymbol.is_namespacecCs|jS)z.Return a list of namespaces bound to this name)rp)r rrrÚget_namespacesÜszSymbol.get_namespacescCs/t|jƒdkr$tdƒ‚n|jdS)z�Returns the single namespace bound to this name. Raises ValueError if the name is bound to multiple namespaces. r9z$name is bound to multiple namespacesr)ÚlenrpÚ ValueError)r rrrÚ get_namespaceàszSymbol.get_namespace)r+r,r-r!r6r@rqrrrsrtrurhrvrwrxryr|rrrrr©s            Ú__main__r9Úexec),Ú__doc__rrrrrrrrr r r r r rrrÚ__all__rrrÚobjectrrrrr+ÚosÚsysÚopenÚargvÚfÚreadÚsrcÚpathÚsplitÚmodrNrTrRÚinfoÚprintrurxrrrrÚs& ^   Q& @ )