B
    ^ Çc J  ã               @   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r¬d dlmZ edddd 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   ú!lib/python3.7/idlelib/debugger.pyr      s    zIdb.__init__c             C   sL   |   |¡r|  ¡  d S |  |¡}y| j ||¡ W n tk
rF   Y nX d S )N)Ú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 )N)r   r   r   r	   r   )r   r   Úinfor   r   r   r   Úuser_exception   s
    

zIdb.user_exceptionc             C   sB   |j j d¡rdS |j}|j j}d|kr4d|kr4dS |  |¡S d 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rBd||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d2dd„Z	dd	„ Z
d3d
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d4d'd(„Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Z dS )5ÚDebuggerNc             C   s:   |d k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                sN   ˆj dkr.ˆ ¡  ˆj d‡ ‡fdd„¡ d S zdˆ_ˆjjˆ Ž S dˆ_X d S )Nr   éd   c                  s
   ˆj ˆ Ž S )N)Úrunr   )Úargsr   r   r   Ú<lambda>h   ó    zDebugger.run.<locals>.<lambda>é   )r/   Ú
abort_loopÚrootZafterr.   r,   r1   )r   r2   r   )r2   r   r   r1   H   s    
zDebugger.runc             C   sd   y|   ¡  W n tk
r    Y nX | jr6| j ¡  d S | jrL| j ¡  d | _| j ¡  | j 	¡  d S )N)
ÚquitÚ	Exceptionr.   ÚtopZbellÚstackviewerÚcloser+   Zclose_debuggerÚdestroy)r   Úeventr   r   r   r<   p   s    

 
zDebugger.closec             C   sF  | 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 | _}| |¡ x&|D ]}|jdd |jdd q*W t
|ƒ | _}| jjdd | jsˆt|ƒ| 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 | j&st|ƒ| j_&| j& d¡ t|d| j'| j&d| _(| j(j"ddd | j)sBt|ƒ| 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¡ rB|  *¡  d S )NzDebug ControlZDebugZWM_DELETE_WINDOWz<Escape>Úw)ÚanchorZGo)ÚtextÚcommandZStepZOverZOutZQuitÚdisabled)ÚstateÚleft)Úsider5   ZStack)rA   rB   Zvariabler   )ÚrowÚcolumnZSourceÚLocalsÚGlobalsÚx)r@   ÚfillÚ
background)ÚheightÚboth)ÚexpandrL   )5r+   Úflistr7   r   r:   Zwm_titleZwm_iconnameZwm_protocolr<   Zbindr   ÚbframeÚpackÚbuttonsZButtonÚcontZbcontÚappendÚstepZbstepÚnextZbnextÚretZbretr8   Ú	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+   r7   r:   rR   ZblÚbr[   r   r   r   r-      s‚    







zDebugger.make_guic             C   s|  || _ | jj|d |r~|\}}}y
|j}W n  tk
rL   dt|ƒ }Y nX |d k	rxyd|t|ƒf }W n   Y nX d}nd}d }| j}| jj||d | j}	|	rÆ| j	 
| j |¡\}
}|	 |
|¡ |  d¡ | j ¡ râ|  ¡  x| jD ]}|jdd	 qêW | j ¡  |  jd7  _| jj d
d¡ |  jd8  _x| jD ]}|jdd	 q<W | jjdd | jjd| jd d | _ d S )N)rA   z%sz%s: %sZyellowÚ )rA   rM   r5   Znormal)rD   Zvwaitz::idledebugwaitrC   )r   rh   rZ   r'   ÚAttributeErrorÚstrrj   ri   r;   r,   Ú	get_stackÚ
load_stackÚshow_variablesra   rn   Úsync_source_linerT   r:   Úwakeupr/   r7   ÚtkÚcall)r   r   r   r   ÚtypeÚvalueÚtbZm1ZbgÚsvÚstackÚiro   r   r   r   r   Ì   sH    




