
    "e                         d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZ  G d de      Z G d d	e      Zd&d
Zd Z edd      Zd Zd Zd&dZej:                  dd dk  r G d de      Zd Zd&dZ n;ej:                  dd dk(  r G d de      Zd Zd&dZ nej:                  dd dk\  rd&dZ d dl!Z" G d de"jF                        Z$d Z%d'd Z& e       Z' e       Z( G d! d"e      Z) G d# d$e      Z*d&d%Z+y)(    N)
namedtuple)	pydev_log)
EXTENDED_ARGHAVE_ARGUMENTcmp_op
hascomparehasconsthasfreehasjrelhaslocalhasnameopname)StringIOc                   *    e Zd ZddZd Zd Zd ZeZy)TryExceptInfoc                 f    || _         || _        d| _        d| _        g | _        d| _        d| _        y)z
        :param try_line:
        :param ignore:
            Usually we should ignore any block that's not a try..except
            (this can happen for finally blocks, with statements, etc, for
            which we create temporary entries).
        N)try_lineignoreexcept_lineexcept_end_lineraise_lines_in_exceptexcept_bytecode_offsetexcept_end_bytecode_offset)selfr   r   s      M/usr/lib/python3/dist-packages/_pydevd_bundle/pydevd_collect_bytecode_info.py__init__zTryExceptInfo.__init__   s<     !!%'" ')#*,'    c                 J    | j                   |cxk  xr | j                  k  S c S N)r   r   r   lines     r   is_line_in_try_blockz"TryExceptInfo.is_line_in_try_block!   s"    }}7t'7'77777r   c                 J    | j                   |cxk  xr | j                  k  S c S r    )r   r   r!   s     r   is_line_in_except_blockz%TryExceptInfo.is_line_in_except_block$   s$    4?4+?+?????r   c                 H   dt        | j                        dt        | j                        dt        | j                        g}| j                  r4|j                  ddj                  d | j                  D                     |j                  d       dj                  |      S )	Nz{try:z except z end block z	 raises: , c              3   2   K   | ]  }t        |        y wr    )str).0xs     r   	<genexpr>z(TryExceptInfo.__str__.<locals>.<genexpr>1   s     1]Q#a&1]s   } )r)   r   r   r   r   appendjoin)r   lsts     r   __str__zTryExceptInfo.__str__'   s      !$$%
 %%JJ		1]$B\B\1](]_`

3wws|r   NF)__name__
__module____qualname__r   r#   r%   r2   __repr__ r   r   r   r      s    -$8@ Hr   r   c                       e Zd Zd Zd ZeZy)
ReturnInfoc                     || _         y r    return_line)r   r=   s     r   r   zReturnInfo.__init__;   s
    &r   c                 "    d| j                   dS )Nz	{return: r-   r<   r   s    r   r2   zReturnInfo.__str__>   s    !%!1!133r   N)r4   r5   r6   r   r2   r7   r8   r   r   r:   r:   9   s    '4 Hr   r:   c                     |}|dk\  r'| j                  |      }|||z
  S |s|S |dz  }|dk\  r't        d|d|       )Nr      z Unable to find line for offset: z.Info: )getAssertionError)op_offset_to_line	op_offsetfirstlinenosearchop_offset_originalrets         r   	_get_linerJ   D   sc    "
q.##I.?$$JNI q. -/ 0 0r   c                      y r    r8   )ss    r   debugrM   R   s    r   _InstructionzDopname, opcode, starts_line, argval, is_jump_target, offset, argreprc              #   x  K   | j                   }t        t        j                  |             }t	        t        j
                  |            }t        |      }d}d}d }t        }||k  rQ||   }	t        |	      }
||v }||
   }|}|dz   }|
t        k  r t        ||
t        ||d      d ||d       n t        ||         t        ||dz            dz  z   |z   }d}|dz   }|
t        k(  r|dz  }|
t        v rCt        ||
t        ||d      | j                  |   ||t        | j                  |                nz|
t         v rCt        ||
t        ||d      | j"                  |   ||t%        | j"                  |                n/|
t&        v r0||z   }t        ||
t        ||d      |||dt        |      z          n|
t(        v rBt        ||
t        ||d      | j*                  |   ||t%        | j*                  |                n|
t,        v r-t        ||
t        ||d      t.        |   ||t.        |          nx|
t0        v rI|| j2                  | j4                  z   }t        ||
t        ||d      ||   ||t%        ||                n't        ||
t        ||d      |||t%        |             ||k  rPy y w)Nr   rA   r.         i   zto )co_codedictdisfindlinestartsset
findlabelslenr   ordr   rN   rJ   r   r	   	co_constsreprr   co_namesr)   r   r   co_varnamesr   r   r
   co_cellvarsco_freevars)cocoderD   labelsbytecode_leniextended_argfree
op_to_namecopis_jump_targetcurr_op_nameinitial_bytecode_offsetopargargvals                   r   %_iter_as_bytecode_as_instructions_py2ro   Y   s    ::DS//34%&Ft9L	ALDJ
l
GVf!"~"#E|R;LNegh1ikoq  BY  []  ^  ^ QL3tAE{#3c#99LHELAA\!$u}X~"<Y?PRikl5moqo{o{  }B  pC  ES  Ul  nr  su  s  s  @E  sF  nG  H  Hw"<Y?PRikl5moqozoz  |A  pB  DR  Tk  mp  qs  q|  q|  }B  qC  mD  E  EwU"<Y?PRikl5mou  xF  H_  af  im  nt  iu  au  v  vx"<Y?PRikl5moqo}o}  D  pE  GU  Wn  ps  tv  tB  tB  CH  tI  pJ  K  Kz!"<Y?PRikl5mouv{o|  M  Of  hn  ot  hu  v  vw<>>BNN:D"<Y?PRikl5mostyoz  }K  Md  fi  jn  ot  ju  fv  w  w"<Y?PRikl5mot  wE  G^  `c  di  `j  k  kI l
s   J4J:8J:c              #      K   t         j                  d   dk  rt        |       }nt        j                  |       }t        |      }i }|D ]  }|||j                  <    |r|D ]  }|  y y w)Nr      )sysversion_inforo   rT   Bytecodelistoffset)r`   iter_inbytecode_to_instructioninstructions       r   iter_instructionsrz      s     
Q7;,,r"7mG  B6A 2 23B " 	K	 s   A*A,c                 @   t        | d      st        | d      sg S |r| j                  }nd}g }t        t        j                  |             }t        |       D ]D  }|j                  }|dv s|j                  t        t        ||j                  |d                   F |S )Nco_lines	co_lnotabr   )RETURN_VALUERETURN_CONSTTrG   )hasattrco_firstlinenorS   rT   rU   rz   r   r/   r:   rJ   rv   )r`   use_func_first_linerF   r1   rD   ry   rk   s          r   collect_return_infor      s    2z"72{+C	''
CS//34(, o"));;JJz),={?Q?QS^gk"lmno
 Jr   rQ   )rq   	   c                       e Zd ZddZd Zy)_TargetInfoNc                      || _         || _        y r    except_end_instructionjump_if_not_exc_instructionr   r   r   s      r   r   z_TargetInfo.__init__       *@D'/JD,r   c                    dg}|j                  | j                  j                         | j                  r|j                  d       |j                  | j                  j                         |j                  d       |j                  t	        | j                  j
                               |j                  d       |j                  d       dj                  |      S Nz_TargetInfo(z - ()r.   r/   r   r   r   r)   rn   r0   r   msgs     r   r2   z_TargetInfo.__str__       !"CJJt2299://

5!

4;;BBC

3

3t??FFGH

3JJsO773<r   r    r4   r5   r6   r   r2   r8   r   r   r   r          	K
	 r   r   c                 V   | ||dz    D cg c]  }|j                    }}|g dk(  r	 | |dz
     }|j                   dvry 	 j                   dk(  rS| ||j                        }||j                     }t        | d |       D ]   }|j                   dk(  s|}t	        |      c S  y ||j                     }		 | |	dz
     }t	        |      S |r|d   d	k(  r| |dz   d  }
t        |
      D ]  \  }}|j                   d
k(  r | ||j                        }t	        ||      c S |j                   dk(  sE|j                  dk(  sU	 |
|dz      }|j                   dk(  sn| ||j                        }t	        ||      c S  y y c c}w # t        $ r Y Dw xY w#  t        j                  d       Y y xY w#  Y xY w)Nrq   POP_TOPr   r   rA   JUMP_FORWARDJUMP_ABSOLUTEr   
POP_EXCEPTz+Error when computing try..except block end.r   DUP_TOPJUMP_IF_NOT_EXC_MATCH
COMPARE_OPzexception matchPOP_JUMP_IF_FALSE)r   
IndexErrorrn   reversedr   r   critical	enumerate)instructionsexception_end_instruction_indexoffset_to_instruction_idxj_instructionnext_3jump_instructionr   idxpop_except_instructionrd   rw   jr   next_instructions                 r   _get_except_target_infor      sT   <HIh  jI  LM  jM  =N  O=-&&  O  O66#/0ORS0S#T #**2SS T
  &&/9
 *66OP`PgPg6h)i&/0F0M0MN.6|DS7I.J  *-44D1G.*+ABB 
   ..>.E.EF  .:!a%-@* ##9::q	Y."#BQ#F#GHG2;G2D ...559PP-9:SToTvTv:w-x*&'=?Z[[077<GLgLnLn  sD  MD!+21q5>( (..2EE1=>WXhXoXo>p1q.*+ACSTT   y O  4 &&'TU! s.   E3E8 2F 8F$8	FFF!$F(c           
         t        | d      st        | d      sg S |r| j                  }nd}g }t        t        j                  |             }i }t        t        |             }t        |      D ]  \  }}|||j                  <    t        |      D ]  \  }}|j                  }	|	dv s||j                     }
