
    dJ                         d dl Z d dlZd dlT d dlmZmZ d dlmZ d dlm	Z	 d dl
mZ  G d de j                  Z G d	 d
          Z G d de	          Z G d d          Zedk    rd dlmZ  eddd           dS dS )    N)*)Frame	Scrollbar)macosx)ScrolledList)ListedToplevelc                   ,    e Zd Zd Zd Zd Zd Zd ZdS )Idbc                 R    || _         t          j                            |            d S N)guibdbBdb__init__)selfr   s     "lib/python3.11/idlelib/debugger.pyr   zIdb.__init__   s%        c                     |                      |          r|                                  d S |                     |          }	 | j                            ||           d S # t
          $ r Y d S w xY wr   )in_rpc_codeset_step_Idb__frame2messager   interactionTclError)r   framemessages      r   	user_linezIdb.user_line   s    E"" 	MMOOOF&&u--	H  %00000 	 	 	DD	s   A 
A-,A-c                     |                      |          r|                                  d S |                     |          }| j                            |||           d S r   )r   r   r   r   r   )r   r   infor   s       r   user_exceptionzIdb.user_exception   s]    E"" 	MMOOOF&&u--WeT22222r   c                     |j         j                            d          rdS |j        }|j         j        }d|v rd|v rdS |                     |          S )Nzrpc.pyTidlelibdebuggerF)f_codeco_filenamecountf_backr   )r   r   
prev_frame	prev_names       r   r   zIdb.in_rpc_code#   sd    <#))(33 		04J")5II%%*	*A*A u##J///r   c                     |j         }|j        }|j        }t          j                            |          }| d| }|j        dk    r| d|j         d}|S )N:?: z())r#   r$   f_linenoospathbasenameco_name)r   r   codefilenamelinenor0   r   s          r   __frame2messagezIdb.__frame2message/   sj    |#7##H--((((<3 44DL444Gr   N)__name__
__module____qualname__r   r   r   r   r    r   r   r
   r
      s_            3 3 3
0 
0 
0    r   r
   c                       e Zd ZdxZxZxZZddZd ZddZ	d Z
ddZd Zd Zd	 Zd
 Zd Zd Zd Zd ZdZd Zd Zd ZdZdZd Zd ZddZd Zd Zd Zd Z dS )DebuggerNc                     |t          |           }|| _        || _        d | _        |                                  d| _        d| _        d S Nr   )r
   pyshellidbr   make_guiinteractingnesting_level)r   r>   r?   s      r   r   zDebugger.__init__>   sJ    ;d))C
r   c                       j         dk    r5                                   j                            d fd           d S 	 d _          j        j         d _        S # d _        w xY w)Nr   d   c                       j           S r   )run)argsr   s   r   <lambda>zDebugger.run.<locals>.<lambda>h   s    4 r      )rB   
abort_looprootafterrA   r?   rF   )r   rG   s   ``r   rF   zDebugger.runH   s    < !!OOIOOC!8!8!8!8!8999F	! D48<& DqD    s   A! !	A*c                 H   	 |                                   n# t          $ r Y nw xY w| j        r| j                                         d S | j        r | j                                         d | _        | j                                         | j        	                                 d S r   )
quit	ExceptionrA   topbellstackviewercloser>   close_debuggerdestroyr   events     r   rS   zDebugger.closep   s    	IIKKKK 	 	 	D	 	HMMOOOF 	>""$$$d&6 	##%%%s    
$$c                    | j         }|j        | _        |j        x| _        }t          |          x| _        }| j                            d           | j                            d           |                    d| j                   | j        	                    d| j                   t          |          x| _        }| j                            d           g x| _        }t          |d| j                  x| _        }|                    |           t          |d	| j                  x| _        }|                    |           t          |d
| j                  x| _        }|                    |           t          |d| j                  x| _        }|                    |           t          |d| j                  x| _        }|                    |           |D ].}|                    d           |                    d           /t          |          x| _        }| j                            d           | j        s3t9          |          | j        _        | j                            d           t?          |d| j         | j                  | _!        | j!        "                    dd           | j#        st9          |          | j        _#        t?          |d| j$        | j#                  | _%        | j%        "                    dd           | j&        s3t9          |          | j        _&        | j&                            d           t?          |d| j'        | j&                  | _(        | j(        "                    dd           | j)        st9          |          | j        _)        t?          |d| j*        | j)                  | _+        | j+        "                    dd           tY          |d          | _-        | j-                            d           tY          |d          | _.        | j.                            dd           | j.        /                    d          | _0        t          |d          | _1        | j1                            dd           t          |          | _2        | j2                            dd           t          |d          | _3        | j3                            dd           | j        4                                r|                                   | j&        4                                r| '                                 | j)        4                                r| *                                 d S d S )NzDebug ControlDebugWM_DELETE_WINDOWz<Escape>w)anchorGo)textcommandStepOverOutQuitdisabledstateleft)siderI   Stack)r^   r_   variabler   rowcolumnSourceLocalsGlobalsx)r\   fill
background)heightbothexpandrr   )5r>   flistrK   r   rP   wm_titlewm_iconnamewm_protocolrS   bindr   bframepackbuttonsButtoncontbcontappendstepbstepnextbnextretbretrN   	configurecframevstack
BooleanVar	__class__setCheckbutton
show_stackbstackgridvsourceshow_sourcebsourcevlocalsshow_localsblocalsvglobalsshow_globalsbglobalsLabelstatuserrorcgeterrorbgfstackflocalsfglobalsget)r   r>   rK   rP   r}   blbr   s           r   r@   zDebugger.make_gui   s   ,]
"<'	D'---3/***W%%%*DJ777j$*---$Szz)f$$$rT49EEEE
Q
		!VTYGGGG
