
    GeLf                        d Z ddlmZ ddlmZ ddlmZ ddlZddlmZ	 ddl
Z
ddlZddlmZmZmZ ddlmZ dd	lmZ d
Zd
Z ee
j.                  D  cg c]  } | j1                  d      s|  c}       ZddddddddddddddddZdddddd d!d!d"Z G d# d$e      Z G d% d&e      Z G d' d(e      Zd) Z  G d* d+e      Z!d, Z"d/d-Z#d. Z$yc c} w )0zo
Bytecode analysing utils. Originally added for using in smart step into.

Note: not importable from Python 2.
    )	pydev_log)CodeType)	_VariableN)cfg)
KeyifyListDebugInfoHolderIS_PY311_OR_GREATER)bisect)dequeFBINARY___pow____mul__
__matmul____floordiv____div____mod____add____sub__
__lshift__
__rshift____and____or____xor____getitem__)BINARY_POWERBINARY_MULTIPLYBINARY_MATRIX_MULTIPLYBINARY_FLOOR_DIVIDEBINARY_TRUE_DIVIDEBINARY_MODULO
BINARY_ADDBINARY_SUBTRACTBINARY_LSHIFTBINARY_RSHIFT
BINARY_AND	BINARY_OR
BINARY_XORBINARY_SUBSCRBINARY_DIVIDE__lt____le____eq____ne____gt____ge____contains__)<z<=z==z!=>z>=inznot inc                   &    e Zd Zg dZddZd ZeZy)Targetarglinenooffsetchildren_targetsc                 <    || _         || _        || _        || _        y Nr6   )selfr7   r8   r9   r:   s        F/usr/lib/python3/dist-packages/_pydevd_bundle/pydevd_bytecode_utils.py__init__zTarget.__init__;   s     0    c           	          g }| j                   D ]"  }|j                  |dt        | |             $ ddj                  |      z  S )N: z
Target(%s), )	__slots__appendgetattrjoin)r=   retss      r>   __repr__zTarget.__repr__A   sE     	9AJJ1gdA&678	9diin,,r@   N) __name__
__module____qualname__rD   r?   rJ   __str__rK   r@   r>   r5   r5   8   s    ?I1- Gr@   r5   c                   $    e Zd Zd Zd Zd Zd Zy)_TargetIdHashablec                     || _         y r<   )target)r=   rT   s     r>   r?   z_TargetIdHashable.__init__L   s	    r@   c                 L    t        |d      sy |j                  | j                  u S )NrT   )hasattrrT   r=   others     r>   r,   z_TargetIdHashable.__eq__O   s"    uh'||t{{**r@   c                     | |k(   S r<   rK   rW   s     r>   r-   z_TargetIdHashable.__ne__T   s    5=  r@   c                 ,    t        | j                        S r<   )idrT   r=   s    r>   __hash__z_TargetIdHashable.__hash__W   s    $++r@   N)rM   rN   rO   r?   r,   r-   r]   rK   r@   r>   rR   rR   J   s    +
!r@   rR   c                      e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 ZeZd
 ZeZeZeZeZeZeZeZeZd ZeZeZeZeZe
Ze
Ze
Ze
Ze
Ze
Z e
Z!e
Z"d Z#d Z$d Z%d Z&d Z'e'Z(e'Z)e'Z*e'Z+e'Z,e'Z-e'Z.e'Z/e'Z0e'Z1e'Z2e'Z3e'Z4d Z5d Z6d Z7d Z8e7Z9d Z:d Z;d Z<d Z=d Z>d Z?d Z@eZAeZBeZCeZDeZEeZFeZGeZHeZIeZJeZKeZLeZMeZNeZOd ZPePZQd ZRd ZSd ZTd  ZUd! ZVd" ZWd# ZXe
ZYe
ZZe
Z[e
Z\e
Z]e
Z^e
Z_e
Z`eZaeZbeZcd$ ZdeZdeZed% Zfd& Zgd' ZhehZiehZjehZkehZlehZmehZnehZoehZpehZqeZreZOeZseZtd( ZueZveZweZxeZyeZzeZteZseZ{eZ|eZ}eZ~eZd) ZeZeZeZeZeZeZeZeZeZeZeZeZd* Zd+ Zd, Zd- Zd. Ze
ZeZeZeZeZeZeZy/)0_StackInterpreterzx
    Good reference: https://github.com/python/cpython/blob/fcb55c0037baab6f98f91ee38ce84b6f874f034a/Python/ceval.c
    c                 x    || _         t               | _        g | _        i | _        t               | _        i | _        y r<   )bytecoder   _stackfunction_calls
load_attrssetfuncfunc_name_id_to_code_object)r=   ra   s     r>   r?   z_StackInterpreter.__init__`   s2     g E	+-(r@   c                 j    d| j                   dt        | j                  j                               dS )NzStack:
Function calls:
z
Load attrs:

)rc   listrd   valuesr\   s    r>   rP   z_StackInterpreter.__str__h   s)    CGCVCVX\]a]l]l]s]s]uXvwwr@   c                     |j                   t        j                  v r7t        j                  |j
                     }|dvrt        j                  ||      S |j
                  S N)zexception matchBAD)opcode_opcode
