ž §ÿf–'c@s€dZddlZddlZddlTddlmZddddd d d d geZ[ejejeje fZ d d„Z ddd„Z ddd„Zidd6dd6dd6dd6dd6dd6dd6Zdd „Zd!d„Zd"d#„Zd$d „Zd/d%d„Zd0dddd&d'„Zd(d)„ZeZd*d „Zd+d „Zd,d-„Zed.kr|eƒndS(1u0Disassembler of Python byte code into mnemonics.iN(u*(u__all__u code_infoudisu disassembleudistbudiscoufindlinestartsu findlabelsu show_codec CsAyt||dƒ}Wn$tk r<t||dƒ}YnX|S(ußAttempts to compile the given source, first as an expression and then as a statement if the first approach fails. Utility function to accept strings in functions that otherwise expect code objects uevaluexec(ucompileu SyntaxError(usourceunameuc((u(/opt/alt/python33/lib64/python3.3/dis.pyu _try_compiles  u _try_compilecCsl|dkrtƒdSt|dƒr2|j}nt|dƒrM|j}nt|dƒrõt|jjƒƒ}xô|D]v\}}t|t ƒrxt d|ƒyt |ƒWn2t k rã}zt d|ƒWYdd}~XnXt ƒqxqxWnst|dƒrt |ƒnWt|ttfƒr3t|ƒn5t|tƒrOt|ƒnt dt|ƒjƒ‚dS( unDisassemble classes, methods, functions, or code. With no argument, disassemble the last traceback. Nu__func__u__code__u__dict__uDisassembly of %s:uSorry:uco_codeu(don't know how to disassemble %s objects(uNoneudistbuhasattru__func__u__code__usortedu__dict__uitemsu isinstanceu _have_codeuprintudisu TypeErroru disassembleubytesu bytearrayu_disassemble_bytesustru_disassemble_strutypeu__name__(uxuitemsunameux1umsg((u(/opt/alt/python33/lib64/python3.3/dis.pyudiss2       c Csp|dkrVy tj}Wntk r9tdƒ‚YnXx|jrR|j}q=Wnt|jj|j ƒdS(u2Disassemble a traceback (default: last traceback).u no last traceback to disassembleN( uNoneusysulast_tracebackuAttributeErroru RuntimeErrorutb_nextu disassembleutb_frameuf_codeutb_lasti(utb((u(/opt/alt/python33/lib64/python3.3/dis.pyudistb=s    u OPTIMIZEDiu NEWLOCALSiuVARARGSiu VARKEYWORDSiuNESTEDiu GENERATORi uNOFREEi@cCs‡g}xqtdƒD]P}d|>}||@r|jtj|t|ƒƒƒ||N}|scPqcqqW|jt|ƒƒdj|ƒS(u+Return pretty representation of code flags.i iu, (urangeuappenduCOMPILER_FLAG_NAMESugetuhexujoin(uflagsunamesuiuflag((u(/opt/alt/python33/lib64/python3.3/dis.pyu pretty_flagsTs    u pretty_flagscCst|dƒr|j}nt|dƒr6|j}nt|tƒrWt|dƒ}nt|dƒrpt|ƒStdt|ƒj ƒ‚dS(u1Formatted details of methods, functions, or code.u__func__u__code__u uco_codeu(don't know how to disassemble %s objectsN( uhasattru__func__u__code__u isinstanceustru _try_compileu_format_code_infou TypeErrorutypeu__name__(ux((u(/opt/alt/python33/lib64/python3.3/dis.pyu code_infobs   cCsùg}|jd|jƒ|jd|jƒ|jd|jƒ|jd|jƒ|jd|jƒ|jd|jƒ|jdt|jƒƒ|j rÜ|jdƒx+t |j ƒD]}|jd |ƒq¾Wn|j r |jd ƒx+t |j ƒD]}|jd |ƒqWn|j rd|jd ƒx+t |j ƒD]}|jd |ƒqFWn|j r¨|jd ƒx+t |j ƒD]}|jd |ƒqŠWn|jrì|jdƒx+t |jƒD]}|jd |ƒqÎWndj|ƒS(NuName: %suFilename: %suArgument count: %suKw-only arguments: %suNumber of locals: %suStack size: %suFlags: %su Constants:u%4d: %ruNames:u%4d: %suVariable names:uFree variables:uCell variables:u (uappenduco_nameu co_filenameu co_argcountuco_kwonlyargcountu co_nlocalsu co_stacksizeu pretty_flagsuco_flagsu co_constsu enumerateuco_namesu co_varnamesu co_freevarsu co_cellvarsujoin(ucoulinesui_cui_n((u(/opt/alt/python33/lib64/python3.3/dis.pyu_format_code_infops:          u_format_code_infocCstt|ƒƒdS(u7Print details of methods, functions, or code to stdout.N(uprintu code_info(uco((u(/opt/alt/python33/lib64/python3.3/dis.pyu show_codesc CsB|j}t|ƒ}tt|ƒƒ}t|ƒ}d}d}d}xö||kr=||} ||kr›|dkr€tƒntd||ddƒntdddƒ||krÊtdddƒntdddƒ||krùtdddƒntdddƒtt|ƒjd ƒddƒtt | j d ƒddƒ|d }| t kr3||||d d |} d}|d }| t kr¢| d}ntt| ƒjdƒddƒ| t krõtdt|j| ƒdddƒq3| tkr#td|j| dddƒq3| tkrTtdt|| ƒdddƒq3| tkr‚td|j| dddƒq3| tkr­tdt| dddƒq3| tkr÷|dkrØ|j|j}ntd|| dddƒq3| tkr3td||d ||d fddƒq3ntƒqHWdS(uDisassemble a code object.iu%3duendu u u-->u>>u iiiiiiiu(u)u(to u (%d positional, %d keyword pair)N(uco_codeu findlabelsudictufindlinestartsulenuNoneuprintureprurjustuopnameuljustu HAVE_ARGUMENTu EXTENDED_ARGuhasconstu co_constsuhasnameuco_namesuhasjreluhaslocalu co_varnamesu hascompareucmp_opuhasfreeu co_cellvarsu co_freevarsuhasnargs( ucoulastiucodeulabelsu linestartsunuiu extended_argufreeuopuoparg((u(/opt/alt/python33/lib64/python3.3/dis.pyu disassemble“s`               ( " % "    *c Csµt|ƒ}t|ƒ}d}x||kr°||}||krVtdddƒntdddƒ||kr…tdddƒntdddƒtt|ƒjdƒddƒtt|jd ƒddƒ|d }|tkr¦||||d d } |d }tt| ƒjd ƒddƒ|tkrx|ratdt|| ƒdddƒq£td| ddƒq¦|t krÆ|dk r¯td|| dddƒq£td| ddƒq¦|t kr÷tdt|| ƒdddƒq¦|t kr?|r(td|| dddƒq£td| ddƒq¦|t krjtdt| dddƒq¦|tkr¦td||d ||d fddƒq¦ntƒq!WdS(Niu-->uendu u u>>u iiiiiiu(u)u(%d)u(to u (%d positional, %d keyword pair)(u findlabelsulenuprintureprurjustuopnameuljustu HAVE_ARGUMENTuhasconstuhasnameuNoneuhasjreluhaslocalu hascompareucmp_opuhasnargs( ucodeulastiuvarnamesunamesu constantsulabelsunuiuopuoparg((u(/opt/alt/python33/lib64/python3.3/dis.pyu_disassemble_bytesÆsL         %   %   *u_disassemble_bytescCstt|dƒƒdS(u<Compile the source string, then disassemble the code object.uN(u disassembleu _try_compile(usource((u(/opt/alt/python33/lib64/python3.3/dis.pyu_disassemble_strðsu_disassemble_strcCsÕg}t|ƒ}d}x¶||krÐ||}|d}|tkr||||dd}|d}d}|tkrŠ||}n|tkrŸ|}n|dkrÍ||krÊ|j|ƒqÊqÍqqW|S(u`Detect all offsets in a byte code which are jump targets. Return the list of offsets. iiiiiÿÿÿÿ(ulenu HAVE_ARGUMENTuhasjreluhasjabsuappend(ucodeulabelsunuiuopuopargulabel((u(/opt/alt/python33/lib64/python3.3/dis.pyu findlabelsös$           ccsÈt|jddd…ƒ}t|jddd…ƒ}d}|j}d}xZt||ƒD]I\}}|rœ||kr||fV|}n||7}n||7}q]W||krÄ||fVndS(u”Find the offsets in a byte code which are start of lines in the source. Generate pairs (offset, lineno) as described in Python/compile.c. iNii(ulistu co_lnotabuNoneuco_firstlinenouzip(ucodeubyte_incrementsuline_incrementsu lastlinenoulinenouaddru byte_incru line_incr((u(/opt/alt/python33/lib64/python3.3/dis.pyufindlinestartss      cCsçtjdd…rrtjdd…rFtjjdƒtjdƒntjd}| sf|dkrxd}qxnd}|dkrtj}n t|ƒ}|jƒ}|dk rÁ|j ƒnd}t ||dƒ}t |ƒdS(u*Simple test program to disassemble a file.iNiuusage: python dis.py [-|file] u-uuexec( usysuargvustderruwriteuexituNoneustdinuopenureaducloseucompileudis(ufnufusourceucode((u(/opt/alt/python33/lib64/python3.3/dis.pyu_test%s"        u_testu__main__iÿÿÿÿiÿÿÿÿ(u__doc__usysutypesuopcodeu__all__u _opcodes_allu MethodTypeu FunctionTypeuCodeTypeutypeu _have_codeu _try_compileuNoneudisudistbuCOMPILER_FLAG_NAMESu pretty_flagsu code_infou_format_code_infou show_codeu disassembleu_disassemble_bytesu_disassemble_strudiscou findlabelsufindlinestartsu_testu__name__(((u(/opt/alt/python33/lib64/python3.3/dis.pyusB    !      3 )