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__cCsO|jjtjkrdS|jjtjkr2dS|jjtjkrKdSdS)NÚmoduleZfunctionÚclass)r.r"rZ TYPE_MODULEr#r$)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)r?r.Únested)r rrrÚ is_nestedPszSymbolTable.is_nestedcCst|jjƒS)N)r?r.Ú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 *)r?r.r@r)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..)rJ)r r)r rÚ get_symbolsiszSymbolTable.get_symbolscs ‡‡fdd†ˆjjDƒS)Ncs1g|]'}|jˆkrt|ˆjƒ‘qSr)r4rr/)rOÚst)r4r rrrQms z0SymbolTable.__check_children..)r.rD)r r4r)r4r rZ__check_childrenlszSymbolTable.__check_childrencs‡fdd†ˆjjDƒS)Ncs"g|]}t|ˆjƒ‘qSr)rr/)rOrS)r rrrQrs z,SymbolTable.get_children..)r.rD)r r)r rÚ get_childrenqszSymbolTable.get_childrenN)r+r,r-r!r6r9r;r<r>rArCrErFrGrJrNrRrKrTrrrrr%s              c@sdeZdZdZdZdZdZdd„Zdd„Zdd„Z dd „Z d d „Z dS) rNcs&t‡‡fdd†ˆjƒDƒƒS)Ncs,g|]"}ˆˆjj|ƒr|‘qSr)r.rH)rOrP)r Ú test_funcrrrQs z.Function.__idents_matching..)ÚtuplerJ)r rUr)r rUrZ__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 )rW)ÚlocsrrrXŠsz%Function.get_locals..)Ú_Function__localsr rrZ)r Útestr)r\rÚ get_locals‡s  zFunction.get_localscsI|jdkrBttf‰‡fdd†}|j|ƒ|_n|jS)Ncs|t?t@ˆkS)N)r r )rW)ÚglobrrrX‘sz&Function.get_globals..)Ú_Function__globalsr rrZ)r r^r)r`rÚ get_globalsŽs  zFunction.get_globalscCs7|jdkr0dd„}|j|ƒ|_n|jS)NcSs|t?t@tkS)N)r r r )rWrrrrX—sz$Function.get_frees..)Ú_Function__freesrZ)r Úis_freerrrÚ get_frees•s zFunction.get_frees) r+r,r-rYr]rcrarZr[r_rbrerrrrrvs     c@s"eZdZdZdd„ZdS)rNcCsR|jdkrKi}x!|jjD]}d||j)r5rj)r rrrr6±szSymbol.__repr__cCs|jS)N)rj)r rrrr<´szSymbol.get_namecCst|jtj@ƒS)N)r?rkrr)r rrrÚ is_referenced·szSymbol.is_referencedcCst|jt@ƒS)N)r?rkr)r rrrÚ is_parameterºszSymbol.is_parametercCst|jttfkƒS)N)r?rlr r)r rrrÚ is_global½szSymbol.is_globalcCst|jtkƒS)N)r?rlr)r rrrÚis_declared_globalÀszSymbol.is_declared_globalcCst|jt@ƒS)N)r?rkr)r rrrÚis_localÃszSymbol.is_localcCst|jtkƒS)N)r?rlr )r rrrrdÆszSymbol.is_freecCst|jt@ƒS)N)r?rkr)r rrrÚ is_importedÉszSymbol.is_importedcCst|jt@ƒS)N)r?rkr)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. )r?rm)r rrrÚ is_namespaceÏs zSymbol.is_namespacecCs|jS)z.Return a list of namespaces bound to this name)rm)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. rfz$name is bound to multiple namespacesr)ÚlenrmÚ ValueError)r rrrÚ get_namespaceàszSymbol.get_namespace)r+r,r-r!r6r<rnrorprqrrrdrsrtrurvryrrrrr©s            Ú__main__rfÚexec),Ú__doc__rrrrrrrrr r r r r rrrÚ__all__rrrÚobjectrrrrr+ÚosÚsysÚopenÚargvÚfÚreadÚsrcÚpathÚsplitÚmodrJrPrNÚinfoÚprintrrrurrrrÚs& ^   Q& @ )