hascomparediscmp_opr7   _COMP_OP_MAPget)r=   instrrs   s      r>   _getnamez_StackInterpreter._getnamek   sL    <<7---ZZ		*F77#''77yyr@   c                    |j                   dk(  ry|j                   dk(  ry |j                   dk(  ry|j                   dk(  ry| j                  |      }t        |t              r|j                  }t        |t
              r|j                   }t        |t              sy |j                  d      r|j                  d	      d
   S |S )Nr(   z__getitem__().__call__CALL_FUNCTIONMAKE_FUNCTIONz__func__().__call__LOAD_ASSERTION_ERRORAssertionErrorr2   .)	namerw   
isinstancer   co_qualnamer   strendswithsplit)r=   rv   r   s      r>   _getcallnamez_StackInterpreter._getcallnamer   s    ::(+::(
 ::((:://#}}U#dH%##DdI&99D$$==::c?2&&r@   c                      y r<   rK   r=   rv   s     r>   _no_stack_changez"_StackInterpreter._no_stack_change       r@   c                 :    | j                   j                  |       y r<   rb   rE   r   s     r>   on_LOAD_GLOBALz _StackInterpreter.on_LOAD_GLOBAL       5!r@   c                 X    	 | j                   j                          y # t        $ r Y y w xY wr<   rb   pop
IndexErrorr   s     r>   
on_POP_TOPz_StackInterpreter.on_POP_TOP   '    	KKOO 		    	))c                     | j                  |       | j                  j                  |       t        | j	                  |      |j
                  |j                        | j                  t        |      <   y r<   )	r   rb   rE   r5   rw   r8   r9   rd   rR   r   s     r>   on_LOAD_ATTRz_StackInterpreter.on_LOAD_ATTR   sT    5!4:4==;OQVQ]Q]_d_k_k4l)%01r@   c                 :    | j                   j                  |       y r<   r   r   s     r>   on_LOAD_CONSTz_StackInterpreter.on_LOAD_CONST   r   r@   c                 X    	 | j                   j                          y # t        $ r Y y w xY wr<   r   r   s     r>   on_STORE_FASTz_StackInterpreter.on_STORE_FAST   r   r   c                      y r<   rK   r   s     r>   on_NOPz_StackInterpreter.on_NOP   r   r@   c                 "   | j                   j                  t        |      d        | j                  |      }d }|sn|dv re| j                  t        |         }|t        |      }|rzt        ||j                  |j                  |      }| j                  j                  |       n<t        ||j                  |j                        }| j                  j                  |       t        r|t        d|       | j                  j                  |       y )N)
