o
     JAfJ                     @   s   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 de jZG d	d
 d
ZG dd de	ZG dd dZedkrXd dlmZ edddd dS dS )    N)*)Frame	Scrollbar)macosx)ScrolledList)ListedToplevelc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )Idbc                 C   s   || _ tj|  d S N)guibdbBdb__init__)selfr
    r   '/usr/lib/python3.10/idlelib/debugger.pyr      s   zIdb.__init__c                 C   sJ   |  |r|   d S | |}z
| j|| W d S  ty$   Y d S w r	   )in_rpc_codeset_step_Idb__frame2messager
   interactionZTclError)r   framemessager   r   r   	user_line   s   

zIdb.user_linec                 C   s4   |  |r|   d S | |}| j||| d S r	   )r   r   r   r
   r   )r   r   infor   r   r   r   user_exception   s
   

zIdb.user_exceptionc                 C   s>   |j jdr	dS |j}|j j}d|v rd|v rdS | |S )Nzrpc.pyTidlelibZdebuggerF)f_codeco_filenamecountf_backr   )r   r   Z
prev_frameZ	prev_namer   r   r   r   #   s   
zIdb.in_rpc_codec                 C   sF   |j }|j}|j}tj|}d||f }|jdkr!d||jf }|S )Nz%s:%s?z%s: %s())r   r   f_linenoospathbasenameco_name)r   r   codefilenamelinenor#   r   r   r   r   Z__frame2message/   s   
zIdb.__frame2messageN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r      s    
r   c                   @   s   e Zd Zd Z Z ZZd1ddZdd Zd1ddZ	dd	 Z
d1d
dZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdZdd Zdd Zd d! ZdZdZd"d# Zd$d% Zd2d'd(Zd)d* Zd+d, Zd-d. Zd/d0 Z dS )3DebuggerNc                 C   s:   |d u rt | }|| _|| _d | _|   d| _d| _d S Nr   )r   pyshellidbr   make_guiinteractingnesting_level)r   r-   r.   r   r   r   r   >   s   
zDebugger.__init__c                    sR   j dkr  jd fdd d S zd_jj  W d_S d_w )Nr   d   c                      s
   j   S r	   )runr   argsr   r   r   <lambda>h   s   
 zDebugger.run.<locals>.<lambda>   )r1   
abort_looprootZafterr0   r.   r3   )r   r5   r   r4   r   r3   H   s   
zDebugger.runc                 C   sb   z|    W n	 ty   Y nw | jr| j  d S | jr%| j  d | _| j  | j	  d S r	   )
quit	Exceptionr0   topZbellstackviewercloser-   Zclose_debuggerdestroyr   eventr   r   r   r>   p   s   

zDebugger.closec                 C   s>  | j }|j| _|j | _}t| | _}| jd | jd |d| j | j	d| j t
| | _}| jjdd g  | _}t|d| jd | _}|| t|d	| jd | _}|| t|d
| jd | _}|| t|d| jd | _}|| t|d| jd | _}|| |D ]}|jdd |jdd qt
| | _}| jjdd | jst|| j_| jd t|d| j | jd| _!| j!j"ddd | j#st|| j_#t|d| j$| j#d| _%| j%j"ddd | j&st|| j_&| j&d t|d| j'| j&d| _(| j(j"ddd | j)st|| j_)t|d| j*| j)d| _+| j+j"ddd t,|dd| _-| j-jdd t,|dd| _.| j.jddd | j./d| _0t
|dd| _1| j1jddd t
|| _2| j2jddd t
|dd| _3| j3jddd | j4 r|    | j&4 r| '  | j)4 r| *  d S d S )NzDebug ControlZDebugZWM_DELETE_WINDOWz<Escape>w)anchorZGo)textcommandZStepZOverZOutZQuitdisabledstateleft)sider7   ZStack)rD   rE   variabler   rowcolumnZSourceLocalsGlobalsx)rC   fill
background)heightbothexpandrR   )5r-   flistr9   r   r<   Zwm_titleZwm_iconnameZwm_protocolr>   bindr   bframepackbuttonsZButtoncontZbcontappendstepZbstepnextZbnextretZbretr:   	configurecframevstackZ
BooleanVar	__class__setZCheckbutton
show_stackZbstackgridvsourceshow_sourceZbsourcevlocalsshow_localsZblocalsvglobalsshow_globalsZbglobalsLabelstatuserrorZcgeterrorbgfstackflocalsfglobalsget)r   r-   r9   r<   rZ   Zblbrc   r   r   r   r/      s   










