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(RRR(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(RvRwRxRcR)RaRUR5RRRCRt CO_VARARGSRRtCO_VARKEYWORDSR,t com_fpdefRRjRR(R,RaRURcRxRvRwR((RRusB (    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 *cCsT|d}|i|dd}t|djo|dfSn||ddfS(Niii(RUR,RtdotR)R(R,RUR((Rtcom_dotted_as_nameMs cCsa|d}|i|dg}x:tdt|dD] }|i|i||q9W|S(Niii(RUR,RRvRR)RcR(R,RURcRv((RRWs cCsM|d}t|djo|dddfSn|dd|ddfS(Niii(RUR)R(R,RU((Rtcom_import_as_name_s cCsa|d}|i|dg}x:tdt|dD] }|i|i||q9W|S(Niii(RUR,RRvRR)RcR(R,RURcRv((RRis cCsGg}x:tdt|dD] }|i|i||qW|S(Nii(R}RR)RURcRR,Rj(R,RURcR}((RR~qs 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|dS(Ni(RU(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 SubscriptRlt 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_typesR%RRRjtprimaryRRctchR5RRtcom_assign_trailerR7R R9R tcom_assign_listRCtcom_assign_name(R,RUR(R+RcR*R((RRsP 0          cCs\g}x=tdt|dD]#}|i|i|||qWt |dt |S(NiiR$( tassignsRR)RURcRR,RR(tAssTupleR#(R,RUR(R/Rc((RR's !cCsg}xtdt|dD]g}|dt|jo-||ddtijo tdqin|i|i |||qWt |dt |S(Niiis"can't assign to list comprehensionR$(R/RR)RURcR.tlist_forR%RR,RR(tAssListR#(R,RUR(R/Rc((RR-s !cCst|d|d|dS(NiR$i(tAssNameRUR((R,RUR(((RR.scCs|dd}|tijo|i||d|Sn|tijo|i ||d|Sn|ti jo t dnt d|dS(Niiiscan't assign to function callsunknown trailer type: %s( RURR5tDOTR,tcom_assign_attrR*R(R9tcom_subscriptlistR7R%(R,R*RUR(R((RR,s cCst||d|d|dS(NiR$i(tAssAttrR*RUR((R,R*RUR(((RR5scCst|}|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,R8RaRcR0RRV((RRs    $cCs>|i||d}t|to|Snt|gS(Ni(R,RRURR Rh(R,RUR((RR^s cCsN|i||d}t|to|i|in|i |dS(Ni( R,RRURR RhRdtextendRR(R,RdRUR((RRfs R1cCsg}xtdt|D]s}||dtijo|i|d||Sn ||dt i joqn|i |i ||qWt |d|diS(NiiR$(tvaluesRR)RaRcR.R1R,tcom_list_comprehensionR5RRRjR R$(R,RaRcR:((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 ListCompIftnewiftifsR%tListCompRQ( R,RQRURR@RR$RCR>RR((RR;s.     cCs|dS(Ni(RU(R,RU((RRA<scCsMg}x:tdt|dD] }|i|i||qWt|S(Nii( R:RR)RaRcRR,RjR (R,RaRcR:((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( NiiR<iR$iR=is.unexpected generator expression element: %s %di(RUR$R>RR,RRRRjtgenNodet GenExprForR@RR)Rt com_gen_iterRt GenExprIfRCRDR%tTruet is_outmosttGenExprt GenExprInnerRQ( R,RQRURFR@RR$RCR>RR((RRGs0       cCs|dS(Ni(RU(R,RU((RRHiscCsdg}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,Rot primaryNodeR4tcom_select_memberR9R6tOP_APPLYR%(R,RNRaR((RRuscCs<|dtijo tdnt||dd|dS(Nismember must be a nameiR$i(RaR5RCR%RlRN(R,RNRa((RROs 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(RaR5R tCallFuncRNR#R%tkwR)t len_nodelistRRcRURRR,t com_argumentRR RLR.RR%RRRt star_nodet dstar_nodettokR+Rj( R,RNRaR+RRWRUR%RSRVRcRRRU((RRosD  (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,RjRRRRR%RRVR5RCtKeywordRU(R,RaRRRURVRR((RRTs +  'cCst|djo|d}|ddtijp+t|djo-|ddtijo/|ddtijo|i|||Sqng}x:t dt|dD] }|i|i||qWt|||dt|S(NiiiiR$(R)RatsubR5R|R.RR,t com_sliceR*R(t subscriptsRRcRt com_subscriptR$R#(R,R*RaR(R[RYRc((RR6s [ cCs|d}|d}|tijo#|ddtijo tSn|tijpt|djo|i |Sn|i |S(Niii( RUR+RR5R4tEllipsisR|R)R,t com_sliceobjRj(R,RUR+R((RR\s  ( #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$(R0RUR5R|RRRRcR,RjR)R.RRtjR+tSliceobjR#(R,RUR+RcR0R_((RR^s"  + cCsd}}t|djoF|ddtijo|i|d}q|i|d}n>t|djo*|i|d}|i|d}nt ||||dt |S(NiiiiiR$( RtlowertupperR)RUR5R|R,RjR#R*R(R#(R,R*RUR(RbRa((RRZs 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`RYRRYRR5RAtsRRRt small_stmtt _doc_nodes(R,RURVRYRcR((RR`s<  0 (zRRt__doc__RGRNRRRTRMRXRYRZRmRpRsR\R[R]RRdt flow_stmtt compound_stmtRRRtRRRRRRRRRRRRRRRRRRRRRRRRRRRORt testlist_safet testlist1R&RRRRRRQRRRRRRRRR8R:R<R>R@RRBRDRt_callersRjR4RuRRRRRRRR~RRRRRR'R-R.R,R5RR^RfRR.R R;RARRHRRRORoRTR6R\R^RZRR`(((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((RRss(RRft compiler.astRKR.R5tsyst StandardErrorRtconstsRRRRRPR R RR#R+RRRRiRRRRRQRRRRRRRRetLESStGREATERtEQEQUALRt LESSEQUALt GREATEREQUALtNOTEQUALRR\R]RRdRgRRhRRRRRRRRRRRRRRRROR&Rt_legal_node_typesRRRR)RnRpR/R0Rtvttok_nameRs(RR)RKR~R RnRPR+RRRRR.RpRRuRR RRsRR#R5RRe((Rt? sB      `Z +H