<listcomp>	<genexpr>	<setcomp>
<dictcomp>zCreated target)rd   r   rR   r   rg   _get_smart_step_into_targetsr5   r8   r9   rc   rE   DEBUGprintrb   )r=   func_name_instrfunc_call_instr	call_namerT   code_objr:   s          r>   _handle_call_from_instrz)_StackInterpreter._handle_call_from_instr   s    -o>E%%o6	PP778I/8Z[H##?#I # $I/E/EG]G]_opF''.. 
 I'='=?U?UVF&&v.V'"F+?+r@   c                    	 | j                   j                         }	 | j                   j                         }t        j                  |j
                     }|dvrI| j                  j                  t        | j                  |      |j                  |j                               | j                   j                  |       y # t        $ r Y y w xY w# t        $ r Y y w xY wrm   )rb   r   r   rr   rs   r7   rc   rE   r5   rw   r8   r9   )r=   rv   _right_leftrs   s        r>   on_COMPARE_OPz_StackInterpreter.on_COMPARE_OP   s    	[[__&F	KKOO%E EII&33&&vdmmE.BELLRWR^R^'_`5!  		  		s"   B= C =	C	C		CCc                     	 | j                   j                          	 | j                   j                          y # t        $ r Y y w xY w# t        $ r Y y w xY wr<   r   r   s     r>   on_IS_OPz_StackInterpreter.on_IS_OP   O    	KKOO	KKOO  		  		    8 A 	AA	AAc                 x   	 | j                   j                         }	 | j                   j                         }| j                  j	                  t        t        |j                     |j                  |j                               | j                   j	                  |       y # t        $ r Y y w xY w# t        $ r Y y w xY wr<   )