zDebugger.make_guic                 C   sl  || _ | jj|d |r<|\}}}z|j}W n ty%   dt| }Y nw |d ur9z
d|t|f }W n   Y d}nd}d }| j}| jj||d | j}	|	r`| j	
| j |\}
}|	|
| | d | j rn|   | jD ]}|jdd	 qq| j  |  jd7  _| jjd
d |  jd8  _| jD ]}|jdd	 q| jjdd | jjd| jd d | _ d S )NrD   z%sz%s: %sZyellow )rD   rS   r7   ZnormalrG   Zvwait::idledebugwaitrF   )r   rp   rb   r(   AttributeErrorstrrr   rq   r=   r.   	get_stack
load_stackshow_variablesri   rv   sync_source_liner\   r<   wakeupr1   r9   tkcall)r   r   r   r   typevaluetbZm1bgsvstackirw   r   r   r   r      sJ   







zDebugger.interactionc                 C   s^   | j }|sd S | |\}}|d d |dd   dkr+tj|r-| j|| d S d S d S )Nr7   z<>)r   _Debugger__frame2fileliner!   r"   existsrX   Zgotofileline)r   r   r&   r'   r   r   r   r      s   (zDebugger.sync_source_linec                 C   s   |j }|j}|j}||fS r	   )r   r   r    )r   r   r%   r&   r'   r   r   r   Z__frame2fileline  s   zDebugger.__frame2filelinec                 C      | j   |   d S r	   )r.   Zset_continuer8   r   r   r   r   r]        
zDebugger.contc                 C   r   r	   )r.   r   r8   r   r   r   r   r_     r   zDebugger.stepc                 C      | j | j |   d S r	   )r.   Zset_nextr   r8   r   r   r   r   r`        zDebugger.nextc                 C   r   r	   )r.   Z
set_returnr   r8   r   r   r   r   ra     r   zDebugger.retc                 C   r   r	   )r.   Zset_quitr8   r   r   r   r   r:     r   zDebugger.quitc                 C   s   | j jddd d S )Nrf   rz   1)r9   r   r   r   r   r   r   r8     s   zDebugger.abort_loopc                 C   s   | j s*| j r*t| j| j|  | _ }| jr(| j| jd \}}|	|| d S d S | j }|r;| j s;d | _ |
  d| jd< d S )Nr7   rT   )r=   rd   rv   StackViewerrs   rX   r   r.   r}   r~   r>   )r   r   r   r   r   r   r   rg   $  s   zDebugger.show_stackc                 C   s   | j  r|   d S d S r	   )ri   rv   r   r   r   r   r   rj   1  s   
zDebugger.show_sourcec                 C   s   |d | _ |   d S r,   )r   r   )r   Z	stackitemr   r   r   
show_frame5  r   zDebugger.show_framec                 C   L   | j }| j r|st| jd| _ n|r d | _ |  d| jd< |   d S )NrO   r7   rT   )localsviewerrk   rv   NamespaceViewerrt   r>   r   )r   lvr   r   r   rl   <     