zDebugger.interactionc             C   sV   | j }|sd S |  |¡\}}|d d… |dd …  dkrRtj |¡rR| j ||¡ d S )Nr5   éÿÿÿÿz<>)r   Ú_Debugger__frame2fileliner    r!   ÚexistsrQ   Zgotofileline)r   r   r%   r&   r   r   r   rv   ý   s    (zDebugger.sync_source_linec             C   s   |j }|j}|j}||fS )N)r   r   r   )r   r   r$   r%   r&   r   r   r   Z__frame2fileline  s    zDebugger.__frame2filelinec             C   s   | j  ¡  |  ¡  d S )N)r,   Zset_continuer6   )r   r   r   r   rU     s    
zDebugger.contc             C   s   | j  ¡  |  ¡  d S )N)r,   r   r6   )r   r   r   r   rW     s    
zDebugger.stepc             C   s   | j  | j¡ |  ¡  d S )N)r,   Zset_nextr   r6   )r   r   r   r   rX     s    zDebugger.nextc             C   s   | j  | j¡ |  ¡  d S )N)r,   Z
set_returnr   r6   )r   r   r   r   rY     s    zDebugger.retc             C   s   | j  ¡  |  ¡  d S )N)r,   Zset_quitr6   )r   r   r   r   r8     s    
zDebugger.quitc             C   s   | j j ddd¡ d S )Nr^   z::idledebugwaitÚ1)r7   rx   ry   )r   r   r   r   r6     s    zDebugger.abort_loopc             C   s~   | j sN| j ¡ rNt| j| j| ƒ | _ }| jrz| j | jd ¡\}}| 	||¡ n,| j }|rp| j ¡ spd | _ | 
¡  d| jd< d S )Nr5   rN   )r;   r\   rn   ÚStackViewerrk   rQ   r   r,   rs   rt   r<   )r   r}   r~   r   r   r   r   r_   $  s    zDebugger.show_stackc             C   s   | j  ¡ r|  ¡  d S )N)ra   rn   rv   )r   r   r   r   rb   1  s    
zDebugger.show_sourcec             C   s   |d | _ |  ¡  d S )Nr   )r   ru   )r   Z	stackitemr   r   r   Ú
show_frame5  s    
zDebugger.show_framec             C   sL   | j }| j ¡ r$|s@t| jdƒ| _ n|r@d | _ | ¡  d| jd< |  ¡  d S )NrI   r5   rN   )Úlocalsviewerrc   rn   ÚNamespaceViewerrl   r<   ru   )r   Úlvr   r   r   rd   <  s    

zDebugger.show_localsc             C   sL   | j }| j ¡ r$|s@t| jdƒ| _ n|r@d | _ | ¡  d| jd< |  ¡  d S )NrJ   r5   rN   )Úglobalsviewerre   rn   r‡   rm   r<   ru   )r   Úgvr   r   r   rf   H  s    

zDebugger.show_globalsr   c             C   st   | j }| j}| j}|s d  }}n |j}|j}|r@|r@||kr@d }|rX| ||| jjj¡ |rp| ||| jjj¡ d S )N)	r†   r‰   r   Úf_localsÚ	f_globalsÚ	load_dictr+   ZinterpZrpcclt)r   Úforcerˆ   rŠ   r   ZldictZgdictr   r   r   ru   T  s    
zDebugger.show_variablesc             C   s   | j  ||¡ d S )N)r,   Z	set_break)r   r%   r&   r   r   r   Úset_breakpoint_hered  s    zDebugger.set_breakpoint_herec             C   s   | j  ||¡ d S )N)r,   Zclear_break)r   r%   r&   r   r   r   Úclear_breakpoint_hereg  s    zDebugger.clear_breakpoint_herec             C   s   | j  |¡ d S )N)r,   Zclear_all_file_breaks)r   r%   r   r   r   Úclear_file_breaksj  s    zDebugger.clear_file_breaksc          	   C   sX   xR| j jjD ]D}|jj}y x|jD ]}|  ||¡ q"W W q tk
rN   wY qX qW dS )z=Load PyShellEditorWindow breakpoints into subprocess debuggerN)r+   rQ   ZinversedictÚior%   Zbreakpointsr   rq   )r   Zeditwinr%   r&   r   r   r   Úload_breakpointsm  s    zDebugger.load_breakpoints)N)N)N)r   )!r'   r(   r)   r\   ra   rc   re   r   r1   r<   r-   r   rv   r   rU   rW   rX   rY   r8   r6   r;   r_   rb   r…   r†   r‰   rd   rf   ru   r   r   r‘   r“   r   r   r   r   r*   :   s6   

(
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 )NéP   )Úwidth)r   ZisAquaTkr   r   rQ   r	   r~   )r   ÚmasterrQ   r	   r   r   r   r   y  s    zStackViewer.__init__Nc             C   sÖ   || _ |  ¡  x°tt|ƒƒD ] }|| \}}y|jd }W n   d}Y nX |j}|j}|j}	dd l}
|
 	||¡}| 