Q
		!VTYGGGG
Q
		!vE48DDDD	A
		!vFDIFFFF	A
		! 	  	 AKKjK)))FFF$V}},ff%%%{ 	$.sOODN!KOOA!&$/DKI I IQq)))| 	5%/__DN""64#3dlL L La***| 	 %/__DN"LQ"64#3dlL L La***} 	6&0ooDN##FD$5O O Oq+++C,,,$$$3s+++

s---z|44C***///Szz000c!,,,!&111;?? 	OO< 	= 	 	  	 r   c                    || _         | j                            |           |rF|\  }}}	 |j        }n"# t          $ r dt          |          z  }Y nw xY w|	 | d| }n#  Y nxY wd}nd}d }| j        }| j                            ||           | j        }	|	r9| j	        
                    | j         |          \  }
}|	                    |
|           |                     d           | j                                        r|                                  | j        D ]}|                    d	           | j                                         | xj        dz  c_        | j        j                            d
d           | xj        dz  c_        | j        D ]}|                    d	           | j                            d           | j                            d| j                   d | _         d S )Nr^   z%sr,   yellow )r^   rs   rI   normalre   vwait::idledebugwaitrd   )r   r   r   r6   AttributeErrorstrr   r   rR   r?   	get_stack
load_stackshow_variablesr   r   sync_source_liner   rP   wakeuprB   rK   tkcall)r   r   r   r   typevaluetbm1bgsvstackir   s                r   r   zDebugger.interaction   s8   
7+++ 	"OD%&]! & & &CII%& ))%))BBDBBBBB
"444 	$x))$*b99HE1MM%###A< 	$!!### 	( 	(AKKhK'''' 	a	'#4555a 	* 	*AKKjK))))2&&&
">>>


s   4 AAA! !A%c                     | j         }|sd S |                     |          \  }}|d d         |dd          z   dk    r<t          j                            |          r| j                            ||           d S d S d S )NrI   z<>)r   _Debugger__frame2fileliner.   r/   existsrx   gotofileline)r   r   r3   r4   s       r   r   zDebugger.sync_source_line   s    
 	F0077&BQB<(233-'4//BGNN84L4L/J##Hf55555 0///r   c                 4    |j         }|j        }|j        }||fS r   )r#   r$   r-   )r   r   r2   r3   r4   s        r   __frame2filelinezDebugger.__frame2fileline  s#    |#r   c                 `    | j                                          |                                  d S r   )r?   set_continuerJ   r   s    r   r   zDebugger.cont  s,    r   c                 `    | j                                          |                                  d S r   )r?   r   rJ   r   s    r   r   zDebugger.step  ,    r   c                 l    | j                             | j                   |                                  d S r   )r?   set_nextr   rJ   r   s    r   r   zDebugger.next  s0    $*%%%r   c                 l    | j                             | j                   |                                  d S r   )r?   
set_returnr   rJ   r   s    r   r   zDebugger.ret  s0    DJ'''r   c                 `    | j                                          |                                  d S r   )r?   set_quitrJ   r   s    r   rN   zDebugger.quit  r   r   c                 H    | j         j                            ddd           d S )Nr   r   1)rK   r   r   r   s    r   rJ   zDebugger.abort_loop   s%    	%!2C88888r   c                    | j         s| j                                        rft          | j        | j        |           x| _         }| j        r;| j                            | j        d           \  }}|	                    ||           d S d S | j         }|r4| j                                        sd | _         |
                                 d| j        d<   d S )NrI   rt   )rR   r   r   StackViewerr   rx   r   r?   r   r   rS   )r   r   r   r   s       r   r   zDebugger.show_stack%  s     
	&DKOO$5$5 
	&$/TZ$N$NNDrz (8--dj$??qeQ'''''( ( !B $+//++ #' 


$%DK!!!r   c                 d    | j                                         r|                                  d S d S r   )r   r   r   r   s    r   r   zDebugger.show_source2  s:    < 	$!!#####	$ 	$r   c                 H    |d         | _         |                                  d S r=   )r   r   )r   	stackitems     r   
show_framezDebugger.show_frame6  s%    q\
r   c                     | j         }| j                                        r|st          | j        d          | _         n'|r%d | _         |                                 d| j        d<   |                                  d S )Nro   rI   rt   )localsviewerr   r   NamespaceViewerr   rS   r   )r   lvs     r   r   zDebugger.show_locals=  s    < 	+ L$3DL($K$K! +$(!


)*X&r   c                     | j         }| j                                        r|st          | j        d          | _         n'|r%d | _         |                                 d| j        d<   |                                  d S )Nrp   rI   rt   )globalsviewerr   r   r   r   rS   r   )r   gvs     r   r   zDebugger.show_globalsI  s    = 	, O%4T]I%N%N" ,%)"


