o ?Og4N @s ddlZddlZddlZddlZddlTddlmZgdeZ[ejejej e e e fZ edZdedfedfed ffZed Zd Zd d ZdUdddddZdUddddZddddddddddd Zdd Zd!d"Zd#d$Zd%d&Zddd'd(Zed)d*Z d+e j!_"d,e j_"d-e j#_"d.e j$_"d/e j%_"d0e j&_"d1e j'_"d2e j(_"d3Z)d4Z*Gd5d6d6e Z+dd7d8d9Z,d:d;Z-dd?Z/dWdddAdBZ0ddddCdDZ1  dXdddEdFdGZ2dHdIZ3e0Z4dJdKZ5dLdMZ6dNdOZ7GdPdQdQZ8dRdSZ9e:dTkre9dSdS)YN)*)__all__) code_infodis disassembledistbdiscofindlinestarts findlabels show_codeget_instructions InstructionBytecode FORMAT_VALUE)Nstrreprascii MAKE_FUNCTION)defaultsZ kwdefaultsZ annotationsZclosurecCs6 z t||d}W|Styt||d}Y|Sw)Nevalexec)compile SyntaxError)sourcenamecr*/opt/alt/python310/lib64/python3.10/dis.py _try_compiles rfiledepthc Csj |dur t|ddSt|dr|j}t|dr|j}nt|dr&|j}nt|dr/|j}nt|dr7|j}t|drt|j }|D]9\}}t |t r~t d||dz t |||d Wntyx}z t d ||dWYd}~nd}~wwt |dqEdSt|d rt|||d dSt |ttfrt||ddSt |trt|||d dStd t|j) Nr!__func____code__gi_codeag_codecr_code__dict__zDisassembly of %s:r zSorry:co_code(don't know how to disassemble %s objects)rhasattrr$r%r&r'r(sortedr)items isinstance _have_codeprintr TypeError_disassemble_recursivebytes bytearray_disassemble_bytesr_disassemble_strtype__name__)xr!r"r.rZx1msgrrrr+sJ            rr#cCsX |dur ztj}Wn tytddw|jr |j}|jst|jj|j|ddS)Nz no last traceback to disassembler#) syslast_tracebackAttributeError RuntimeErrortb_nextrtb_framef_codetb_lasti)tbr!rrrrXs   rZ OPTIMIZEDZ NEWLOCALSZVARARGSZ VARKEYWORDSZNESTEDZ GENERATORZNOFREEZ COROUTINEZITERABLE_COROUTINEZASYNC_GENERATOR)  @icCsb g}tdD]}d|>}||@r$|t|t|||N}|s$nq|t|d|S)NrJrE, )rangeappendCOMPILER_FLAG_NAMESgethexjoin)flagsnamesiflagrrr pretty_flagsrs  rYcCs t|dr |j}t|dr|j}nt|dr|j}nt|dr$|j}nt|dr,|j}t|tr6t|d}t|dr=|St dt |j ) Nr$r%r&r'r(z r*r+) r,r$r%r&r'r(r/rrr2r8r9r:rrr_get_code_objects$        r[cCs tt|SN)_format_code_infor[rZrrrrs rcCsxg}|d|j|d|j|d|j|d|j|d|j|d|j|d|j|dt|j |j r[|d t |j D] }|d |qQ|j rr|d t |j D] }|d |qh|j r|d t |j D] }|d |q|jr|dt |jD] }|d |q|jr|dt |jD] }|d |qd|S)NzName: %szFilename: %szArgument count: %szPositional-only arguments: %szKw-only arguments: %szNumber of locals: %szStack size: %szFlags: %sz Constants:z%4d: %rzNames:z%4d: %szVariable names:zFree variables:zCell variables: )rPco_name co_filename co_argcountco_posonlyargcountco_kwonlyargcount co_nlocals co_stacksizerYco_flags co_consts enumerateco_names co_varnames co_freevars co_cellvarsrT)colinesZi_cZi_nrrrr]s<      r]cCs tt||ddSNr#)r1r)rmr!rrrr sr _InstructionzBopname opcode arg argval argrepr offset starts_line is_jump_targetz!Human readable name for operationzNumeric code for operationz6Numeric argument to operation (if any), otherwise Nonez4Resolved arg value (if known), otherwise same as argz0Human readable description of operation argumentz1Start index of operation within bytecode sequencez4Line started by this opcode (if any), otherwise Nonez1True if other code jumps to here, otherwise Falsec@seZdZ dddZdS)r FrGcCs g}|r|jdurd|}|||jn|d||r&|dn|d|jr4|dn|d|t|j|||jt|j durj|t|j t |j rj|d|j dd | S) Nz%%%dd z-->z z>>z ()) starts_linerPis_jump_targetroffsetrjustopnameljust _OPNAME_WIDTHarg _OPARG_WIDTHargreprrTrstrip)self lineno_widthZmark_as_current offset_widthZfieldsZ lineno_fmtrrr _disassembles(      zInstruction._disassembleN)rsFrG)r9 __module__ __qualname__rrrrrr s r ) first_linecCsV t|}|j|j}tt|}|dur||j}nd}t|j|j|j |j |||SNr) r[rlrkdictr co_firstlineno_get_instructions_bytesr*rjrirg)r:rrm cell_names linestarts line_offsetrrrr s   r cCs" |}|dur ||}|t|fSr\r)Z const_indexZ const_listargvalrrr_get_const_infos  rcCs2 |}|dur||}|}||fSt|}||fSr\r)Z name_indexZ name_listrrrrr_get_name_info'src #s t|}d}t|D]\} } |dur#|| d}|dur#||7}| |v} d} d} durÈ} | tvr=t|\} } n| tvrIt|\} } nz| tvrXd} dt| } nk| t vrk| dd} dt| } nX| t vrwt|\} } nL| t vrt } | } nA| t vrt|\} } n5| tkrtd@\} } | td@f} | dr| r| d7} | d7} n| tkrdfd d ttD} tt| | | | | || Vq dS) NrrFzto rsrGrErNz with formatc3s$|] \}}d|>@r|VqdS)rENr).0rWsr~rr js z*_get_instructions_bytes..)r _unpack_opargsrRZhasconstrZhasnamerhasjabsrhasjrelZhaslocalZ hascompareZcmp_opZhasfreerFORMAT_VALUE_CONVERTERSboolrrTrhMAKE_FUNCTION_FLAGSr r{)codevarnamesrV constantscellsrrlabelsrwryoprxrrrrrr7s\  rc Cs> |j|j}tt|}t|j||j|j|j|||ddSro) rlrkrr r6r*rjrirg)rmlastir!rrrrrrps     rcCstt||d|dus|dkr6|dur|d}|jD]}t|dr5t|dtd|f|dt|||dqdSdS)Nr#rrEr*zDisassembly of %r:r )rrgr,r1r3)rmr!r"r:rrrr3ws    r3)r!rc Cst|} | rt||} | dkrtt| } nd} nd} t|d} | dkr/tt| } nd} t|||||||dD]%}| oI|jduoI|jdk}|rQt|d|j|k}t| | || |dq)r3r)rkwargsrrrr7sr7ccsjd}tdt|dD]'}||}|tkr(||d|B}|tkr%|d>nd}nd}d}|||fVq dS)NrrFrErH)rOrZ HAVE_ARGUMENTZ EXTENDED_ARG)rZ extended_argrWrr~rrrrsrcCsf g}t|D])\}}}|dur0|tvr|d|d}n |tvr&|d}nq||vr0||q|S)NrF)rrrrP)rrryrr~Zlabelrrrr s  r ccs> d}|D]\}}}|dur||kr|}||fVqdSr\)co_lines)rZlastlinestartendlinerrrr s r c@sJeZdZ dddddZddZddZed d Zd d Zd dZ dS)rN)rcurrent_offsetcCsdt||_}|dur|j|_d|_n ||_||j|_|j|j|_tt ||_ ||_ ||_ dSr) r[codeobjrr _line_offsetrlrk _cell_namesrr _linestarts_original_objectr)rr:rrrmrrr__init__s  zBytecode.__init__c Cs*|j}t|j|j|j|j|j|j|jdS)Nr) rrr*rjrirgrrr)rrmrrr__iter__s zBytecode.__iter__cCsd|jj|jS)Nz{}({!r}))format __class__r9rrrrr__repr__s zBytecode.__repr__cCs& |jr |j}|js||jj|jdS)N)r)r@rArBrC)clsrDrrrfrom_tracebacks zBytecode.from_tracebackcCs t|jSr\)r]rrrrrinfos z Bytecode.infoc Csz |j}|jdur |j}nd}t }t|j|j|j|j|j |j |j ||d | WdS1s6wYdS)Nr)rrVrrrrr!r) rrioStringIOr6r*rjrirgrrrgetvalue)rrmryoutputrrrrs    $z Bytecode.dis) r9rrrrr classmethodrrrrrrrrs   rcCs| ddl}|}|jd|dddd|}|j }|}Wdn1s+wYt||jjd}t |dS)Nrinfilerb?-)r8nargsdefaultr) argparseArgumentParser add_argumentZFileType parse_argsrreadrrr)rparserargsrrrrrr_tests  r__main__r\)NNNNNr)r)rNNNNN);r<types collectionsrZopcoderZ _opcodes_all MethodType FunctionTypeCodeTyper staticmethodr8r0ZopmaprrrrrrrrrrrQrYr[rr]r namedtuplerpr{__doc__r~rrryrwrxr}rr r rrrrr3r6r7rrr r rrr9rrrrs   -  4  9    =