||
dz
     }|j                  dvr>d }t               }|j                  |
       t        ||
|      }|Q|j                  }|j                  }|3||j                     }||v rn#|j                  |       t        |||      }nn|Q|t!        t#        ||j                  |d      d	
      }|j                  |_        t#        ||j$                  |d      |_        |j                  |_        t#        ||j                  |d      |_        |j-                  |       ||||j(                      D ]T  }|j                  dk(  s|j                  dk(  s#|j.                  j-                  t#        ||j                  |d             V  |S )Nr|   r}   r   )SETUP_FINALLYSETUP_EXCEPTrA   r   Tr   Fr   RAISE_VARARGS)r   r   rS   rT   rU   ru   rz   r   rv   r   rn   rV   addr   r   r   r   rJ   r   r   r   r   r/   r   )r`   r   rF   try_except_info_lstrD   r   r   rd   ry   rk   r   r   r   indexes_checkedtarget_infocheck_indextry_except_inforaise_instructions                     r   collect_try_except_infor     s   r:&wr;/GI++KK  !3!3B!78$&!-b12'5 	>NA{<=%k&8&89	> (5 0	vNA{&--L@@2KKL^L^2_/#/0ORS0S#T #**2SS)-&"%%##$CD5lDce~!-'2'N'N$-8-O-O*'3&?@P@W@W&X&/9!'++K8&=lKYr&s "- *5&3!"3[5G5G]ab$'O >I=O=OO:2;)'>>##	3O/ BXA^A^O>6?@QSiSpSpr}  GK  7LO3'..?-9!<UVe  WA  WA  =B  .C v),33F0771< / E E L L$-.?ARAYAY[fos$t!vvY0	vd #"r   )rq   
   c                       e Zd ZddZd Zy)r   Nc                      || _         || _        y r    r   r   s      r   r   z_TargetInfo.__init__N  r   r   c                    dg}|j                  | j                  j                         | j                  r|j                  d       |j                  | j                  j                         |j                  d       |j                  t	        | j                  j
                               |j                  d       |j                  d       dj                  |      S r   r   r   s     r   r2   z_TargetInfo.__str__R  r   r   r    r   r8   r   r   r   r   L  r   r   c                 D   | ||dz    D cg c]  }|j                    }}|g dk(  r,| |dz   d  D ]   }|j                   dk(  s|}t        |      c S  y |rG|d   dk(  r?| |dz   d  }|D ]1  }|j                   dk(  s| ||j                        }t        ||      c S  y y c c}w )Nrq   r   r   r   r   rA   r   )r   r   rn   )	r   r   r   r   r   r   r   rw   r   s	            r   r   r   ^  s   <HIh  jI  LM  jM  =N  O=-&&  O  O66
 +77VYZ7Z7[*\ ?&)00L@-C*&'=>>?
 q	Y."#BQ#F#GHG/6 +.559PP-9:SToTvTv:w-x*&'=?Z[[	  1 Os   Bc           
         t        | d      st        | d      sg S |r| j                  }nd}g }t        t        j                  |             }i }t        t        |             }t        |      D ]  \  }}|||j                  <    t        |      D ]  \  }}|j                  }	|	dk(  s||j                     }
