]C@snddlZddlZddlZddlZddlTddlmZdddddd d d d d dg eZ[ejejej e e e fZ ddZdddddZdddddZddddddddddddd d!d"d#d$d%i Zd&d'Zd(d)Zd*dZd+d,Zddd-d Zejd.d/ZGd0d d eZd1dd2d Zd3d4Zd5d6Zddddddd7d8ZdGddd9dZdHdddddddd:dd;d<Zddd=d>Z eZ!d?d@Z"dAd Z#dBd Z$GdCddZ%dDdEZ&e'dFkrje&dS)IN)*)__all__ code_infodis disassembledistbdiscofindlinestarts findlabels show_codeget_instructions InstructionBytecodec CsAyt||d}Wn$tk r<t||d}YnX|S)Nevalexec)compile SyntaxError)sourcenamecr(/opt/alt/python35/lib64/python3.5/dis.py _try_compiles  rfilecCs|dkrtd|dSt|dr5|j}t|drM|j}t|dre|j}t|dr"t|jj}x|D]\}}t|t rt d|d|yt |d|Wn8t k r }zt d|d|WYdd}~XnXt d|qWnt|drDt |d|nct|ttfrlt|d|n;t|trt|d|nt d t|jdS) Nr__func____code__gi_code__dict__zDisassembly of %s:zSorry:co_codez(don't know how to disassemble %s objects)rhasattrrrrsortedritems isinstance _have_codeprintr TypeErrorrbytes bytearray_disassemble_bytesstr_disassemble_strtype__name__)xrr!rZx1msgrrrr s6     &c Css|dkrSy tj}Wntk r9tdYnXx|jrR|j}q=Wt|jj|jd|dS)Nz no last traceback to disassembler) syslast_tracebackAttributeError RuntimeErrortb_nextrtb_framef_codetb_lasti)tbrrrrrCs    Z OPTIMIZEDZ NEWLOCALSZVARARGSZ VARKEYWORDSZNESTED Z GENERATOR@ZNOFREEZ COROUTINEZITERABLE_COROUTINEcCsg}xktdD]J}d|>}||@r|jtj|t|||N}|sPqW|jt|dj|S)Nr=r8z, )rangeappendCOMPILER_FLAG_NAMESgethexjoin)flagsnamesiflagrrr pretty_flags\s   rKcCst|dr|j}t|dr0|j}t|drH|j}t|trft|d}t|dry|Stdt|j dS)Nrrrz rz(don't know how to disassemble %s objects) rrrrr"r)rr%r+r,)r-rrr_get_code_objectjs   rLcCstt|S)N)_format_code_inforL)r-rrrryscCsg}|jd|j|jd|j|jd|j|jd|j|jd|j|jd|j|jdt|j|j r|jdx(t |j D]}|jd |qW|j r|jd x(t |j D]}|jd |qW|j r[|jd x(t |j D]}|jd |q@W|j r|jd x(t |j D]}|jd |qW|jr|jdx(t |jD]}|jd |qWdj|S)NzName: %szFilename: %szArgument count: %szKw-only arguments: %szNumber of locals: %szStack size: %szFlags: %sz Constants:z%4d: %rzNames:z%4d: %szVariable names:zFree variables:zCell variables: )rBco_name co_filename co_argcountco_kwonlyargcount co_nlocals co_stacksizerKco_flags co_consts enumerateco_names co_varnames co_freevars co_cellvarsrF)colinesZi_cZi_nrrrrM}s:          rMcCstt|d|dS)Nr)r$r)r\rrrrr s _InstructionzBopname opcode arg argval argrepr offset starts_line is_jump_targetc@s"eZdZddddZdS)r FcCs0g}|rM|jdk r<d|}|j||jn|jd||rc|jdn |jd|jr|jdn |jd|jt|jjd|j|jjd|jdk r|jt|jjd |j r|jd |j d dj |j S) Nz%%%dd z-->z z>>z r:()) starts_linerBis_jump_targetreproffsetrjustopnameljustargargreprrFrstrip)self lineno_widthZmark_as_currentZfieldsZ lineno_fmtrrr _disassembles&     zInstruction._disassembleN)r, __module__ __qualname__rqrrrrr s  first_linecCsxt|}|j|j}tt|}|dk rJ||j}nd}t|j|j|j |j |||S)Nr) rLr[rZdictr co_firstlineno_get_instructions_bytesrrYrXrV)r-rtr\ cell_names linestarts line_offsetrrrr s   cCs,|}|dk r||}|t|fS)N)rg)Z const_indexZ const_listargvalrrr_get_const_infos  r|cCs;|}|dk r%||}|}n t|}||fS)N)rg)Z name_indexZ name_listr{rmrrr_get_name_infos     r}c cst|}d}d} xt|D]\} } } |dk rh|j| d}|dk rh||7}| |k} d}d}| dk r| }| tkrt| |\}}n| tkrt| |\}}n| tkr| d| }dt|}n| t kr+t| |\}}ng| t krJt | }|}nH| t krnt| |\}}n$| t krd| d| df}tt| | | ||| || Vq%WdS)Nr_zto z%d positional, %d keyword pairr@)r _unpack_opargsrDZhasconstr|Zhasnamer}hasjrelrgZhaslocalZ hascompareZcmp_opZhasfreeZhasnargsr rj)codevarnamesrH constantscellsryrzlabelsrefreerhoprlrfr{rmrrrrw s@                 rwc CsT|j|j}tt|}t|j||j|j|j||d|dS)Nr) r[rZrur r(rrYrXrV)r\lastirrxryrrrr:srzc Cs|dk } | rdnd} xt||||||d|D]h} | og| jdk og| jdk} | r}td|| j|k} t| j| | d|q@WdS)Nr_rrzr)rwrerhr$rq)rrrrHrrryrrzZ show_linenorpZinstrZnew_source_lineZis_current_instrrrrr(As    r(cCstt|dd|dS)Nzr)rr)rrrrrr*Ssr*ccsd}t|}d}x||kr||}|}|d}d}|tkr||||dd|}d}|d}|tkr|d}|||fVqWdS)Nrr8r@r9i)lenZ HAVE_ARGUMENTZ EXTENDED_ARG)rZ extended_argnrIrrhrlrrrrYs       rcCsg}xt|D]u\}}}|dk rd}|tkrQ|d|}n|tkrc|}|dkr||kr|j|qW|S)Nr8r_r)rrZhasjabsrB)rrrhrrlZlabelrrrr ls     ccst|jddd}t|jddd}d}|j}d}xTt||D]C\}}|r||kr||fV|}||7}||7}q]W||kr||fVdS)Nrr9r8)list co_lnotabrvzip)rZbyte_incrementsZline_incrementsZ lastlinenolinenoaddrZ byte_incrZ line_incrrrrr s     c@sjeZdZddddddZddZdd Zed d Zd d ZddZ dS)rrtNcurrent_offsetcCst||_}|dkr7|j|_d|_n||_||j|_|j|j|_tt ||_ ||_ ||_ dS)Nr) rLcodeobjrvrt _line_offsetr[rZ _cell_namesrur _linestarts_original_objectr)ror-rtrr\rrr__init__s     zBytecode.__init__c Cs=|j}t|j|j|j|j|j|jd|jS)Nrz) rrwrrYrXrVrrr)ror\rrr__iter__s    zBytecode.__iter__cCsdj|jj|jS)Nz{}({!r}))format __class__r,r)rorrr__repr__szBytecode.__repr__cCs2x|jr|j}qW||jjd|jS)Nr)r3r4r5r6)clsr7rrrfrom_tracebacks  zBytecode.from_tracebackcCs t|jS)N)rMr)rorrrinfosz Bytecode.infocCs|j}|jdk r$|j}nd }tj`}t|jd|jd|jd|jd|j d|j d|j d|d ||j SWdQRXdS) Nr8rrHrrryrzrrr) rrioStringIOr(rrYrXrVrrrgetvalue)ror\rhoutputrrrrs     z Bytecode.dis) r,rrrsrrr classmethodrrrrrrrrs    c Csddl}|j}|jdd|jdddd|j}|j}|j}WdQRXt||jjd}t |dS) Nrinfiler+nargs?default-r) argparseArgumentParser add_argumentFileType parse_argsrreadrrr)rparserargsrrrrrr_tests  %  r__main__rr)(r/types collectionsrZopcoderZ _opcodes_all MethodType FunctionTypeCodeTyper staticmethodr+r#rrrrCrKrLrrMr namedtupler^r r r|r}rwrr(r*rrr r rrr,rrrrsb       #       3  .     =