m &UIc(@sBdZdkTdkZdkZdkZdkZdefdYZdkl Z l Z dkl Z l Z l Z dZdd Zd Zd Zd Zd fdYZeieieieieieieieieieieieiei ei!ei"gZ#hei$d<ei%d<ei&d<ei'd<ei(d<ei)d<ei*dei?ei@eiAeiBeieieieieieieiCeieieieieiei ei!ei"eiDg(ZEeFedoeEiGeiHneieieieieieieieieiei ei!g ZIdkJZJhZKx'eiLiMD]\ZNZOeOeKeN AST parseFile(path) -> AST (t*Nt WalkerErrorcBstZRS(N(t__name__t __module__(((t1/data/zmath/lib/python2.4/compiler/transformer.pyR"s(s CO_VARARGSsCO_VARKEYWORDS(s OP_ASSIGNs OP_DELETEsOP_APPLYcCs3t|d}|id}|it|S(NtUs (topentpathtftreadtsrctclosetparse(RR R((Rt parseFile(s texeccCs_|djp |djoti|Sn.|djoti|Sn tddS(NRtsingletevals4compile() arg 3 must be 'exec' or 'eval' or 'single'(tmodet Transformert parsesuitetbuft parseexprt ValueError(RR((RR 2s  cCsg}x|D]}t|do|i|iq t|tdjo|itt|q t|tgjo|it|q |i|q W|S(NtasList(NN( tltnodestitemthasattrtappendRttypetNonettuple(RRR((RR;scCsnt|dtp |dSnxG|dD];}t|to%t|}|dj o|Sqfq+q+WdS(Nii(t isinstancetastRtchildt extractLineNotlinenoR(R!R$R"((RR#Is    cGs{|d}ti|oJyt||dSWqwtj o!t|Gt|G|GHqwXntdt|dS(Niis$Can't find appropriate Node type: %s(targstkindRthas_keyt TypeErrortlenRtstr(R%R&((RtNodeSs  RcBsAtZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZeZeZeZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$d Z%d!Z&d"Z'd#Z(d$Z)d%Z*d&Z+d'Z,d(Z-d)Z.d*Z/d+Z0d,Z1d-Z2d.Z3d/Z4e4Z5e4Z6e4Z7d0Z8d1Z9d2Z:d3Z;d4Z<d5Z=d6Z>d7Z?d8Z@d9ZAd:ZBd;ZCd<ZDd=ZEd>ZFd?ZGd@ZHdAZIdBZJdCZKdDZLdEZMdFZNhZOdGZPdHZQdIZRdJZSdKZTdLZUdMZVdNZWdOZXdPZYdQZZdRZ[dSZ\dTZ]dUZ^dVZ_dWZ`dXZadYZbdZZcd[Zdd\Zed]Zfd^Zgeheid_od`ZjdaZkdbZln dcZjeheiddodeZmdfZnndgZodhZpdiZqdjZrdkZsdlZtdmZudnZvdoZwexdpZyRS(qsUtility object for transforming Python parse trees. Exposes the following methods: tree = transform(ast_tree) tree = parsesuite(text) tree = parseexpr(text) tree = parsefile(fileob | filename) cCsh|_xGtiiD]6\}}t||ot|||i|scCs,t|dd}t|d|ddS(NiiR$i(RRatkR(R,RaR((RR@scCsh|ioP|iddgjot|di|i}ntd|i|fSn t|SdS(Nsutf-8s iso-8859-1s# coding: %s %s(R,RFtunicodetlittencodeR(R,R((Rtdecode_literals  cCsFd}x%|D]}||i|d7}q Wt|d|ddS(NRRiR$ii(RRaRUR,RR(R,RaRUR((RRBs cCs t|ddd|ddS(NiiR$i(tNameRa(R,Ra((RRDscCs|i|dS(Ni(R,R-RU(R,RU((RRscCs|i|d|dS(Nii(R,R-RU(R,RU((RRjscGsttdS(N(R~RR(R,R%((RR4scCsg}g}d}d}x|t|jo||}|dtijp|dti jo|dtijoO||d}|dti jo)|i |d|t B}|d}qn|t|jo\||d}|ti jo||d}ntd||i |d|tB}nPn|i |i||d}|t|joPn||dtijo,|i |i||d|d}n%t|o|i tdn|d}qW|||fS(Niiisunexpected token: %si(RzR{R|RcR)RaRUR5RR RCRt CO_VARARGSRRtCO_VARKEYWORDSR,t com_fpdefRRjRR(R,RaRURcR|RzR{R((RRysB (    cCs9|ddtijo|i|dSn|ddS(Niii(RUR5R7R,t com_fplist(R,RU((RR6scCsut|djo|i|dSng}x:tdt|dD] }|i|i||qGWt|S(Nii( R)RUR,RRJRRcRR(R,RURcRJ((RR<scCs_d}xN|D]F}t|tfjo'|ddjo||dd}q q W|d S(NRRiit.i(R2RURVR(R,RUR2RV((RREs *cCs|dtijpt|d}|i|dd}t|djo|dfSn|dddjpt|ddt i jpt||ddfS(Niitasi( RUR.tdotted_as_nameRlR,RtdotR)RR5RC(R,RUR#((Rtcom_dotted_as_nameMs cCs||dtijpt|d}|i|dg}x:tdt|dD] }|i |i||qTW|S(Niii( RUR.tdotted_as_namesRlR,R$RzRR)RcR(R,RURcRz((RRWs cCs|dtijpt|d}|ddtijptt|djo|dddfSn|dddjp t||ddtijpt|dd|ddfS(NiiR!i(RUR.timport_as_nameRlR5RCR)R(R,RU((Rtcom_import_as_name_s cCs||dtijpt|d}|i|dg}x:tdt|dD] }|i |i||qTW|S(Niii( RUR.timport_as_namesRlR,R'RzRR)RcR(R,RURcRz((RRis cCsGg}x:tdt|dD] }|i|i||qW|S(Nii(RRR)RURcRR,Rj(R,RURcR((RRqs cCs5t|i|d|i|dd|ddS(NiiR$i(t TryFinallyR,RjRa(R,Ra((RRwsc CsL|i|d}g}d}xtdt|dD]}||}|dt i jot|djoJ|i|d}t|djo|i|dt}qd}n d}}|i|||i||dfn|dtijo|i||d}q8q8Wt|i|d||d|ddS(NiiiiR$(R,RjRaRtclausesRRRR)RcRUR.RRRRRRR5RCt TryExcept( R,RaRURcRRRRR*((RR}s$   +cCs#|dtijpt|dS(Nii(RUR.t augassignRl(R,RU((RRscCsJ|i|}|ittttfjo|Snt d|ii dS(sReturn node suitable for lvalue of augmented assignment Names, slices, and attributes are the only allowable nodes. scan't assign to %sN( R,RjRURt __class__RtSlicet SubscriptRnt SyntaxErrorR(R,RUR((RRs cCsx~|d}|tijp |tijp|tijo5t|djo|i||Sn|d}q|t jo.t|djo t dn|d}q|ti jo|ddti jo t dnt|djo|i|d}x^tdt|dD]C}||}|dtijo t dn|i||}q"W|i||d|Sn|d}q|ti jo|dd}|tijo/|d}|dtijo t dqoq||tijo?|d}|dtijo t dn|i||Sq||tijo|i|d|Sq|t dqt d qWdS( Niiiscan't assign to operatoriscan't assign to ()scan't assign to []scan't assign to literalsbad assignment(RURR.texprlistRRR)R,tcom_assign_tuplet assigningt _assign_typesR0R R RjtprimaryRRctchR5R R tcom_assign_trailerR7RR9Rtcom_assign_listRCtcom_assign_name(R,RUR3R6RcR5R((RRsP 0          cCs\g}x=tdt|dD]#}|i|i|||qWt |dt |S(NiiR$( tassignsRR)RURcRR,RR3tAssTupleR#(R,RUR3R:Rc((RR2s !cCsg}xtdt|dD]}|dt|jo[||ddtijo tdn||ddti jpt ||dn|i |i |||qWt|dt|S(Niiis"can't assign to list comprehensionR$(R:RR)RURcR.tlist_forR0R5RRlRR,RR3tAssListR#(R,RUR3R:Rc((RR8s 2!cCst|d|d|dS(NiR$i(tAssNameRUR3(R,RUR3((RR9scCs|dd}|tijo|i||d|Sn|tijo|i ||d|Sn|ti jo t dnt d|dS(Niiiscan't assign to function callsunknown trailer type: %s( RURR5RmR,tcom_assign_attrR5R3R9tcom_subscriptlistR7R0(R,R5RUR3R((RR7s cCst||d|d|dS(NiR$i(tAssAttrR5RUR3(R,R5RUR3((RR?scCst|}|djo%|d}|i||dSng}xDtd|dD]0}||}|i |i||dqWW||dt |S(s=Compile 'NODE (OP NODE)*' into (type, [ node1, ..., nodeN ]).iiiR$N( R)RaRRVR,RR0RRcRt constructorR#(R,RBRaRcR0RRV((RRs    $cCsR|i||d}|dj ptt|to|Snt|gS(Ni(R,RRURRRlR Rh(R,RUR((RR^s cCsb|i||d}|dj ptt|to|i |i n|i |dS(Ni( R,RRURRRlR RhRdtextendRR(R,RdRUR((RRfs R<cCsg}xtdt|D]}||dtijo:t||djpt|i |d||Sn ||dt i joqn|i |i ||qWt|d|diS(NiiR$(tvaluesRR)RaRcR.R<RlR,tcom_list_comprehensionR5RRRjRR$(R,RaRcRD((RR s c Cso|dd}g}xE|o=|dd} | djo|i|dt} |i|d}t | |g}|dd|_|i |t |djo d}qW|i|d}q| djoq|i|d}t|d|dd}|ii |t |djo d}qW|i|d}qtd ||fqWt||d|S( NiitforiitifR$is,unexpected list comprehension element: %s %d(RUR$tforsRR,RRRRjRt ListCompFortnewforRR)Rt com_list_iterRt ListCompIftnewiftifsR0tListCompRQ( R,RQRURRJRR$RMRHRR((RREs.     cCs#|dtijpt|dS(Nii(RUR.t list_iterRl(R,RU((RRK<scCsMg}x:tdt|dD] }|i|i||qWt|S(Nii( RDRR)RaRcRR,RjR(R,RaRcRD((RR@s Rc Cs|dd}g}xB|o:|dd} | djo|i|dt} |i|d}t | |gd|dd}|i |t |djo d}qT|i|d}q| djoq|i|d}t|d|dd}|ii |t |djo d}qT|i|d}qtd ||fqWt|d _tt||d|S( NiiRFiR$iRGis.unexpected generator expression element: %s %di(RUR$RHRR,RRRRjtgenNodet GenExprForRJRR)Rt com_gen_iterRt GenExprIfRMRNR0tTruet is_outmosttGenExprt GenExprInnerRQ( R,RQRURQRJRR$RMRHRR((RRGs0       cCs#|dtijpt|dS(Nii(RUR.tgen_iterRl(R,RU((RRSiscCsdg}xQtdt|dD]7}|i|i|||i||dfqWt|S(Niii( R0RR)RaRcRR,RjR(R,RaRcR0((RRms 5cCs|dd}|tijo|i||dSn|tijo|i||dSn|ti jo|i ||dt Snt d|dS(Niiisunknown node type: %s( RaRR5R7R,Rst primaryNodeRmtcom_select_memberR9R@tOP_APPLYR0(R,RZRaR((RR uscCs<|dtijo tdnt||dd|dS(Nismember must be a nameiR$i(RaR5RCR0RnRZ(R,RZRa((RR[s c CsC|dtijot|gdt|Sng}d} t|}xt d|dD]} || }|dti jp|dtijoPn|i|| \} }|djoHt|to8t|djo%|ddtijo tdn|i|q\W| d} | |jo&|| dtijo| d} nd} } x| |jo|| }|| d}| d} |dti jo-| dj o tdn|i|} qa|dtijo-| dj o tdn|i|} qatd |qaWt||| | dt|S( NiR$iiis&generator expression needs parenthesiss$already have the varargs indentifiers#already have the kwargs indentifiersunknown node type: %s(RaR5RtCallFuncRZR#R%tkwR)t len_nodelistRRcRURR R,t com_argumentRR RWR.RR0RRRt star_nodet dstar_nodettokR6Rj( R,RZRaR6RRcRUR%R_RbRcR^Ra((RRssD  (H  %        cCsDt|djoI|ddtijo1|i|d}d|i||dfSnt|djo/|o t dnd|i|dfSn|i|d}|d}x6t|djo"|dt i jo|d}qW|dt i jot d|dnt|d|d|d}d|fS(Niiiis!non-keyword arg after keyword args#keyword can't be an expression (%s)R$(R)RaR.RR,RjRRR^R0RRVR5RCtKeywordRU(R,RaR^RURVRR((RR`s +  'cCst|djo|d}|ddtijp+t|djo-|ddtijo/|ddtijo|i|||Sqng}x:t dt|dD] }|i|i||qWt|||dt|S(NiiiiR$(R)RatsubR5RR.RR,t com_sliceR5R3t subscriptsRRcRt com_subscriptR/R#(R,R5RaR3RgReRc((RR@s [ cCs|d}|d}|tijo#|ddtijo tSn|tijpt|djo|i |Sn|i |S(Niii( RUR6RR5RmtEllipsisRR)R,t com_sliceobjRj(R,RUR6R((RRhs  ( #cCsEg}|ddtijo|itdd}n!|i|i |dd}|t |jo@||dt i jo(|i|i |||d}n|itdxkt |t |D]T}||}t |djo|itdq|i|i |dqWt|dt|S(NiiiiR$(R0RUR5RRRRRcR,RjR)R.RRtjR6tSliceobjR#(R,RUR6RcR0Rk((RRjs"  + cCsd}}t|djoF|ddtijo|i|d}q|i|d}n>t|djo*|i|d}|i|d}nt ||||dt |S(NiiiiiR$( RtlowertupperR)RUR5RR,RjR.R5R3R#(R,R5RUR3RnRm((RRfs cCs|djo|d}|d}n|tijoft|djo|i|dSnx3|D]+}|dti jo|i|SqdqdWdSn|ti jo>x3|D]+}|dti jo|i|SqqWdSn|ti joS|ddt i jo3d}x"|D]}|t|d}qW|SndSn|ti jp |tijp|tijo|i|dSn|tjo(t|djo|i|dSndS(NiiRR(RVRRUR.ROR)R,R`ReRRYR R5RAtsRRRt small_stmtt _doc_nodes(R,RURVReRoR((RR`s<  0 (zRRt__doc__RGRNRRRTRMRXRYRZRoRtRwR\R[R]RRpt flow_stmtt compound_stmtRRRxRRRqRRRRRRRRRRRRRRRRRRRRRRRRORt testlist_safet testlist1R1RRRRRRQRRRRRRR R R8R:R<R>R@RRBRDRt_callersRjR4RyRRRR$RR'RRRRRRRR2R8R9R7R?RR^RfRR.RRERKRRSRR R[RsR`R@RhRjRfRR`(((RR_s           !                                    !                4         ,      #   "    +   $ ts==s<=s>=s!=RcCsg}x{|D]s}t|tijo|iti||q t|ti jo|i|q |it |q W|S(N( RRIRRttypestIntTypeRt_namestgett StringTypet debug_tree(RIRR((RRs(RRrt compiler.astRKR.R5tsyst StandardErrorRtconstsRRRRR\R R RR#R+RRRRuRRRRRQRRRRRRR RqtLESStGREATERtEQEQUALRt LESSEQUALt GREATEREQUALtNOTEQUALRR\R]RRpRsRRtRRRRRRRRRRRRRRRROR1R t_legal_node_typesRRRR4RzR|R/R0Rtvttok_nameR(RR4RKRR RzR\R+RRRRR.R|RRRR RRRR#R5RRq((Rt? sB      `Z +H