rb   r   r   rc   rE   r5   _BINARY_OP_MAPr   r8   r9   )r=   rv   _sub
_containers       r>   on_BINARY_SUBSCRz"_StackInterpreter.on_BINARY_SUBSCR   s    	;;??$D	*J 	""6.*DellTYT`T`#ab5!  		  		s"   B B- 	B*)B*-	B98B9c                 \    | j                  |       | j                  j                  |       y r<   )r   rb   rE   r   s     r>   on_LOAD_METHODz _StackInterpreter.on_LOAD_METHOD  s     5!r@   c                    t         s5| j                  j                         }| j                  j                         }n| j                  j                         x}}|j                  }|dz  r| j                  j                         }|dz  r| j                  j                         }|dz  r| j                  j                         }|dz  r| j                  j                         }| j	                  |      }	|	dv r<t        |j                  t              r"|j                  | j                  t        |      <   | j                  j                  |       y )N            )r   r   r   r   )
r	   rb   r   r7   r   r   r   rg   rR   rE   )
r=   rv   qualnamecode_obj_instrr7   _func_closure_func_annotations_func_kwdefaults_func_defaultsr   s
             r>   on_MAKE_FUNCTIONz"_StackInterpreter.on_MAKE_FUNCTION  s    "{{(H![[__.N )-(99H~ii: KKOO-M: $ 1:#{{0:![[__.N%%h/	NN.,,h7P^PbPb001B81LM8$r@   c                 :    | j                   j                  |       y r<   r   r   s     r>   on_LOAD_FASTz_StackInterpreter.on_LOAD_FAST4  r   r@   c                 :    | j                   j                  |       y r<   r   r   s     r>   on_LOAD_ASSERTION_ERRORz)_StackInterpreter.on_LOAD_ASSERTION_ERROR7  r   r@   c                     t        |j                        D ]  }| j                  j                           | j                  j                         }| j	                  ||       y r<   )ranger7   rb   r   r   )r=   rv   _r   s       r>   on_CALL_METHODz _StackInterpreter.on_CALL_METHOD<  sJ    uyy! 	AKKOO	 ++//+$$_e<r@   c                 :    | j                   j                  |       y r<   r   r   s     r>   on_PUSH_NULLz_StackInterpreter.on_PUSH_NULLD  r   r@   c                 *   |j                   }|dz  }||dz	  dz  z  }t        |      D ]  }	 | j                  j                           	 | j                  j                         }| j                  ||       y # t        $ r Y  y w xY w# t        $ r Y y w xY wN   r   r   )r7   r   rb   r   r   r   )r=   rv   r7   argcr   r   s         r>   on_CALL_FUNCTIONz"_StackInterpreter.on_CALL_FUNCTIONG  s    iiTz#(a  t 	A!		"kkoo/O 	$$_e<  
  		s#   A6	B 6	BB	BBc                    | j                   j                         }|j                  }|dz  }||dz	  dz  z  }t        |      D ]  }| j                   j                           | j                   j                         }| j	                  ||       y r   rb   r   r7   r   r   r=   rv   _names_of_kw_argsr7   r   r   r   s          r>   on_CALL_FUNCTION_KWz%_StackInterpreter.on_CALL_FUNCTION_KWZ  s|     KKOO- iiTz#(a t 	AKKOO	 ++//+$$_e<r@   c                    | j                   j                         }|j                  }|dz  }||dz	  dz  z  }t        |      D ]  }| j                   j                           | j                   j                         }| j	                  ||       y r   r   )r=   rv   _var_argr7   r   r   r   s          r>   on_CALL_FUNCTION_VARz&_StackInterpreter.on_CALL_FUNCTION_VARj  s{    ;;??$ iiTz#(a t 	AKKOO	 ++//+$$_e<r@   c                 P   | j                   j                         }|j                  }|dz  }||dz	  dz  z  }| j                   j                          t        |      D ]  }| j                   j                           | j                   j                         }| j	                  ||       y r   r   r   s          r>   on_CALL_FUNCTION_VAR_KWz)_StackInterpreter.on_CALL_FUNCTION_VAR_KWz  s     KKOO-iiTz#(a  	 t 	AKKOO	 ++//+$$_e<r@   c                     |j                   dz  r| j                  j                         }| j                  j                         }| j                  j                         }| j                  ||       y )Nr   )r7   rb   r   r   )r=   rv   _kwargs	_callargsr   s        r>   on_CALL_FUNCTION_EXz%_StackInterpreter.on_CALL_FUNCTION_EX  sN    99tkkoo'GKKOO%	++//+$$_e<r@   c                 X    	 | j                   j                          y # t        $ r Y y w xY wr<   r   r   s     r>   on_JUMP_IF_FALSE_OR_POPz)_StackInterpreter.on_JUMP_IF_FALSE_OR_POP  s'    	KKOO 		r   c                     	 | j                   j                          	 | j                   j                          y # t        $ r Y y w xY w# t        $ r Y y w xY wr<   r   r   s     r>   on_JUMP_IF_NOT_EXC_MATCHz*_StackInterpreter.on_JUMP_IF_NOT_EXC_MATCH  r   r   c                 >   	 | j                   j                         }	 | j                   j                         }| j                   j                  |       | j                   j                  |       y # t        $ r Y y w xY w#  | j                   j                  |       Y y xY wr<   rb   r   r   rE   )r=   rv   p0p1s       r>   
on_ROT_TWOz_StackInterpreter.on_ROT_TWO  s    	"B	"B
 	22  		
	KKr"s   A. A= .	A:9A:=Bc                 $   	 | j                   j                         }	 | j                   j                         }	 | j                   j                         }| j                   j                  |       | j                   j                  |       | j                   j                  |       y # t        $ r Y y w xY w#  | j                   j                  |       Y y xY w#  | j                   j                  |       | j                   j                  |       Y y xY wr<   r   )r=   rv   r   r   p2s        r>   on_ROT_THREEz_StackInterpreter.on_ROT_THREE  s    	"B	"B
	"B 	222%  		
	KKr"	KKr"KKr"s'   B$ B3 C $	B0/B03C8Dc                 @   	 | j                   j                         }	 | j                   j                         }	 | j                   j                         }	 | j                   j                         }| j                   j                  |       | j                   j                  |       | j                   j                  |       | j                   j                  |       y # t        $ r Y y w xY w#  | j                   j                  |       Y y xY w#  | j                   j                  |       | j                   j                  |       Y y xY w#  | j                   j                  |       | j                   j                  |       | j                   j                  |       Y y xY wr<   r   )r=   rv   r   r   r   p3s         r>   on_ROT_FOURz_StackInterpreter.on_ROT_FOUR  s;   	"B	"B
	"B	"B 	22227  		
	KKr"	KKr"KKr"	KKr"KKr"KKr"s4   C C) D E 	C&%C&)D8EAFc                 :    | j                   j                  |       y r<   r   r   s     r>   on_BUILD_LIST_FROM_ARGz(_StackInterpreter.on_BUILD_LIST_FROM_ARG  r   r@   c                     t        |j                        D ]6  }| j                  j                          | j                  j                          8 | j                  j	                  |       y r<   )r   r7   rb   r   rE   r=   rv   _is      r>   on_BUILD_MAPz_StackInterpreter.on_BUILD_MAP  sJ    		" 	BKKOOKKOO	 	5!r@   c                     | j                  |       t        |j                        D ]  }| j                  |        | j                  j	                  |       y r<   )r   r   r7   rb   rE   r   s      r>   on_BUILD_CONST_KEY_MAPz(_StackInterpreter.on_BUILD_CONST_KEY_MAP  sD    		" 	#BOOE"	#5!r@   c                 :    | j                   j                  |       y r<   r   r   s     r>   on_RETURN_GENERATORz%_StackInterpreter.on_RETURN_GENERATOR  r   r@   c                 H    | j                  |       | j                  |       y r<   )r   r   s     r>   
on_MAP_ADDz_StackInterpreter.on_MAP_ADD  s    r@   c                     | j                   j                          t        |j                        D ]  }| j                   j	                  |        y r<   )rb   r   r   r7   rE   r   s      r>   on_UNPACK_SEQUENCEz$_StackInterpreter.on_UNPACK_SEQUENCE#  s:    		" 	&BKKu%	&r@   c                     t        |j                        D ]  }| j                  |        | j                  j	                  |       y r<   )r   r7   r   rb   rE   r   s      r>   on_BUILD_LISTz_StackInterpreter.on_BUILD_LIST(  s8    		" 	#BOOE"	#5!r@   c                 Z    t        |j                        D ]  }| j                  |        y r<   )r   r7   r   r   s      r>   on_RAISE_VARARGSz"_StackInterpreter.on_RAISE_VARARGS<  s&    		" 	#BOOE"	#r@   c                 X    	 | j                   j                          y # t        $ r Y y w xY wr<   r   r   s     r>   on_INPLACE_ADDz _StackInterpreter.on_INPLACE_ADDN  s'    
	KKOO 		r   c                     	 | j                   d   }| j                   j                  |       y # t        $ r | j                   j                  |       Y y w xY w)Nr~   )rb   rE   r   )r=   rv   is      r>   