||
   }|j                  dk7  r=d }t               }|j                  |
       t        ||
|      }|Q|j                  }|j                  }|3||j                     }||v rn#|j                  |       t        |||      }nn|Q|t!        t#        ||j                  |d      d	      }|j                  |_        t#        ||j$                  |d      |_        |j                  |_        d
}||j$                     }||j                     }|||dz    D ](  }|j+                  |j                        }|!||kD  s'|}* ||z
  |_        |j/                  |       ||||j(                      D ]T  }|j                  dk(  s|j                  dk(  s#|j0                  j/                  t#        ||j                  |d             V  |S )Nr|   r}   r   r   r   Tr   Fr   r   rA   r   )r   r   rS   rT   rU   ru   rz   r   rv   r   rn   rV   r   r   r   r   r   rJ   r   r   r   rB   r   r/   r   )r`   r   rF   r   rD   r   r   rd   ry   rk   r   r   r   r   r   r   r   r   start_iend_ifound_at_liner   s                         r   r   r   y  s   r:&wr;/GI++KK  !3!3B!78$&!-b12'5 	>NA{<=%k&8&89	> (5 =	vNA{&--L.2KKL^L^2_/#/0O#P #**i7)-&"%%##$CD5lDce~!-'2'N'N$-8-O-O*'3&?@P@W@W&X&/9!'++K8&=lKYr&s "- *5&3!"3[5G5G]ab$'O >I=O=OO:2;)'>>##	3O/ BXA^A^O> ')O78^8^_G56L6S6STE'3GUQY'G <(9(=(=k>P>P(Q(49X.;O< 7F6SO3'..?-9!<UVe  WA  WA  =B  .C v),33F0771< / E E L L$-.?ARAYAY[fos$t!vvs=	v~ #"r   )rq      c                     g S )z
        Note: if the filename is available and we can get the source,
        `collect_try_except_info_from_source` is preferred (this is kept as
        a fallback for cases where sources aren't available).
        r8   )r`   r   s     r   r   r     s	     	r   c                   ~    e Zd Zd Zd Zd Zej                  d   dk  reZd Z	ej                  d   dk\  rd Z
y	d Z
y	)
_Visitorc                 <    g | _         g | _        g | _        d| _        y )Nr   )try_except_infos_stack_in_except_stackmax_liner?   s    r   r   z_Visitor.__init__  s      " "r   c                     t        |d      r*|j                  | j                  kD  r|j                  | _        t        j                  j                  | |      S )Nlineno)r   r   r   
ast_moduleNodeVisitorgeneric_visit)r   nodes     r   r   z_Visitor.generic_visit  s@    4"{{T]]* $%%33D$??r   c                    t        |j                  d      }| j                  j                  |       | j	                  |       || j                  j                         u sJ |j                  s| j                  j                  d|       y y )NTr   r   )	r   r   r   r/   r   popr   r   insertr   r   infos      r   	visit_Tryz_Visitor.visit_Try  sm    T[[64 4 t{{(((({{!!((D1 r   r   rq   c                 Z   | j                   d   }d|_        |j                  dk(  r|j                  |_        | j                  j                  |       | j                  |       t        |d      r|j                  |_	        n| j                  |_	        | j                  j                          y )Nr   F
end_lineno)r   r   r   r   r   r/   r   r   r   r   r   r   r   s      r   visit_ExceptHandlerz_Visitor.visit_ExceptHandler  s    {{2r!#{{D$$T*4 4&#'??D #'==D !!#r   c                     | j                   D ]4  }|j                  |j                  j                  |j                         6 | j                  |       y r    )r   excr   r/   r   r   r   s      r   visit_Raisez_Visitor.visit_Raise  sK    -- Gxx'2299$++FG t$r   c                     | j                   D ]A  }|j                  |j                  |j                  j	                  |j
                         C | j                  |       y r    )r   typetbackr   r/   r   r   r   s      r   r   z_Visitor.visit_Raise  sT    -- Gyy(TZZ-?2299$++FG t$r   N)r4   r5   r6   r   r   r   rr   rs   visit_TryExceptr   r   r8   r   r   r   r     sP    @2 Q#$ a	%	%r   r   c                 |    t        | d      5 }|j                         }d d d        t        |       S # 1 sw Y   xY w)Nrb)openread%collect_try_except_info_from_contents)filenamestreamcontentss      r   #collect_try_except_info_from_sourcer     s;    	h	 !;;=!08DD! !s   2;c                 |    t        j                  | |      }t               }|j                  |       |j                  S r    )r   parser   visitr   )r   r   astvisitors       r   r   r     s3    


8X
.CjGMM####r   c                   4    e Zd Zd ZdefdZeZedd       Zy)_MsgPartc                 .    |dk\  sJ || _         || _        y )Nr   r"   tok)r   r"   r   s      r   r   z_MsgPart.__init__&  s    qyy	r   returnc                 <    d| j                   d| j                  dS )Nz_MsgPart(line: z tok: r   r   r?   s    r   r2   z_MsgPart.__str__+  s    /3yy$((CCr   Nc                 `   t        |t        t        f      r|D ]  }| j                  |||        y t        |t              r3|J t        |      }|j                  |g       }|j                  |       y t        |t              rt        |j                  t        t        f      r)| j                  |j                  ||j                         y t        |j                  t              r8|j                  |j                  g       }|j                  |j                         y t        d|fz        )Nr"   zUnhandled: %)
isinstanceru   tupleadd_to_line_to_contentsr)   int
setdefaultr/   r   r   r"   rC   )clsobjline_to_contentsr"   or1   s         r   r   z _MsgPart.add_to_line_to_contents0  s    cD%=) L++A/?d+KLc3###t9D"--dB7CJJsOc8$#''D%=1++CGG5ECHH+U#''3'&11#((B?

