Ñò -!Lc@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((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pytparseMst 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((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt to_sourceRs  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(s2/usr/lib/python2.6/site-packages/mako/_ast_util.pys ns s[%s]c3sx|]}ˆ|ƒVqWdS(N((R!tx(R$(s2/usr/lib/python2.6/site-packages/mako/_ast_util.pys qs (t isinstancetASTt __class__t__name__Rt iter_fieldstlisttrepr(R(R$(s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyR$ks "sexpected AST, got %r(R&R't TypeErrorR(R)(R((R$s2/usr/lib/python2.6/site-packages/mako/_ast_util.pytdumpfscCsbx[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((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt copy_locationxs  !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(s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyR;s     ii((R((R;s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyR*¬s cCstt|ƒƒS(s%Like `iter_fiels` but returns a dict.(tdictR*(R((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyR9½s  cCstt|ƒƒS(s+Like `iter_child_nodes` but returns a list.(R+R9(R((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt get_visitorscCs4|i|ƒ}|dj o ||ƒS|i|ƒS(s Visit a node.N(RaR^t generic_visit(R_Rtf((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyR s  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((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyRbs (R)t __module__t__doc__RaRRb(((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyRbBs,      (R)ReRfRb(((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyRgs!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((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt__init__as   cCsj|ioL|io|iid|iƒn|ii|i|iƒd|_n|ii|ƒdS(Ns i(RmRRhRRl(R_R%((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pytwritegs    icCst|i|ƒ|_dS(N(tmaxRm(R_R?((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pytnewlineoscCsIt|_|id7_x|D]}|i|ƒqW|id8_dS(Ni(tTruetnew_lineRlR(R_t statementststmt((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyRSrs  cCsI|i|iƒ|io+|iƒ|idƒ|i|iƒndS(Nselse:(RStorelseRqRo(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt body_or_elseys    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(s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt write_comma‚st=Rs**( R^tlentargstdefaultsR=RRotvarargtkwarg(R_RRytpaddingtargtdefault((RxR_s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt signature€s #    cCs<x5|iD]*}|iƒ|idƒ|i|ƒq WdS(Nt@(tdecorator_listRqRoR(R_Rt decorator((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pytvisit_ImportFrom­s ! cCs<|iƒx+|iD] }|idƒ|i|ƒqWdS(Nsimport (RqR”RoR(R_RRG((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_Importµs    cCs|iƒ|i|ƒdS(N(RqRb(R_R((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-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(s2/usr/lib/python2.6/site-packages/mako/_ast_util.pytparen_or_commaÊs R?isclass %stkeywordsRzRs**s):t:(RqR‡RoRFtbasesRR2RœRRdtstarargsR^tkwargsRS(R_RR›tbasetkeyword((RšR_s2/usr/lib/python2.6/site-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_((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_Forÿs    cCsE|iƒ|idƒ|i|iƒ|idƒ|i|ƒdS(Nswhile R(RqRoRR¤Rw(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_Whiles    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((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_Withs    cCs|iƒ|idƒdS(Ntpass(RqRo(R_R((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_Prints        cCs]|iƒ|idƒx?t|ƒD]1\}}|o|idƒn|i|ƒq$WdS(Nsdel s, (RqRoRˆR(R_RRŠR‹((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_Delete.s   cCsL|iƒ|idƒ|i|iƒx|iD]}|i|ƒq1WdS(Nstry:(RqRoRSthandlersR(R_Rthandler((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pytvisit_TryExcept6s    cCsR|iƒ|idƒ|i|iƒ|iƒ|idƒ|i|iƒdS(Nstry:sfinally:(RqRoRSt finalbody(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pytvisit_TryFinally=s     cCs+|iƒ|iddi|iƒƒdS(Nsglobal s, (RqRoRR”(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_GlobalEs cCs+|iƒ|iddi|iƒƒdS(Ns nonlocal s, (RqRoRR”(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pytvisit_NonlocalIs cCs+|iƒ|idƒ|i|iƒdS(Nsreturn (RqRoRRd(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_ReturnMs  cCs|iƒ|idƒdS(Ntbreak(RqRo(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_BreakRs cCs|iƒ|idƒdS(Ntcontinue(RqRo(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pytvisit_ContinueVs 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((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_RaiseZs         cCs(|i|iƒ|id|iƒdS(NR‘(RRdRoR7(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pytvisit_Attributeoscsg‰‡‡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(s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyRyusR™RzRs**t)( RtfuncRoR|RœRRdRŸR^R (R_RRyRR¢((RxR_s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_Callss,     cCs|i|iƒdS(N(Rotid(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_NameŽscCs|it|iƒƒdS(N(RoR,RU(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_Str‘scCs|it|iƒƒdS(N(RoR,RU(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_Bytes”scCs|it|iƒƒdS(N(RoR,R?(R_R((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-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(s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyR¤s  ((RÕRÔR((RÔRÕs2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-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Ô((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_UnaryOpÒs   cCs>|i|iƒ|idƒ|i|iƒ|idƒdS(NR×RØ(RRdRotslice(R_R((s2/usr/lib/python2.6/site-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((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_Sliceás  &cCsCx<|iD]1\}}|o|idƒn|i|ƒq WdS(Ns, (tdimsRoR(R_RRŠRG((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pytvisit_ExtSliceìs  cCs!|idƒ|i|iƒdS(Nsyield (RoRRd(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_Yieldòs cCs>|idƒ|i|iƒ|idƒ|i|iƒdS(Nslambda s: (RoRƒR|RRS(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_Lambdaös  cCs|idƒdS(NtEllipsis(Ro(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pytvisit_Ellipsisüscs‡‡fd†}|S(NcsO|iˆƒ|i|iƒx|iD]}|i|ƒq'W|iˆƒdS(N(RoRteltt generators(R_Rt comprehension(RÔRÕ(s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyRs   ((RÕRÔR((RÔRÕs2/usr/lib/python2.6/site-packages/mako/_ast_util.pytgenerator_visitÿsR™RÊcCsl|idƒ|i|iƒ|idƒ|i|iƒx|iD]}|i|ƒqDW|idƒdS(NRÙs: RÚ(RoRRÜRdRö(R_RR÷((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pytvisit_DictComp s   cCsN|i|iƒ|idƒ|i|iƒ|idƒ|i|iƒdS(Ns if s else (RRSRoR¤Rv(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_IfExps   cCs!|idƒ|i|iƒdS(NR(RoRRd(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_Starreds cCs.|idƒ|i|iƒ|idƒdS(Nt`(RoRRd(R_R((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyt visit_Repr!s cCs<|i|iƒ|idj o|id|iƒndS(Ns as (RoRFtasnameR^(R_R((s2/usr/lib/python2.6/site-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_((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pytvisit_comprehension.s     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((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pytvisit_excepthandler8s     (@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(((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pyRZs€            "                                  Ns (4Rft_asttAndtOrRßtAddtSubtMulttDivtFloorDivtModtLShifttRShifttBitOrtBitAndtBitXorRtEqtGttGtEtIntIstIsNottLttLtEtNotEqtNotInRãtInverttNottUAddtUSubRåt ALL_SYMBOLStupdateRR R.R8R<R@R*RER9RHRORVR>tobjectR\RgR(((s2/usr/lib/python2.6/site-packages/mako/_ast_util.pytsj               ,;