on_DUP_TOPz_StackInterpreter.on_DUP_TOPe  sK    	"BA
 KKq!	  	&KKu%	&s   - $AAc                    t        | j                        dk(  r| j                  j                  |       y t        | j                        dk(  rF| j                  d   }| j                  j                  |       | j                  j                  |       y | j                  d   }| j                  d   }| j                  j                  |       | j                  j                  |       y )Nr   r   r~   )lenrb   rE   )r=   rv   r  js       r>   on_DUP_TOP_TWOz _StackInterpreter.on_DUP_TOP_TWOn  s    t{{q KKu%t{{q BAKKq!KKu%KKOKKO11r@   c                     t        |j                        D ]  }	 | j                  j                           | j                  j                  |       y # t        $ r Y Gw xY wr<   )r   r7   rb   r   r   rE   )r=   rv   r   s      r>   on_BUILD_SLICEz _StackInterpreter.on_BUILD_SLICE~  sU    uyy! 	A!	
 	5!  s   A	AAc                     	 | j                   j                          | j                   j                          | j                   j                          y # t        $ r Y y w xY wr<   r   r   s     r>   on_STORE_SUBSCRz!_StackInterpreter.on_STORE_SUBSCR  sC    	KKOOKKOOKKOO 		s   AA 	AAc                     	 | j                   j                          | j                   j                          y # t        $ r Y y w xY wr<   r   r   s     r>   on_DELETE_SUBSCRz"_StackInterpreter.on_DELETE_SUBSCR  s5    	KKOOKKOO 		s   47 	AAN)rM   rN   rO   __doc__r?   rP   rw   r   r   r   r   r   on_LOOKUP_METHODr   on_LOAD_DEREFon_LOAD_NAMEon_LOAD_CLOSUREon_LOAD_CLASSDEREFon_IMPORT_NAMEon_IMPORT_FROMon_IMPORT_STARon_SETUP_ANNOTATIONSr   on_STORE_GLOBALon_STORE_DEREFon_STORE_ATTRon_STORE_NAMEon_DELETE_NAMEon_DELETE_ATTRon_DELETE_GLOBALon_DELETE_FASTon_DELETE_DEREFon_DICT_UPDATEon_SET_UPDATEon_GEN_STARTr   r   r   r   r   on_BINARY_MATRIX_MULTIPLYon_BINARY_POWERon_BINARY_MULTIPLYon_BINARY_FLOOR_DIVIDEon_BINARY_TRUE_DIVIDEon_BINARY_MODULOon_BINARY_ADDon_BINARY_SUBTRACTon_BINARY_LSHIFTon_BINARY_RSHIFTon_BINARY_ANDon_BINARY_ORon_BINARY_XORr   r   r   r   on_LOAD_BUILD_CLASSr   r   r   r   r   r   r   on_YIELD_VALUEon_GET_AITERon_GET_ANEXTon_END_ASYNC_FORon_BEFORE_ASYNC_WITHon_SETUP_ASYNC_WITHon_YIELD_FROMon_SETUP_LOOPon_FOR_ITERon_BREAK_LOOPon_JUMP_ABSOLUTE
on_RERAISEon_LIST_TO_TUPLEon_CALL_FINALLYon_POP_FINALLYr   on_JUMP_IF_TRUE_OR_POPr   r   r   r   r   r   r   on_RETURN_VALUEon_POP_JUMP_IF_FALSEon_POP_JUMP_IF_TRUEon_DICT_MERGEon_LIST_APPEND
on_SET_ADDon_LIST_EXTENDon_UNPACK_EXon_GET_ITERon_GET_AWAITABLEon_GET_YIELD_FROM_ITERr   	on_RESUMEr   r   r   on_BUILD_TUPLEon_BUILD_STRINGon_BUILD_TUPLE_UNPACK_WITH_CALLon_BUILD_TUPLE_UNPACKon_BUILD_LIST_UNPACKon_BUILD_MAP_UNPACK_WITH_CALLon_BUILD_MAP_UNPACKon_BUILD_SETon_BUILD_SET_UNPACKon_SETUP_FINALLYon_BEGIN_FINALLYon_END_FINALLYr  on_POP_BLOCKon_JUMP_FORWARDon_POP_EXCEPTon_SETUP_EXCEPTon_WITH_EXCEPT_STARTon_SETUP_WITHon_WITH_CLEANUP_STARTon_WITH_CLEANUP_FINISHon_FORMAT_VALUEon_EXTENDED_ARGr  on_INPLACE_POWERon_INPLACE_MULTIPLYon_INPLACE_MATRIX_MULTIPLYon_INPLACE_TRUE_DIVIDEon_INPLACE_FLOOR_DIVIDEon_INPLACE_MODULOon_INPLACE_SUBTRACTon_INPLACE_RSHIFTon_INPLACE_LSHIFTon_INPLACE_ANDon_INPLACE_ORon_INPLACE_XORr  r  r  r  r  on_PRINT_EXPRon_UNARY_POSITIVEon_UNARY_NEGATIVEon_UNARY_NOTon_UNARY_INVERTon_CACHE
on_PRECALLrK   r@   r>   r_   r_   [   sT   .x2"m
 $" "M L#O& &N%N%N+ $O"N!M!MNN!N ONML,6" 
" !1&O)-,'$M)''$M#L$M"%2"" '="=&= = =&= &N#L#L'+*$M$M"K$M'!J'&O%N 5.@""" !O%$MNJNL #K'-" + I&
"
 #N#O&3#)($1!' L''%N'%N# $L&O$M&O+%N'$M,-&O&O &(!/+,&(&&#N"M#N" " M((#L&OH!Jr@   r_   c           
         t         j                  j                  |       }t        j                  j                  |      }g }|D ]  }t        rt        d       t        |      }|D ]  }d|j                  }t        ||d      }t        rg|j                  dk7  rXt        d|d|j                  |      d       t        d       |j                  D ]   }	t        d	|j                  |	      d