*+h'r   r   c                    | j         }| j        }| j        }|sd x}}n|j        }|j        }|r|r||u rd }|r&|                    ||| j        j        j                   |r(|                    ||| j        j        j                   d S d S r   )	r   r   r   f_locals	f_globals	load_dictr>   interprpcclt)r   forcer   r   r   ldictgdicts          r   r   zDebugger.show_variablesU  s    
 	  EEENEOE b Ue^^ 	CLLt|':'ABBB 	CLLt|':'ABBBBB	C 	Cr   c                 <    | j                             ||           d S r   )r?   	set_breakr   r3   r4   s      r   set_breakpoint_herezDebugger.set_breakpoint_heree  s     8V,,,,,r   c                 <    | j                             ||           d S r   )r?   clear_breakr   s      r   clear_breakpoint_herezDebugger.clear_breakpoint_hereh  s     Xv.....r   c                 :    | j                             |           d S r   )r?   clear_all_file_breaks)r   r3   s     r   clear_file_breakszDebugger.clear_file_breaksk  s    &&x00000r   c                     | j         j        j        D ]?}|j        j        }	 |j        D ]}|                     ||           0# t          $ r Y <w xY wdS )z=Load PyShellEditorWindow breakpoints into subprocess debuggerN)r>   rx   inversedictior3   breakpointsr   r   )r   editwinr3   r4   s       r   load_breakpointszDebugger.load_breakpointsn  s    |)5 	 	Gz*H%1 ? ?F,,Xv>>>>?!   	 	s    A
AAr   )r   )!r6   r7   r8   r   r   r   r   r   rF   rS   r@   r   r   r   r   r   r   r   rN   rJ   rR   r   r   r   r   r   r   r   r   r   r   r   r   r9   r   r   r;   r;   :   s       ,00F0W0w   &! &! &!P   "I  I  I V0 0 0 0d6 6 6               9 9 9 K& & &$ $ $   LM
 
 

 
 
C C C C - - -/ / /1 1 1    r   r;   c                   F    e Zd Zd ZddZd Zd Zd Zd Zd Z	d	 Z
d
 ZdS )r   c                     t          j                    rt          j        | |           nt          j        | |d           || _        || _        g | _        d S )NP   )width)r   isAquaTkr   r   rx   r   r   )r   masterrx   r   s       r   r   zStackViewer.__init__z  s[    ? 	: !$////!$b9999



r   Nc                    || _         |                                  t          t          |                    D ]}||         \  }}	 |j        d         }n	#  d}Y nxY w|j        }|j        }|j        }	dd l}
|
	                    ||          }|
                                }|	dv r	d|||fz  }n	d||	||fz  }||k    rd|z   }|                     |           ||                     |           d S d S )Nr6   r+   r   )r+   r   Nz%s, line %d: %sz%s.%s(), line %d: %sz> )r   clearrangelenr   r#   r$   r1   	linecachegetlinestripr   select)r   r   indexr   r   r4   modnamer2   r3   funcnamer  
sourcelineitems                r   r   zStackViewer.load_stack  s2   