377#^sf455r   r    )	r4   r5   r6   r   r)   r2   r7   classmethodr   r8   r   r   r   r   $  s.    
D D H6 6r   r   c                   N    e Zd ZddZdZdZd Zd Zd Zd Z	dd	Z
d
 Zd Zd Zy)_Disassemblerc                 l   || _         || _        || _        t        t	        |            | _        t        t        j                  |            x}| _	        |j                  |z
  }| j
                  D ]C  }|j                  |j                        }|||z
  }|||j                  <   5|||j                  <   E y r    )r`   rF   levelru   rz   r   rS   rT   rU   rD   r   rB   rv   )r   r`   rF   r  rD   
line_indexry   new_line_indexs           r   r   z_Disassembler.__init__M  s    &
 !22!6759#:L:LR:P5QQD2 &&4
,, 	CK.22;3E3EFN)+k9
8B!+"4"458B!+"4"45	Cr   i r   c                 :   | j                   }|D ]  }t        |t        t        f      rt	        | | j
                  |       }3t        |t              rt	        ||j                        }Zt        |d      sgt	        || j                  |j                           } |S Nrv   )BIG_LINE_INTr   ru   r   minmin_liner   r"   r   rD   rv   r   argsmargs       r   r  z_Disassembler.min_lineb  s     	?C#e}-=4==#./C*388$h'411#**=>	? r   c                 :   | j                   }|D ]  }t        |t        t        f      rt	        | | j
                  |       }3t        |t              rt	        ||j                        }Zt        |d      sgt	        || j                  |j                           } |S r  )SMALL_LINE_INTr   ru   r   maxr   r   r"   r   rD   rv   r  s       r   r   z_Disassembler.max_lineo  s     	?C#e}-=4==#./C*388$h'411#**=>	? r   c                 2
   | j                   }g }d}| j                  D ]#  }|j                  dv r|j                  |       # n |syj                  dk(  r|d   }| j                  j	                  t        |            |u sJ t        |j                  |j                  |j                  |j                  d|j                   ||       ||d       ||      f      | j                  t        |      dz
  <   t        S |j                  dv rt        |      |j                  dz   k(  rd}d	}n:d
}t        |      |j                  dz   kD  rt        |      |j                  dz   z
  }ny||j                  z   dz   }|j                  dk(  r|dz  }| j                  ||= t        ||d       }t        |      }	t        |      }
 ||	       ||	d      g}|	}t        |
      D ];  \  }}|d	kD  r|j                   ||d             |}|j                   ||             = |j                   ||d             |r| j                  j!                  |t        |	j                  |	j                  |	j                  |	j                  d|	j                  t#        |                   t        S |j                  dk(  rt        |      |j                  k(  rd}d	}n4d
}t        |      |j                  kD  rt        |      |j                  z
  }ny| j                  |||j                  z   dz   = t        ||d       }|D cg c]  }| }
}|
r|
d	   }n|}|}g }|j                   ||d             t        |
      D ];  \  }}|d	kD  r|j                   ||d             |}|j                   ||             = |j                   ||d             |rl| j                  j!                  |t        |j                  |j                  |j                  |j                  d|j                  t#        |                   t        S || j                  r| j                  d	   j                  dk(  r| j                  j	                  d	       | j                  d	   j                  dv r-| j                  j	                  d	      } ||       ||d      |fS | j                  d	   j                  dk(  r8| j                  j	                  d	      } ||d| j%                  ||            |fS |S c c}w )z
        This handles and converts some common constructs from bytecode to actual source code.

        It may change the list of instructions.
        NLOAD_GLOBAL	LOAD_FAST