|	d       " |t        rt        |d       ||        |j'                  |j(                          |S #  t        r t        j                   dk\  rt#        j$                  d       Y xY w)z
    :return list(Target)
    z
Start block----on_NCACHEz
Will handle: z>>z<<zCurrent stack:z    arg:()z not found.r   z0Exception computing step into targets (handled).)ra   Bytecode	from_codebytecode_cfgControlFlowGraphfrom_bytecoder   r   r_   r   rF   rw   rb   STRICT_MODEr|   r   DEBUG_TRACE_LEVELr   	exceptionextendrc   )
codebr   rH   blockstackrv   	func_namerf   entrys
             r>   r   r     sX    	##D)A

'
'
5
5a
8C
C )%&!%( 	`E`',zz3	ui6zzW,/ennU>SUYZ./%*\\ VE!*ennU.CS%QTUV <",	-KLL U#	`4 	

5''(=)J J` '88A=!++,^_s   'BD0D001E#c                   &    e Zd Zg dZddZd ZeZy)Variantr   
is_visitedliner9   
call_orderchildren_variantsparentNc                     || _         || _        || _        || _        || _        || _        d | _        |r|D ]	  }| |_         y y r<   r  )r=   r   r  r  r9   r  r  variants           r>   r?   zVariant.__init__  sR    	$	$!2, &!%& r@   c           	      >   g }| j                   D ]  }|dk(  rO	 | j                  }||j                  d       n-|j                  d|j                  d|j                  d       	 W|dk(  r6|j                  d| j                  rt        | j                        nd	z         	 |j                  |d
t        | |              ddj                  |      z  S # t
        $ r |j                  |d       Y w xY w# t
        $ r |j                  |d       Y w xY w)Nr  zparent: Nonezparent: z (r  z: <not set>r  zchildren_variants: %sr   rB   zVariant(%s)rC   )
rD   r  rE   r   r9   AttributeErrorr  r
  rF   rG   )r=   rH   rI   r  s       r>   rJ   zVariant.__repr__  s    	3AH}U![[F ~

>2

V]]#ST''

2UYUkUkc$:P:P6Qqrst3

q'$*:;<%	3* tyy~--# & 7JJ!567 " 3

a123s#   C" C;C87C8;DDr<   rL   rK   r@   r>   r  r    s    eI
&.2 Gr@   r  c                    | j                   }t        |t              sy | j                  |kD  ry | j                  |k  ry |j	                  |d      dz   }|||<   | j
                  |k  }| j                  }	d }
|	r'| j                  D cg c]  }t        ||||||       }
}t        ||| j                  |z
  | j
                  ||
      S c c}w )Nr   r   )	r7   r   r   r8   ru   r9   r:   _convert_target_to_variantr  )rT   
start_lineend_linecall_order_cachelastibaser   r  r  r:   r  childs               r>   r  r    s    ::DdC }}x}}z!!%%dA.2J'T%'J..  002 'uj(DTV[]ab2 2 4V]]T%96==*Vghh	2s   Cc           	      .   g }| j                   }| j                  }i }t        r>t        d       t        rt        j
                  |d       nt        j
                  |       t        |      D ]&  }t        ||||||      }	|	|j                  |	       ( |S )a  
    Calculate smart step into variants for the given line range.
    :param frame:
    :type frame: :py:class:`types.FrameType`
    :param start_line:
    :param end_line:
    :return: A list of call names from the first to the last.
    :note: it's guaranteed that the offsets appear in order.
    :raise: :py:class:`RuntimeError` if failed to parse the bytecode or if dis cannot be used.
    zdis.dis:F)show_caches)	f_codef_lastir   r   r	   rr   r   r  rE   )
framer  r  r  variantsr  r  r  rT   r  s
             r>   "calculate_smart_step_into_variantsr    s     H<<DMMEjGGDe,GGDM.t4 !,VZK[]bdhi? 	! Or@   c                 R    |syt        t        |d       |       }|dk(  ry||dz
     S )z
    Given the frame.f_lasti, return the related `Variant`.

    :note: if the offset is found before any variant available or no variants are
           available, None is returned.

    :rtype: Variant|NoneType
    Nc                     | j                   S r<   )r9   )r  s    r>   <lambda>z?get_smart_step_into_variant_from_frame_offset.<locals>.<lambda>E  s
     r@   r   r   )r
   r   )frame_f_lastir  r  s      r>   -get_smart_step_into_variant_from_frame_offsetr  9  s8     z($=>NAAv Ar@   )r   )%r  _pydev_bundler   typesr   bytecode.instrr   ra   r   r  rr   ro   rp   _pydevd_bundle.pydevd_constantsr   r   r	   r
   collectionsr   r  r   re   opname
startswith_BINARY_OPSr   rt   objectr5   rR   r_   r   r  r  r  r  )r  s   0r>   <module>r     s   $  $  ( 
  \ \   

Sff6G6G	6R6ST  *)# !!"& 



	

	V $ "D	" D	"N.j(f (Vi.@C Ts   C
(C