¡ }|	dkr’d|||f }nd||	||f }||kr²d| }|  |¡ qW |d k	rÒ|  |¡ d S )Nr'   r   r   )r   rp   Nz%s, line %d: %sz%s.%s(), line %d: %sz> )r~   ÚclearÚrangeÚlenrŒ   r   r   r#   Ú	linecacheÚgetlineÚstriprV   Zselect)r   r~   Úindexr   r   r&   Úmodnamer$   r%   Úfuncnamerš   Z
sourcelineÚitemr   r   r   rt   …  s.    

zStackViewer.load_stackc             C   s   | j rt | |¡S dS )zoverride base methodN)r~   r   Úpopup_event)r   r>   r   r   r   r¡   Ÿ  s    zStackViewer.popup_eventc             C   s*   | j }|jd| jd |jd| jd dS )zoverride base methodzGo to source line)ÚlabelrB   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   s4   d|  krt | jƒk r0n n| j | j| ¡ dS )zoverride base methodr   N)r™   r~   r	   r…   )r   r   r   r   r   Ú	on_select¬  s    zStackViewer.on_selectc             C   s   |   |¡ dS )zoverride base methodN)rb   )r   r   r   r   r   Ú	on_double±  s    zStackViewer.on_doublec             C   s   | j  d¡}|  |¡ d S )NÚactive)Úlistboxr   rb   )r   r   r   r   r   r¤   µ  s    zStackViewer.goto_source_linec             C   s@   | j  d¡}d|  kr&t| jƒk r<n n| j | j| ¡ d S )Nr©   r   )rª   r   r™   r~   r	   r…   )r   r   r   r   r   r¥   ¹  s    zStackViewer.show_stack_framec             C   sd   d|  krt | jƒk s n d S | j| \}}|j}|j}tj |¡r`| j |¡}|r`| 	|¡ d S )Nr   )
r™   r~   r   r   r    r!   ÚisfilerQ   ÚopenZgotoline)r   r   r   r&   r$   r%   Zeditr   r   r   rb   ¾  s    zStackViewer.show_source)N)r'   r(   r)   r   rt   r¡   r¦   r§   r¨   r¤   r¥   rb   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   é(   é   é<   r5   rO   )rP   rL   é   Zgroove)rA   ÚborderwidthZreliefrK   )rL   Úvbar)ÚnameÚrightÚy)rF   rL   i,  )rN   ÚscrollregionrE   )rF   rL   rP   rB   ZyscrollcommandÚnw)Zwindowr@   )r™   r–   ÚtitleÚreprlibÚReprÚreprÚ	maxstringÚmaxotherr   r   rS   rg   r¢   r   r²   ZCanvasÚminÚmaxÚcanvasZyviewr^   ÚsubframeZcreate_windowZsfidr   )r   r–   r¸   Údictr•   rN   r¹   r   r²   rÀ   rÁ   r   r   r   r   Ì  s2    


zNamespaceViewer.__init__r€   r   c             C   sf  || j kr|sd S | j}| j}xt|j ¡ ƒD ]}| ¡  q.W d | _ |sdt|dd}|jddd n”| 	¡ }t
|ƒ}	d}
x~|	D ]v}|| }| j |¡}|r¦|dd… }t||d}|j|
ddd t|ddd	}| d|¡ |j|
ddd |
d }
q~W || _ | ¡  | ¡ }| ¡ }| j}dd||f| jd
< |dkrNd|d< |jdd n||d< |jdd d S )NÚNone)rA   r   )rG   rH   r5   r€   r·   )rG   rH   Zsticky)r•   r±   r¶   i,  rN   )rP   )rÂ   rÁ   r   ÚlistZchildrenÚvaluesr=   rg   r`   ÚkeysÚsortedr»   ZEntryÚinsertZupdate_idletasksZwinfo_reqwidthZwinfo_reqheightrÀ   rS   )r   rÂ   rŽ   Z
rpc_clientrÁ   r   ÚcÚlZ	keys_listÚnamesrG   r³   r{   Zsvaluer•   rN   rÀ   r   r   r   r   é  sF    

zNamespaceViewer.load_dictc             C   s   | j  ¡  d S )N)r   r=   )r   r   r   r   r<     s    zNamespaceViewer.close)N)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    Z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