ó žòœMc@sædZddlTide6de6Zi de6de6de6de6d e 6d e 6d e 6d e 6d e 6de6de6Zi de6de6de6de6de6de6de6de6de6de6Zide6de6de6de6Z iZ!e!j"eƒe!j"eƒe!j"eƒe!j"e ƒddd„Z#d5d!„Z$d"„Z%d#„Z&d$„Z'd%d&„Z(d'„Z)d(„Z*d)„Z+d*„Z,d+„Z-d,„Z.d-„Z/d.e0fd/„ƒYZ1d0e1fd1„ƒYZ2d2e1fd3„ƒYZ3d4S(6sH ast ~~~ The `ast` module helps Python applications to process trees of the Python abstract syntax grammar. The abstract syntax itself might change with each Python release; this module helps to find out programmatically what the current grammar looks like and allows modifications of it. An abstract syntax tree can be generated by passing `ast.PyCF_ONLY_AST` as a flag to the `compile()` builtin function or by using the `parse()` function from this module. The result will be a tree of objects whose classes all inherit from `ast.AST`. A modified abstract syntax tree can be compiled into a Python code object using the built-in `compile()` function. Additionally various helper functions are provided that make working with the trees simpler. The main intention of the helper functions and this module in general is to provide an easy to use interface for libraries that work tightly with the python syntax (template engines for example). :copyright: Copyright 2008 by Armin Ronacher. :license: Python License. iÿÿÿÿ(t*tandtort+t-Rt/s//t%s<>t|t&t^s==t>s>=tintissis notttexeccCst|||tƒS(s%Parse an expression into an AST node.(tcompilet PyCF_ONLY_AST(texprtfilenametmode((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytparseRst icCs)t|ƒ}|j|ƒdj|jƒS(sŒ This function can convert a node tree back into python sourcecode. This is useful for debugging purposes, especially if you're dealing with custom asts not generated by python itself. It could be that the sourcecode is evaluable when the AST itself is not compilable / evaluable. The reason for this is that the AST contains some more data than regular sourcecode does, which is dropped during conversion. Each level of indentation is replaced with `indent_with`. Per default this parameter is equal to four spaces as suggested by PEP 8, but it might be adjusted to match the application's styleguide. t(tSourceGeneratortvisittjointresult(tnodet indent_witht generator((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt to_sourceWs  csA‡fd†‰t|tƒs7td|jjƒ‚nˆ|ƒS(sg A very verbose representation of the node passed. This is useful for debugging purposes. cs|t|tƒrBd|jjdj‡fd†t|ƒDƒƒfSt|tƒrrddj‡fd†|DƒƒSt|ƒS(Ns%s(%s)s, c3s+|]!\}}d|ˆ|ƒfVqdS(s%s=%sN((t.0tatb(t_format(s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pys sss[%s]c3s|]}ˆ|ƒVqdS(N((R!tx(R$(s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pys vs(t isinstancetASTt __class__t__name__Rt iter_fieldstlisttrepr(R(R$(s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyR$ps !sexpected AST, got %r(R&R't TypeErrorR(R)(R((R$s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytdumpkscCs^xWdD]O}||jkr||jkrt||ƒrt||t||ƒƒqqW|S(sˆ Copy the source location hint (`lineno` and `col_offset`) from the old to the new node if possible and return the new one. tlinenot col_offset(slinenos col_offset(t _attributesthasattrtsetattrtgetattr(tnew_nodetold_nodetattr((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt copy_location}s   cs#‡fd†‰ˆ|ddƒ|S(sú Some nodes require a line number and the column offset. Without that information the compiler will abort the compilation. Because it can be a dull task to add appropriate line numbers and column offsets when adding new nodes this function can help. It copies the line number and column offset of the parent node to the child nodes without this information. Unlike `copy_location` this works recursive and won't touch nodes that already have a location information. cs—d|jkr6t|dƒs*||_q6|j}nd|jkrlt|dƒs`||_ql|j}nx$t|ƒD]}ˆ|||ƒqyWdS(NR/R0(R1R2R/R0titer_child_nodes(RR/R0tchild(t_fix(s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyR;•s    ii((R((R;s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytfix_missing_locations‰s  icCsRxKt|ft|ƒƒD]1}d|jkrt|ddƒ||_qqWdS(s§ Increment the line numbers of all nodes by `n` if they have line number attributes. This is useful to "move code" to a different location in a file. R/iN(tziptwalkR1R4R/(Rtn((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytincrement_lineno¦sccsbt|dƒ s|j rdSx=|jD]2}y|t||ƒfVWq(tk rYq(Xq(WdS(sAIterate over all fields of a node, only yielding existing fields.t_fieldsN(R2RAR4tAttributeError(Rtfield((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyR*±s cCstt|ƒƒS(s%Like `iter_fiels` but returns a dict.(tdictR*(R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt get_fields½sccsrxkt|ƒD]]\}}t|tƒr0|Vq t|tƒr x(|D]}t|tƒrF|VqFqFWq q WdS(s'Iterate over all child nodes or a node.N(R*R&R'R+(RtnameRCtitem((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyR9Âs cCstt|ƒƒS(s+Like `iter_child_nodes` but returns a list.(R+R9(R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytget_child_nodesÍscCsIt|tƒs(td|jjƒ‚nidt6dt6j|jdƒS(s‘ Get the mode for `compile` of a given node. If the node is not a `mod` node (`Expression`, `Module` etc.) a `TypeError` is thrown. sexpected mod node, got %rtevaltsingleR(R&tmodR-R(R)t Expressiont Interactivetget(R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytget_compile_modeÒs  cCsbt|tttfƒs1td|jjƒ‚n|jr^t|jdtƒr^|jdj SdS(s° Return the docstring for the given node or `None` if no docstring can be found. If the node provided does not accept docstrings a `TypeError` will be raised. s%r can't have docstringsiN( R&t FunctionDeftClassDeftModuleR-R(R)tbodytStrts(R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt get_docstringßsccsTddlm}||gƒ}x.|rO|jƒ}|jt|ƒƒ|Vq"WdS(s¥ Iterate over all nodes. This is useful if you only want to modify nodes in place and don't care about the context or the order the nodes are returned. iÿÿÿÿ(tdequeN(t collectionsRWtpoplefttextendR9(RRWttodo((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyR>ës   t NodeVisitorcBs)eZdZd„Zd„Zd„ZRS(sÖ Walks the abstract syntax tree and call visitor functions for every node found. The visitor functions may return values which will be forwarded by the `visit` method. Per default the visitor functions for the nodes are ``'visit_'`` + class name of the node. So a `TryFinally` node visit function would be `visit_TryFinally`. This behavior can be changed by overriding the `get_visitor` function. If no visitor function exists for a node (return value `None`) the `generic_visit` visitor is used instead. Don't use the `NodeVisitor` if you want to apply changes to nodes during traversing. For this a special visitor exists (`NodeTransformer`) that allows modifications. cCs d|jj}t||dƒS(s³ Return the visitor function for this node or `None` if no visitor exists for this node. In that case the generic visit function is used instead. tvisit_N(R(R)R4tNone(tselfRtmethod((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt get_visitor scCs2|j|ƒ}|dk r%||ƒS|j|ƒS(s Visit a node.N(RaR^t generic_visit(R_Rtf((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyRs  cCs‚x{t|ƒD]m\}}t|tƒr[xO|D]%}t|tƒr/|j|ƒq/q/Wq t|tƒr |j|ƒq q WdS(s9Called if no explicit visitor function exists for a node.N(R*R&R+R'R(R_RRCtvalueRG((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyRbs (R)t __module__t__doc__RaRRb(((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyR\øs tNodeTransformercBseZdZd„ZRS(s Walks the abstract syntax tree and allows modifications of nodes. The `NodeTransformer` will walk the AST and use the return value of the visitor functions to replace or remove the old node. If the return value of the visitor function is `None` the node will be removed from the previous location otherwise it's replaced with the return value. The return value may be the original node in which case no replacement takes place. Here an example transformer that rewrites all `foo` to `data['foo']`:: class RewriteName(NodeTransformer): def visit_Name(self, node): return copy_location(Subscript( value=Name(id='data', ctx=Load()), slice=Index(value=Str(s=node.id)), ctx=node.ctx ), node) Keep in mind that if the node you're operating on has child nodes you must either transform the child nodes yourself or call the generic visit function for the node first. Nodes that were part of a collection of statements (that applies to all statement nodes) may also return a list of nodes rather than just a single node. Usually you use the transformer like this:: node = YourTransformer().visit(node) cCsx t|ƒD]ý\}}t||dƒ}t|tƒr½g}xp|D]h}t|tƒr¢|j|ƒ}|dkr}qGq¢t|tƒs¢|j|ƒqGq¢n|j|ƒqGW||(q t|tƒr |j|ƒ}|dkr÷t ||ƒq t |||ƒq q W|S(N( R*R4R^R&R+R'RRZtappendtdelattrR3(R_RRCt old_valuet new_valuesRdR5((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyRbGs(      (R)ReRfRb(((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyRg$s!RcBsZeZdZd„Zd„Zdd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z!d!„Z"d"„Z#d#„Z$d$„Z%d%„Z&d&„Z'e'd'd(ƒZ(e'd)d*ƒZ)['d+„Z*d,„Z+d-„Z,d.„Z-d/„Z.d0„Z/d1„Z0d2„Z1d3„Z2d4„Z3d5„Z4d6„Z5e5d'd(ƒZ6e5d7d8ƒZ7e5d)d*ƒZ8[5d9„Z9d:„Z:d;„Z;d<„Z<d=„Z=d>„Z>d?„Z?RS(@s¶ This visitor is able to transform a well formed syntax tree into python sourcecode. For more details have a look at the docstring of the `node_to_source` function. cCs(g|_||_d|_d|_dS(Ni(RRt indentationt new_lines(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt__init__fs   cCsf|jrR|jr,|jjd|jƒn|jj|j|jƒd|_n|jj|ƒdS(Ns i(RmRRhRRl(R_R%((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytwritels    icCst|j|ƒ|_dS(N(tmaxRm(R_R?((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytnewlinetscCsIt|_|jd7_x|D]}|j|ƒqW|jd8_dS(Ni(tTruetnew_lineRlR(R_t statementststmt((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyRSws   cCsG|j|jƒ|jrC|jƒ|jdƒ|j|jƒndS(Nselse:(RStorelseRqRo(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt body_or_else~s    csg‰‡‡fd†}dgt|jƒt|jƒ}xdt|j||jƒD]I\}}|ƒˆj|ƒ|dk rUˆjdƒˆj|ƒqUqUW|jdk rÏ|ƒˆjd|jƒn|jdk rü|ƒˆjd|jƒndS(Ncs'ˆrˆjdƒn ˆjtƒdS(Ns, (RoRhRr((R_t want_comma(s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt write_comma‡st=Rs**( R^tlentargstdefaultsR=RRotvarargtkwarg(R_RRytpaddingtargtdefault((R_Rxs4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt signature…s#&   cCs<x5|jD]*}|jƒ|jdƒ|j|ƒq WdS(Nt@(tdecorator_listRqRoR(R_Rt decorator((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt decorators›s  cCsn|jƒx@t|jƒD]/\}}|r<|jdƒn|j|ƒqW|jdƒ|j|jƒdS(Ns, s = (Rqt enumeratettargetsRoRRd(R_Rtidxttarget((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Assign£s  cCsL|jƒ|j|jƒ|jtt|jƒdƒ|j|jƒdS(NRz(RqRR‹Rot BINOP_SYMBOLSttypetopRd(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytvisit_AugAssign¬s cCsr|jƒ|jdd|j|jfƒx@t|jƒD]/\}}|r]|jdƒn|j|ƒq;WdS(Nsfrom %s%s import t.s, (RqRotleveltmoduleRˆtnames(R_RRŠRG((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytvisit_ImportFrom²s  !cCs<|jƒx+|jD] }|jdƒ|j|ƒqWdS(Nsimport (RqR”RoR(R_RRG((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Importºs  cCs|jƒ|j|ƒdS(N(RqRb(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_ExprÀs cCsl|jddƒ|j|ƒ|jƒ|jd|jƒ|j|jƒ|jdƒ|j|jƒdS(NR?isdef %s(s):(RqR‡RoRFRƒR|RS(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytvisit_FunctionDefÄs   cseg‰‡‡fd†}ˆjddƒˆj|ƒˆjƒˆjd|jƒx%|jD]}|ƒˆj|ƒq]Wt|dƒr8x<|jD]1}|ƒˆj|jdƒˆj|j ƒq”W|j dk rÿ|ƒˆjdƒˆj|j ƒn|j dk r8|ƒˆjdƒˆj|j ƒq8nˆjˆrJd pMd ƒˆj |j ƒdS( Ncs4ˆrˆjdƒnˆjtƒˆjdƒdS(Ns, t((RoRhRr((t have_argsR_(s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytparen_or_commaÏs R?isclass %stkeywordsRzRs**s):t:(RqR‡RoRFtbasesRR2RœRRdtstarargsR^tkwargsRS(R_RR›tbasetkeyword((RšR_s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytvisit_ClassDefÍs0    cCsù|jƒ|jdƒ|j|jƒ|jdƒ|j|jƒx®trô|j}t|ƒdkrÌt|dt ƒrÌ|d}|jƒ|jdƒ|j|jƒ|jdƒ|j|jƒqG|jƒ|jdƒ|j|ƒPqGWdS(Nsif Riiselif selse:( RqRoRttestRSRrRvR{R&tIf(R_Rtelse_((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytvisit_Ifïs$     %       cCsb|jƒ|jdƒ|j|jƒ|jdƒ|j|jƒ|jdƒ|j|ƒdS(Nsfor s in R(RqRoRR‹titerRw(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Fors    cCsE|jƒ|jdƒ|j|jƒ|jdƒ|j|ƒdS(Nswhile R(RqRoRR¤Rw(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_While s    cCsw|jƒ|jdƒ|j|jƒ|jdk rV|jdƒ|j|jƒn|jdƒ|j|jƒdS(Nswith s as R(RqRoRt context_exprt optional_varsR^RS(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Withs    cCs|jƒ|jdƒdS(Ntpass(RqRo(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Passs cCs¬|jƒ|jdƒt}|jdk rR|jdƒ|j|jƒt}nx:|jD]/}|rx|jdƒn|j|ƒt}q\W|js¨|jdƒndS(Nsprint s >> s, t,( RqRotFalsetdestR^RRrtvaluestnl(R_RRxRd((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Print"s       cCs[|jƒ|jdƒx=t|ƒD]/\}}|rF|jdƒn|j|ƒq$WdS(Nsdel s, (RqRoRˆR(R_RRŠR‹((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Delete3s   cCsL|jƒ|jdƒ|j|jƒx|jD]}|j|ƒq1WdS(Nstry:(RqRoRSthandlersR(R_Rthandler((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytvisit_TryExcept;s   cCsR|jƒ|jdƒ|j|jƒ|jƒ|jdƒ|j|jƒdS(Nstry:sfinally:(RqRoRSt finalbody(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytvisit_TryFinallyBs     cCs+|jƒ|jddj|jƒƒdS(Nsglobal s, (RqRoRR”(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_GlobalJs cCs+|jƒ|jddj|jƒƒdS(Ns nonlocal s, (RqRoRR”(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytvisit_NonlocalNs cCs+|jƒ|jdƒ|j|jƒdS(Nsreturn (RqRoRRd(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_ReturnRs  cCs|jƒ|jdƒdS(Ntbreak(RqRo(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_BreakWs cCs|jƒ|jdƒdS(Ntcontinue(RqRo(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytvisit_Continue[s cCs|jƒ|jdƒt|dƒr„|jdk r„|jdƒ|j|jƒ|jdk r|jdƒ|j|jƒqnt|dƒr|jdk r|j|jƒ|jdk rá|jdƒ|j|jƒn|j dk r|jdƒ|j|j ƒqndS(NtraisetexcRs from RŽs, ( RqRoR2RÄR^RtcauseRŽtinstttback(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Raise_s       cCs(|j|jƒ|jd|jƒdS(NR‘(RRdRoR7(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytvisit_Attributetscsg‰‡‡fd†}ˆj|jƒˆjdƒx%|jD]}|ƒˆj|ƒq?Wx<|jD]1}|ƒˆj|jdƒˆj|jƒqgW|jdk rÒ|ƒˆjdƒˆj|jƒn|j dk r|ƒˆjdƒˆj|j ƒnˆjdƒdS(Ncs'ˆrˆjdƒn ˆjtƒdS(Ns, (RoRhRr((R_Rx(s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyRyzsR™RzRs**t)( RtfuncRoR|RœRRdRŸR^R (R_RRyRR¢((R_Rxs4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Callxs(   cCs|j|jƒdS(N(Rotid(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Name“scCs|jt|jƒƒdS(N(RoR,RU(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Str–scCs|jt|jƒƒdS(N(RoR,RU(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Bytes™scCs|jt|jƒƒdS(N(RoR,R?(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_NumœscCss|jdƒd}x@t|jƒD]/\}}|rE|jdƒn|j|ƒq#W|j|rhdpkdƒdS(NR™iÿÿÿÿs, RÊs,)(RoRˆteltsR(R_RRŠRG((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_TupleŸs cs‡‡fd†}|S(Ncsa|jˆƒx@t|jƒD]/\}}|r?|jdƒn|j|ƒqW|jˆƒdS(Ns, (RoRˆRÒR(R_RRŠRG(tlefttright(s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyR©s  ((RÔRÕR((RÔRÕs4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytsequence_visit¨st[t]t{t}cCs|jdƒxltt|j|jƒƒD]O\}\}}|rQ|jdƒn|j|ƒ|jdƒ|j|ƒq)W|jdƒdS(NRÙs, s: RÚ(RoRˆR=tkeysR³R(R_RRŠtkeyRd((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Dict¶s .  cCs\|jdƒ|j|jƒ|jdtt|jƒƒ|j|jƒ|jdƒdS(NR™s %s RÊ(RoRRÔRRŽRRÕ(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_BinOpÀs  cCsr|jdƒxQt|jƒD]@\}}|rP|jdtt|jƒƒn|j|ƒqW|jdƒdS(NR™s %s RÊ(RoRˆR³tBOOLOP_SYMBOLSRŽRR(R_RRŠRd((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_BoolOpÇs  !cCs||jdƒ|j|jƒxKt|j|jƒD]4\}}|jdtt|ƒƒ|j|ƒq3W|jdƒdS(NR™s %s RÊ(RoRRÔR=topst comparatorst CMPOP_SYMBOLSRŽ(R_RRRÕ((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_CompareÏs  "cCsj|jdƒtt|jƒ}|j|ƒ|dkrI|jdƒn|j|jƒ|jdƒdS(NR™RRRÊ(RotUNARYOP_SYMBOLSRŽRRtoperand(R_RR((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_UnaryOp×s   cCs>|j|jƒ|jdƒ|j|jƒ|jdƒdS(NR×RØ(RRdRotslice(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytvisit_Subscriptàs cCs«|jdk r"|j|jƒn|jdƒ|jdk rQ|j|jƒn|jdk r§|jdƒt|jtƒoŽ|jjdks§|j|jƒq§ndS(NRR^( tlowerR^RRotuppertstepR&tNameRÍ(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Sliceæs  $cCsAx:|jD]/\}}|r,|jdƒn|j|ƒq WdS(Ns, (tdimsRoR(R_RRŠRG((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytvisit_ExtSliceñscCs!|jdƒ|j|jƒdS(Nsyield (RoRRd(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Yield÷s cCs>|jdƒ|j|jƒ|jdƒ|j|jƒdS(Nslambda s: (RoRƒR|RRS(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Lambdaûs  cCs|jdƒdS(NtEllipsis(Ro(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytvisit_Ellipsisscs‡‡fd†}|S(NcsO|jˆƒ|j|jƒx|jD]}|j|ƒq'W|jˆƒdS(N(RoRteltt generators(R_Rt comprehension(RÔRÕ(s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyRs  ((RÔRÕR((RÔRÕs4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytgenerator_visitsR™RÊcCsl|jdƒ|j|jƒ|jdƒ|j|jƒx|jD]}|j|ƒqDW|jdƒdS(NRÙs: RÚ(RoRRÜRdRö(R_RR÷((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytvisit_DictComps  cCsN|j|jƒ|jdƒ|j|jƒ|jdƒ|j|jƒdS(Ns if s else (RRSRoR¤Rv(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_IfExps   cCs!|jdƒ|j|jƒdS(NR(RoRRd(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Starred"s cCs.|jdƒ|j|jƒ|jdƒdS(Nt`(RoRRd(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_Repr&s cCs:|j|jƒ|jdk r6|jd|jƒndS(Ns as (RoRFtasnameR^(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt visit_alias.scCsx|jdƒ|j|jƒ|jdƒ|j|jƒ|jrtx.|jD] }|jdƒ|j|ƒqMWndS(Ns for s in s if (RoRR‹R¨tifs(R_Rtif_((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytvisit_comprehension3s    cCs–|jƒ|jdƒ|jdk ru|jdƒ|j|jƒ|jdk ru|jdƒ|j|jƒqun|jdƒ|j|jƒdS(NtexceptRs as R(RqRoRŽR^RRFRS(R_R((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pytvisit_excepthandler=s     (@R)ReRfRnRoRqRSRwRƒR‡RŒRR•R–R—R˜R£R§R©RªR­R¯RµR¶R¹R»R¼R½R¾RÀRÂRÈRÉRÌRÎRÏRÐRÑRÓRÖt visit_Listt visit_SetRÝRÞRàRäRçRéRîRðRñRòRôRøtvisit_ListComptvisit_GeneratorExpt visit_SetCompRùRúRûRýRÿRR(((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyR_s€            "                                  Ns (4Rft_asttAndtOrRßtAddtSubtMulttDivtFloorDivtModtLShifttRShifttBitOrtBitAndtBitXorRtEqtGttGtEtIntIstIsNottLttLtEtNotEqtNotInRãtInverttNottUAddtUSubRåt ALL_SYMBOLStupdateRR R.R8R<R@R*RER9RHRORVR>tobjectR\RgR(((s4/usr/lib/python2.7/vendor-packages/mako/_ast_util.pyt sj               ,;