Ñò žòœMc@sædZddkThde6de6Zh de6de6de6de6d e 6d e 6d e 6d e 6d e 6de6de6Zh de6de6de6de6de6de6de6de6de6de6Zhde6de6de6de6Z hZ!e!i"eƒe!i"eƒe!i"eƒe!i"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.6/vendor-packages/mako/_ast_util.pytparseRst icCs)t|ƒ}|i|ƒdi|iƒ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.6/vendor-packages/mako/_ast_util.pyt to_sourceWs  csC‡fd†‰t|tƒptd|iiƒ‚nˆ|ƒS(sg A very verbose representation of the node passed. This is useful for debugging purposes. cs€t|tƒo4d|iidi‡fd†t|ƒDƒƒfSt|tƒo"ddi‡fd†|DƒƒSt|ƒS(Ns%s(%s)s, c3s/x(|]!\}}d|ˆ|ƒfVqWdS(s%s=%sN((t.0tatb(t_format(s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pys ss s[%s]c3sx|]}ˆ|ƒVqWdS(N((R!tx(R$(s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pys vs (t isinstancetASTt __class__t__name__Rt iter_fieldstlisttrepr(R(R$(s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyR$ps "sexpected AST, got %r(R&R't TypeErrorR(R)(R((R$s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytdumpkscCsbx[dD]S}||ijo=||ijo-t||ƒot||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.6/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|ijo*t|dƒp ||_q:|i}nd|ijo*t|dƒp ||_qt|i}nx$t|ƒD]}ˆ|||ƒqWdS(NR/R0(R1R2R/R0titer_child_nodes(RR/R0tchild(t_fix(s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyR;•s     ii((R((R;s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytfix_missing_locations‰s  icCsTxMt|ft|ƒƒD]3}d|ijot|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.6/vendor-packages/mako/_ast_util.pytincrement_lineno¦sccsgt|dƒ p |i odSx?|iD]4}y|t||ƒfVWq+tj oq+Xq+WdS(sAIterate over all fields of a node, only yielding existing fields.t_fieldsN(R2RAR4tAttributeError(Rtfield((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyR*±s cCstt|ƒƒS(s%Like `iter_fiels` but returns a dict.(tdictR*(R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt get_fields½sccsxxqt|ƒD]c\}}t|tƒo |Vq t|tƒo.x+|D]}t|tƒo |VqIqIWq q WdS(s'Iterate over all child nodes or a node.N(R*R&R'R+(RtnameRCtitem((s4/usr/lib/python2.6/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.6/vendor-packages/mako/_ast_util.pytget_child_nodesÍscCsKt|tƒptd|iiƒ‚nhdt6dt6i|idƒ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.6/vendor-packages/mako/_ast_util.pytget_compile_modeÒs  cCsgt|tttfƒptd|iiƒ‚n|io&t|idtƒo|idi 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.6/vendor-packages/mako/_ast_util.pyt get_docstringßs!ccsVddkl}||gƒ}x0|o(|iƒ}|it|ƒƒ|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.6/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|ii}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.6/vendor-packages/mako/_ast_util.pyt get_visitor scCs4|i|ƒ}|dj o ||ƒS|i|ƒS(s Visit a node.N(RaR^t generic_visit(R_Rtf((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyRs  cCsˆxt|ƒD]s\}}t|tƒo6xT|D]'}t|tƒo|i|ƒq0q0Wq t|tƒo|i|ƒ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.6/vendor-packages/mako/_ast_util.pyRbs (R)t __module__t__doc__RaRRb(((s4/usr/lib/python2.6/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) cCsxt|ƒD] \}}t||dƒ}t|tƒoŠg}xv|D]n}t|tƒoK|i|ƒ}|djoqHq©t|tƒp|i|ƒqHq©n|i|ƒqHW||(q t|tƒoA|i|ƒ}|djot ||ƒqt |||ƒq q W|S(N( R*R4R^R&R+R'RRZtappendtdelattrR3(R_RRCt old_valuet new_valuesRdR5((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyRbGs,      (R)ReRfRb(((s4/usr/lib/python2.6/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.6/vendor-packages/mako/_ast_util.pyt__init__fs   cCsj|ioL|io|iid|iƒn|ii|i|iƒd|_n|ii|ƒdS(Ns i(RmRRhRRl(R_R%((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytwritels    icCst|i|ƒ|_dS(N(tmaxRm(R_R?((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytnewlinetscCsIt|_|id7_x|D]}|i|ƒqW|id8_dS(Ni(tTruetnew_lineRlR(R_t statementststmt((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyRSws  cCsI|i|iƒ|io+|iƒ|idƒ|i|iƒndS(Nselse:(RStorelseRqRo(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt body_or_else~s    csg‰‡‡fd†}dgt|iƒt|iƒ}xft|i||iƒD]K\}}|ƒˆi|ƒ|dj oˆidƒˆi|ƒqUqUW|idj o|ƒˆid|iƒn|idj o|ƒˆid|iƒndS(Ncs)ˆoˆidƒnˆitƒdS(Ns, (RoRhRr((R_t want_comma(s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt write_comma‡st=Rs**( R^tlentargstdefaultsR=RRotvarargtkwarg(R_RRytpaddingtargtdefault((RxR_s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt signature…s #    cCs<x5|iD]*}|iƒ|idƒ|i|ƒq WdS(Nt@(tdecorator_listRqRoR(R_Rt decorator((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt decorators›s    cCsp|iƒxBt|iƒD]1\}}|o|idƒn|i|ƒqW|idƒ|i|iƒdS(Ns, s = (Rqt enumeratettargetsRoRRd(R_Rtidxttarget((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Assign£s   cCsL|iƒ|i|iƒ|itt|iƒdƒ|i|iƒdS(NRz(RqRR‹Rot BINOP_SYMBOLSttypetopRd(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytvisit_AugAssign¬s cCst|iƒ|idd|i|ifƒxBt|iƒD]1\}}|o|idƒn|i|ƒq;WdS(Nsfrom %s%s import t.s, (RqRotleveltmoduleRˆtnames(R_RRŠRG((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytvisit_ImportFrom²s ! cCs<|iƒx+|iD] }|idƒ|i|ƒqWdS(Nsimport (RqR”RoR(R_RRG((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Importºs    cCs|iƒ|i|ƒdS(N(RqRb(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_ExprÀs cCsl|iddƒ|i|ƒ|iƒ|id|iƒ|i|iƒ|idƒ|i|iƒdS(NR?isdef %s(s):(RqR‡RoRFRƒR|RS(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytvisit_FunctionDefÄs   csmg‰‡‡fd†}ˆiddƒˆi|ƒˆiƒˆid|iƒx%|iD]}|ƒˆi|ƒq]Wt|dƒo³x<|iD]1}|ƒˆi|idƒˆi|i ƒq•W|i dj o(|ƒˆidƒˆi|i ƒn|i dj o(|ƒˆidƒˆi|i ƒq>nˆiˆod pd ƒˆi |i ƒdS( Ncs6ˆoˆidƒnˆitƒˆidƒdS(Ns, t((RoRhRr((R_t have_args(s4/usr/lib/python2.6/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.6/vendor-packages/mako/_ast_util.pytvisit_ClassDefÍs4      cCsþ|iƒ|idƒ|i|iƒ|idƒ|i|iƒx³to«|i}t|ƒdjoft|dt ƒoR|d}|iƒ|idƒ|i|iƒ|idƒ|i|iƒqG|iƒ|idƒ|i|ƒPqGWdS(Nsif Riiselif selse:( RqRoRttestRSRrRvR{R&tIf(R_Rtelse_((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytvisit_Ifïs&    '       cCsb|iƒ|idƒ|i|iƒ|idƒ|i|iƒ|idƒ|i|ƒdS(Nsfor s in R(RqRoRR‹titerRw(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Fors    cCsE|iƒ|idƒ|i|iƒ|idƒ|i|ƒdS(Nswhile R(RqRoRR¤Rw(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_While s    cCsy|iƒ|idƒ|i|iƒ|idj o!|idƒ|i|iƒn|idƒ|i|iƒdS(Nswith s as R(RqRoRt context_exprt optional_varsR^RS(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Withs    cCs|iƒ|idƒdS(Ntpass(RqRo(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Passs cCs²|iƒ|idƒt}|idj o'|idƒ|i|iƒt}nx<|iD]1}|o|idƒn|i|ƒt}q^W|ip|idƒndS(Nsprint s >> s, t,( RqRotFalsetdestR^RRrtvaluestnl(R_RRxRd((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Print"s        cCs]|iƒ|idƒx?t|ƒD]1\}}|o|idƒn|i|ƒq$WdS(Nsdel s, (RqRoRˆR(R_RRŠR‹((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Delete3s   cCsL|iƒ|idƒ|i|iƒx|iD]}|i|ƒq1WdS(Nstry:(RqRoRSthandlersR(R_Rthandler((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytvisit_TryExcept;s    cCsR|iƒ|idƒ|i|iƒ|iƒ|idƒ|i|iƒdS(Nstry:sfinally:(RqRoRSt finalbody(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytvisit_TryFinallyBs     cCs+|iƒ|iddi|iƒƒdS(Nsglobal s, (RqRoRR”(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_GlobalJs cCs+|iƒ|iddi|iƒƒdS(Ns nonlocal s, (RqRoRR”(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytvisit_NonlocalNs cCs+|iƒ|idƒ|i|iƒdS(Nsreturn (RqRoRRd(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_ReturnRs  cCs|iƒ|idƒdS(Ntbreak(RqRo(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_BreakWs cCs|iƒ|idƒdS(Ntcontinue(RqRo(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytvisit_Continue[s cCs#|iƒ|idƒt|dƒob|idj oR|idƒ|i|iƒ|idj o!|idƒ|i|iƒqn—t|dƒo†|idj ov|i|iƒ|idj o!|idƒ|i|iƒn|i dj o!|idƒ|i|i ƒqndS(NtraisetexcRs from RŽs, ( RqRoR2RÄR^RtcauseRŽtinstttback(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Raise_s         cCs(|i|iƒ|id|iƒdS(NR‘(RRdRoR7(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytvisit_Attributetscsg‰‡‡fd†}ˆi|iƒˆidƒx%|iD]}|ƒˆi|ƒq?Wx<|iD]1}|ƒˆi|idƒˆi|iƒqgW|idj o(|ƒˆidƒˆi|iƒn|i dj o(|ƒˆidƒˆi|i ƒnˆidƒdS(Ncs)ˆoˆidƒnˆitƒdS(Ns, (RoRhRr((R_Rx(s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyRyzsR™RzRs**t)( RtfuncRoR|RœRRdRŸR^R (R_RRyRR¢((RxR_s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Callxs,     cCs|i|iƒdS(N(Rotid(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Name“scCs|it|iƒƒdS(N(RoR,RU(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Str–scCs|it|iƒƒdS(N(RoR,RU(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Bytes™scCs|it|iƒƒdS(N(RoR,R?(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_NumœscCsw|idƒd}xBt|iƒD]1\}}|o|idƒn|i|ƒq#W|i|odpdƒdS(NR™iÿÿÿÿs, RÊs,)(RoRˆteltsR(R_RRŠRG((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_TupleŸs  cs‡‡fd†}|S(Ncsc|iˆƒxBt|iƒD]1\}}|o|idƒn|i|ƒqW|iˆƒdS(Ns, (RoRˆRÒR(R_RRŠRG(trighttleft(s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyR©s  ((RÕRÔR((RÔRÕs4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytsequence_visit¨st[t]t{t}cCs|idƒxntt|i|iƒƒD]Q\}\}}|o|idƒn|i|ƒ|idƒ|i|ƒq)W|idƒdS(NRÙs, s: RÚ(RoRˆR=tkeysR³R(R_RRŠtkeyRd((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Dict¶s   cCs\|idƒ|i|iƒ|idtt|iƒƒ|i|iƒ|idƒdS(NR™s %s RÊ(RoRRÕRRŽRRÔ(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_BinOpÀs  cCst|idƒxSt|iƒD]B\}}|o"|idtt|iƒƒn|i|ƒqW|idƒdS(NR™s %s RÊ(RoRˆR³tBOOLOP_SYMBOLSRŽRR(R_RRŠRd((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_BoolOpÇs  "cCs||idƒ|i|iƒxKt|i|iƒD]4\}}|idtt|ƒƒ|i|ƒq3W|idƒdS(NR™s %s RÊ(RoRRÕR=topst comparatorst CMPOP_SYMBOLSRŽ(R_RRRÔ((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_CompareÏs  cCsl|idƒtt|iƒ}|i|ƒ|djo|idƒn|i|iƒ|idƒdS(NR™RRRÊ(RotUNARYOP_SYMBOLSRŽRRtoperand(R_RR((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_UnaryOp×s   cCs>|i|iƒ|idƒ|i|iƒ|idƒdS(NR×RØ(RRdRotslice(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytvisit_Subscriptàs cCs´|idj o|i|iƒn|idƒ|idj o|i|iƒn|idj oK|idƒt|itƒo|iidjp|i|iƒq°ndS(NRR^( tlowerR^RRotuppertstepR&tNameRÍ(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Sliceæs  &cCsCx<|iD]1\}}|o|idƒn|i|ƒq WdS(Ns, (tdimsRoR(R_RRŠRG((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytvisit_ExtSliceñs  cCs!|idƒ|i|iƒdS(Nsyield (RoRRd(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Yield÷s cCs>|idƒ|i|iƒ|idƒ|i|iƒdS(Nslambda s: (RoRƒR|RRS(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Lambdaûs  cCs|idƒdS(NtEllipsis(Ro(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytvisit_Ellipsisscs‡‡fd†}|S(NcsO|iˆƒ|i|iƒx|iD]}|i|ƒq'W|iˆƒdS(N(RoRteltt generators(R_Rt comprehension(RÔRÕ(s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyRs   ((RÕRÔR((RÔRÕs4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytgenerator_visitsR™RÊcCsl|idƒ|i|iƒ|idƒ|i|iƒx|iD]}|i|ƒqDW|idƒdS(NRÙs: RÚ(RoRRÜRdRö(R_RR÷((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytvisit_DictComps   cCsN|i|iƒ|idƒ|i|iƒ|idƒ|i|iƒdS(Ns if s else (RRSRoR¤Rv(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_IfExps   cCs!|idƒ|i|iƒdS(NR(RoRRd(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Starred"s cCs.|idƒ|i|iƒ|idƒdS(Nt`(RoRRd(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_Repr&s cCs<|i|iƒ|idj o|id|iƒndS(Ns as (RoRFtasnameR^(R_R((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pyt visit_alias.scCsz|idƒ|i|iƒ|idƒ|i|iƒ|io2x/|iD] }|idƒ|i|ƒqNWndS(Ns for s in s if (RoRR‹R¨tifs(R_Rtif_((s4/usr/lib/python2.6/vendor-packages/mako/_ast_util.pytvisit_comprehension3s     cCsš|iƒ|idƒ|idj oR|idƒ|i|iƒ|idj o!|idƒ|i|iƒqyn|idƒ|i|iƒdS(NtexceptRs as R(RqRoRŽR^RRFRS(R_R((s4/usr/lib/python2.6/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.6/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.6/vendor-packages/mako/_ast_util.pyt sj               ,;