LOAD_CONST	LOAD_NAME	LOAD_ATTRr   F.rA   )CALL_FUNCTIONPRECALLCALLr   TrQ   r#  r   r'   r   BUILD_TUPLEr   
STORE_FAST
STORE_NAME = r~   return r   )_create_msg_partr   r   r/   r   rX   rN   opcodestarts_linern   rv   RESTART_FROM_LOOKAHEADiternextru   r   r   r   r  )r   r   foundfullreprr   prev_instructionforce_restartdeltadel_upto	call_funcr  prevrd   r  ry   first_instructions                   r   
_lookaheadz_Disassembler._lookahead|  s    ## !% 1 1 	&&*aa-.		 ""k1$Ry$$((U48HHHH 1= '' '' ,, '' ''()(#.()1Dc%j1n- *)""&JJ5z-44q88 % $u: 0 7 7! ;;J*:*A*AA*EFE/666:H&&)3A!!%.1uv'EUI;DIIs#H D#D/ *3q5OOCdO4C)	* OOCcN+!!(($$$$))$$$$(O1  .-$$55z-444 % $u: 0 7 77J*:*A*ABE!!%0@0G0G(G!(K"KLuv'E389KK9D9$(G!$4!$DHOOCcN+#D/ *3q5OOCdO4C)	* OOCcN+!!((%,,%,,%11%,,%,,(O1  .-D$5$5  #**i7!!%%a(  #**.JJ#'#4#4#8#8#; +,c2BE.JHTT  #**n<#'#4#4#8#8#; +YT]]K[]e=fgiqqqS :s   1	Tc                 P    |j                   rdt        |j                        d|fS |S )N|)rj   r)   rv   )r   ry   instruction_reprs      r   _decorate_jump_targetz#_Disassembler._decorate_jump_target  s,    %%[//0#7GHHr   Nc                    | j                   }||| j                  | j                  fv r| j                  |j                     }|j
                  }t        |t              r|j                  d      r|dd  }t        |||      S  |||            S )NzNULL +    )