s5zz"" 	 	A!!HME6/*5<D'H|H"**8V<<J#))++J?**(GVZ+HH-(171E EEzzd{KKKK s   AAc                 >    | j         rt          j        | |          S dS override base methodN)r   r   popup_eventrV   s     r   r  zStackViewer.popup_event  s)    : 	9+D%888	9 	9r   c                     | j         }|                    d| j                   |                    d| j                   dS )r  zGo to source line)labelr_   zShow stack frameN)menuadd_commandgoto_source_lineshow_stack_frame)r   r  s     r   	fill_menuzStackViewer.fill_menu  s_    y2!%!6 	 	8 	8 	81!%!6 	 	8 	8 	8 	8 	8r   c                     d|cxk    rt          | j                  k     r+n dS | j                            | j        |                    dS dS )r  r   N)r  r   r   r   r   r  s     r   	on_selectzStackViewer.on_select  sZ    ''''DJ''''''H
5 122222 ('r   c                 0    |                      |           dS r  )r   r  s     r   	on_doublezStackViewer.on_double  s    r   c                 d    | j                             d          }|                     |           d S )Nactive)listboxr  r   r  s     r   r  zStackViewer.goto_source_line  s1    ""8,,r   c                     | j                             d          }d|cxk    rt          | j                  k     r+n d S | j                            | j        |                    d S d S )Nr  r   )r  r  r  r   r   r   r  s     r   r  zStackViewer.show_stack_frame  so    ""8,,''''DJ''''''H
5 122222 ('r   c                 0   d|cxk    rt          | j                  k     sn d S | j        |         \  }}|j        }|j        }t          j                            |          r3| j                            |          }|r|	                    |           d S d S d S r=   )
r  r   r#   r$   r.   r/   isfilerx   opengotoline)r   r  r   r4   r2   r3   edits          r   r   zStackViewer.show_source  s    U,,,,S__,,,,F
5)v|#7>>(## 	&:??8,,D &f%%%%%	& 	&& &r   r   )r6   r7   r8   r   r   r  r  r  r  r  r  r   r9   r   r   r   r   x  s        
 
 
   49 9 9
8 8 83 3 3
          3 3 3
	& 	& 	& 	& 	&r   r   c                   (    e Zd ZddZdZddZd ZdS )	r   Nc           
      @   d}d}|rdt          |          z  }|| _        || _        dd l}|                                | _        d| j        _        d| j        _        t          |          x| _	        }| j	        
                    dd           t          ||dd	
          | _        | j        
                    d           t          |d          x| _        }|
                    dd           t          |t!          dt#          d|                    dd||f          x| _        }	|	
                    ddd           |	j        |d<   |j        |	d<   t          |	          x| _        }
|	                    dd|
d          | _        |                     |           d S )Nr   (      <   rI   ru   rv      groove)r^   borderwidthreliefrq   )rr   vbar)namerighty)rh   rr   ,  )rt   scrollregionrg   )rh   rr   rw   r_   yscrollcommandnw)windowr\   )r  r   titlereprlibReprrepr	maxstringmaxotherr   r   r~   r   r  r   r/  Canvasminmaxcanvasyviewr   subframecreate_windowsfidr   )r   r   r8  dictr   rt   r9  r   r/  rA  rC  s              r   r   zNamespaceViewer.__init__  s    	"D		\F
LLNN	 		"6]]*
U
qv...5u!HMMM

S!!!$U8888	D		wS	)))%e-0c"foo-F-F45q%3H J  J  J 	Jf 	fQ777 ,Y#'8 #(==0((Aht(LL	tr   r   r   c                    || j         u r|sd S | j        }| j        }t          |j                                                  D ]}|                                 d | _         |s)t          |d          }|                    dd           n|	                                }t          |          }	d}
|	D ]}||         }| j                            |          }|r
|dd         }t          ||          }|                    |
dd           t          |dd	          }|                    d|           |                    |
dd           |
dz   }
|| _         |                                 |                                }|                                }| j        }dd||f| j        d
<   |dk    rd|d<   |                    d           d S ||d<   |                    d           d S )NNoner   r   rk   rI   r   r6  )rl   rm   sticky)r   r-  r4  r3  rt   )rw   )rF  rC  r   listchildrenvaluesrU   r   r   keyssortedr;  Entryinsertupdate_idletaskswinfo_reqwidthwinfo_reqheightrA  r~   )r   rF  r   
rpc_clientrC  r   cl	keys_listnamesrl   r0  r   svaluer   rt   rA  s                    r   r   zNamespaceViewer.load_dict  s   49UF=
h'..0011 	 	AIIKKKK	 	hV,,,AFFqF#### 		I9%%EC  T
..  *#AbD\F(...3q666(!;;;F###3q666!e	!!###''))))++'(!UF&;N#C<<"F8JJaJ     %F8JJaJ     r   c                 8    | j                                          d S r   )r   rU   r   s    r   rS   zNamespaceViewer.close   s    
r   r   )r   N)r6   r7   r8   r   rF  r   rS   r9   r   r   r   r     sS           6 D4! 4! 4! 4!l    r   r   __main__)mainzidlelib.idle_test.test_debuggerr+  F)	verbosityexit)r   r.   tkintertkinter.ttkr   r   r!   r   idlelib.scrolledlistr   idlelib.windowr   r   r
   r;   r   r   r6   unittestr\  r9   r   r   <module>rd     sx   



 				     ( ( ( ( ( ( ( (       - - - - - - ) ) ) ) ) )+ + + + +#' + + +\| | | | | | | ||	P& P& P& P& P&, P& P& P&fV V V V V V V Vp zD	*aeDDDDDD r   