zDebugger.show_localsc                 C   r   )NrP   r7   rT   )globalsviewerrm   rv   r   ru   r>   r   )r   gvr   r   r   rn   H  r   zDebugger.show_globalsr   c                 C   sx   | j }| j}| j}|sd  }}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-   ZinterpZrpcclt)r   forcer   r   r   ZldictZgdictr   r   r   r   T  s   
zDebugger.show_variablesc                 C      | j || d S r	   )r.   Z	set_breakr   r&   r'   r   r   r   set_breakpoint_hered     zDebugger.set_breakpoint_herec                 C   r   r	   )r.   Zclear_breakr   r   r   r   clear_breakpoint_hereg  r   zDebugger.clear_breakpoint_herec                 C   s   | j | d S r	   )r.   Zclear_all_file_breaks)r   r&   r   r   r   clear_file_breaksj  s   zDebugger.clear_file_breaksc              	   C   sJ   | j jjD ]}|jj}z|jD ]}| || qW q ty"   Y qw dS )z=Load PyShellEditorWindow breakpoints into subprocess debuggerN)r-   rX   Zinversedictior&   Zbreakpointsr   r{   )r   Zeditwinr&   r'   r   r   r   load_breakpointsm  s   
zDebugger.load_breakpointsr	   )r   )!r(   r)   r*   rd   ri   rk   rm   r   r3   r>   r/   r   r   r   r]   r_   r`   ra   r:   r8   r=   rg   rj   r   r   r   rl   rn   r   r   r   r   r   r   r   r   r   r+   :   s8    


(
K1
r+   c                   @   sV   e Zd Zdd ZdddZdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd ZdS )r   c                 C   s<   t  rt| | ntj| |dd || _|| _g | _d S )NP   )width)r   ZisAquaTkr   r   rX   r
   r   )r   masterrX   r
   r   r   r   r   y  s   
zStackViewer.__init__Nc                 C   s   || _ |   tt|D ]N}|| \}}z|jd }W n   d}Y |j}|j}|j}	dd l}
|
	||}|
 }|	dv rFd|||f }nd||	||f }||krVd| }| | q|d urg| | d S d S )Nr(   r   r   )r   ry   Nz%s, line %d: %sz%s.%s(), line %d: %sz> )r   clearrangelenr   r   r   r$   	linecachegetlinestripr^   select)r   r   indexr   r   r'   modnamer%   r&   funcnamer   Z
sourcelineitemr   r   r   r~     s2   zStackViewer.load_stackc                 C   s   | j r	t| |S dS override base methodN)r   r   popup_eventr@   r   r   r   r     s   zStackViewer.popup_eventc                 C   s*   | j }|jd| jd |jd| jd dS )r   zGo to source line)labelrE   zShow stack frameN)menuZadd_commandgoto_source_lineshow_stack_frame)r   r   r   r   r   	fill_menu  s   
zStackViewer.fill_menuc                 C   s:   d|  krt | jk rn dS | j| j|  dS dS )r   r   N)r   r   r
   r   r   r   r   r   r   	on_select  s    zStackViewer.on_selectc                 C   s   |  | dS r   )rj   r   r   r   r   	on_double  s   zStackViewer.on_doublec                 C   s   | j d}| | d S )Nactive)listboxr   rj   r   r   r   r   r     s   zStackViewer.goto_source_linec                 C   sF   | j d}d|  krt| jk r!n d S | j| j|  d S d S )Nr   r   )r   r   r   r   r
   r   r   r   r   r   r     s    zStackViewer.show_stack_framec                 C   sn   d|  krt | jk sd S  d S | j| \}}|j}|j}tj|r3| j|}|r5|	| d S d S d S r,   )
r   r   r   r   r!   r"   isfilerX   openZgotoline)r   r   r   r'   r%   r&   Zeditr   r   r   rj     s   zStackViewer.show_sourcer	   )r(   r)   r*   r   r~   r   r   r   r   r   r   rj   r   r   r   r   r   w  s    
r   c                   @   s,   e Zd Zd
ddZdZdddZdd	 ZdS )r   Nc                 C   s   d}d}|rdt | }|| _|| _dd l}| | _d| j_d| j_t| | _	}| j	j
ddd t||dd	d
| _| jj
dd t|dd | _}|j
ddd t|tdtd|dd||fd | _}	|	j
dddd |	j|d< |j|	d< t|	 | _}
|	jdd|
dd| _| | d S )Nr   (      <   r7   rU   rV      Zgroove)rD   borderwidthZreliefrQ   )rR   vbar)namerighty)rJ   rR   ,  )rT   scrollregionrI   )rJ   rR   rW   rE   Zyscrollcommandnw)ZwindowrC   )r   r   titlereprlibReprrepr	maxstringmaxotherr   r   r[   ro   r   r   r   ZCanvasminmaxcanvasZyviewrf   subframeZcreate_windowZsfidr   )r   r   r   dictr   rT   r   r   r   r   r   r   r   r   r     s4   



zNamespaceViewer.__init__r   r   c                 C   s^  || j u r	|s	d S | j}| j}t|j D ]}|  qd | _ |s0t|dd}|jddd nH|	 }t
|}	d}
|	D ];}|| }| j|}|rP|dd }t||d}|j|
ddd t|ddd	}|d| |j|
ddd |
d }
q<|| _ |  | }| }| j}dd||f| jd
< |dkrd|d< |jdd d S ||d< |jdd d S )NNonerx   r   rL   r7   r   r   )rM   rN   Zsticky)r   r   r   r   rT   )rW   )r   r   r   listchildrenvaluesr?   ro   rh   keyssortedr   ZEntryinsertZupdate_idletasksZwinfo_reqwidthZwinfo_reqheightr   r[   )r   r   r   Z
rpc_clientr   r   clZ	keys_listnamesrM   r   r   Zsvaluer   rT   r   r   r   r   r     sF   

zNamespaceViewer.load_dictc                 C   s   | j   d S r	   )r   r?   r   r   r   r   r>     s   zNamespaceViewer.closer	   )r   N)r(   r)   r*   r   r   r   r>   r   r   r   r   r     s
    

6r   __main__)mainzidlelib.idle_test.test_debuggerr   F)	verbosityexit)r   r!   tkinterZtkinter.ttkr   r   r   r   Zidlelib.scrolledlistr   Zidlelib.windowr   r   r   r+   r   r   r(   Zunittestr   r   r   r   r   <module>   s"    .  ?SX