r>  r  r  rD   rv   argreprr   r)   
startswithr   )r   ry   r   r"   decrA  s         r   r+  z_Disassembler._create_msg_part  s    ((<4D$5$5t7J7J#KK))+*<*<=D%%gs#(:(:9(EabkG#I 	I.1+w.GI 	Ir   c                 6   | j                   r| j                         }|r|S | j                  }| j                   j                  d      }|j                  dv ry |j                  dk(  r" ||d| j                  |             ||      fS |j                  dv r| j                   d   }|j                  dv r3| j                   j                  d        ||       ||d       ||      fS |j                  d	k(  r=| j                   j                  d        ||d| j                  |             ||      fS |j                  d
k(  rL|j                  dk(  r=| j                   j                  d        ||d| j                  |             ||      fS |j                  dk(  rt        j                  |j                        rt        |j                  | j                  | j                  dz         j                         }|j                         D ]  }|j                  dd        |j                         D ]&  \  }}|j!                  |g       j#                  |       (  ||d      S |j                  d
k(  r|j                  dk(  r	 ||d      S |j                  dk(  r ||d|j$                  df      S |j$                  r! |||j                  d|j$                  df      S |j                  r# |||j                  d|j                  d      S  |||j                        S )Nr   )RESUMENULLr   r*  r   r  r&  r)  r~   r   rA   zraise r  z    zLOAD_CONST(code)raiser   ztry(z):r   r   {r-   )r   r:  r+  r   r   r  rn   inspectiscoder	  rF   r  build_line_to_contentsvaluesr   itemsr  extendrA  )	r   r  rI   r   ry   r   code_line_to_contentsr   r"   s	            r   _next_instruction_to_strz&_Disassembler._next_instruction_to_str  s    //#C
##''++A.!33/YT]];5OPRUVaRbcc!XX#003&&*FF!!%%a(()(%0$& &
  &&.8!!%%a(K{9STVYZeVfgg&&/9>N>U>UYZ>Z!!%%a(Kk8RSUXYdUeff-~~k001(5&&(8(8$**q.)((* & !6 < < > /HOOAv./&;&A&A&C KND($//b9@@JK;(:;;0!!Q&;000{V[-@-@$$GHH{[%7%7k>Q>QSV$WXX{0B0BKDVDV$XYY; 2 233r   c                    i }| j                   }|r{| j                  |      }|t        u r|t        j	                  ||       | j                  |      }|| j                  k7  r%|j                  |g       j                  t               |r{|S r    )
r   rP  r.  r   r   r   r  r  r/   	SEPARATOR)r   r  r   rL   r  s        r   rK  z$_Disassembler.build_line_to_contents_  s     ((--.>?A**y,,Q0@Aa AD''' ++Ar299)D   r   c                    | j                         }t               }d}d}t        |j                               D ]  \  }}||dz
  k  r9|r|j	                  |dz   d       n|j	                  d       |dz  }||dz
  k  r9|r|j	                  |d       t        |      D ]C  \  }}|t        k(  r$|t        |      dz
  k7  s!|j	                  d       3|j	                  |       E |j	                  d       |} |j                         S )Nr   FrA   z.

z. r'   )	rK  r   sortedrM  writer   rR  rX   getvalue)	r   r  r   	last_line
show_linesr"   r   rd   contents	            r   disassemblez_Disassembler.disassembleu  s   668	
$%5%;%;%=> 	ND(dQh&LLIM!;<LL&Q	 dQh& t-.'1 *
7i'CMA--T*LL)* LLI)	,   r   )r   )NN)r4   r5   r6   r   r  r  r  r   r:  r>  r+  rP  rK  r[  r8   r   r   r	  r	  K  sA    C$ LNN` 	I@4D ,!r   r	  c                 X    |r| j                   }nd}t        | |      j                         S )a  
    A simple disassemble of bytecode.

    It does not attempt to provide the full Python source code, rather, it provides a low-level
    representation of the bytecode, respecting the lines (so, its target is making the bytecode
    easier to grasp and not providing the original source code).

    Note that it does show jump locations/targets and converts some common bytecode constructs to
    Python code to make it a bit easier to understand.
    r   )r   r	  r[  )r`   r   rF   s      r   code_to_bytecode_representationr]    s-     ''[)5577r   r3   )z	<unknown>),rT   rI  rr   collectionsr   _pydev_bundler   r,  r   r   r   r   r	   r
   r   r   r   r   ior   objectr   r:   rJ   rM   rN   ro   rz   r   rs   r   r   r   r   r   r   r   r   r   r.  rR  r   r	  r]  r8   r   r   <module>rb     s>   
  
 " #A A A )F )X 0	 .*pq/kd & BQ6! f  $=~G#R 	bqW$ f  $6T#l 	bqW$ 4%z%% 4%nE$   H	$6v $6NE!F E!P
8r   