o
     JAf/                     @   s   	 d dl Z d dlZd dlmZ d ZdadZi Zi Zi Z	i Z
dd Zdd ZG d	d
 d
ZG dd dZdd ZG dd dZG dd dZG dd dZG dd dZG dd dZdd Zdd Zdd Zdd  Zed!kr}d d"lmZ ed#d$d%d& dS dS )'    N)debuggeridb_adapterZgui_adapterc                 C   s   t | }| t|< |S N)id
frametable)framefid r	   )/usr/lib/python3.10/idlelib/debugger_r.py
wrap_frame(   s   r   c                 C   s<   	 | d u rd S | d }t |}|t|< | d | d |f}|S )N   r      )r   tracebacktable)info	tracebackZtraceback_idmodified_infor	   r	   r
   	wrap_info-   s   r   c                   @   s   e Zd Zdd ZdddZdS )GUIProxyc                 C      || _ || _d S r   )connoid)selfr   gui_adap_oidr	   r	   r
   __init__;      
zGUIProxy.__init__Nc                 C   s&   | j | jd|t|t|fi  d S )Ninteraction)r   
remotecallr   r   r   )r   messager   r   r	   r	   r
   r   ?   s   zGUIProxy.interactionr   __name__
__module____qualname__r   r   r	   r	   r	   r
   r   9   s    r   c                   @   s   e Z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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#d$ Zd%d& Zd'd( Zd)S )*
IdbAdapterc                 C   s
   || _ d S r   )idb)r   r#   r	   r	   r
   r   H   s   
zIdbAdapter.__init__c                 C      | j   d S r   )r#   set_stepr   r	   r	   r
   r%   M      zIdbAdapter.set_stepc                 C   r$   r   )r#   set_quitr&   r	   r	   r
   r(   P   r'   zIdbAdapter.set_quitc                 C   r$   r   )r#   set_continuer&   r	   r	   r
   r)   S   r'   zIdbAdapter.set_continuec                 C      t | }| j| d S r   )r   r#   set_nextr   r   r   r	   r	   r
   r+   V      zIdbAdapter.set_nextc                 C   r*   r   )r   r#   
set_returnr,   r	   r	   r
   r.   Z   r-   zIdbAdapter.set_returnc                 C   sF   t | }|d u rd }nt| }| j||\}}dd |D }||fS )Nc                 S   s   g | ]
\}}t ||fqS r	   )r   ).0Zframe2kr	   r	   r
   
<listcomp>e   s    z(IdbAdapter.get_stack.<locals>.<listcomp>)r   r   r#   	get_stack)r   r   tbidr   tbstackir	   r	   r
   r2   ^   s   zIdbAdapter.get_stackc                 C   s   dd l }| j||j d S )Nr   )__main__r#   run__dict__)r   cmdr7   r	   r	   r
   r8   h   s   zIdbAdapter.runc                 C      | j ||}|S r   )r#   	set_breakr   filenamelinenomsgr	   r	   r
   r<   l      zIdbAdapter.set_breakc                 C   r;   r   )r#   clear_breakr=   r	   r	   r
   rB   p   rA   zIdbAdapter.clear_breakc                 C   s   | j |}|S r   )r#   clear_all_file_breaksr   r>   r@   r	   r	   r
   rC   t      z IdbAdapter.clear_all_file_breaksc                 C   s   t | }t||S r   )r   getattr)r   r   namer   r	   r	   r
   
frame_attrz   s   
zIdbAdapter.frame_attrc                 C   "   t | }|j}t|}|t|< |S r   )r   	f_globalsr   	dicttabler   r   r   dictdidr	   r	   r
   frame_globals~   
   zIdbAdapter.frame_globalsc                 C   rI   r   )r   f_localsr   rK   rL   r	   r	   r
   frame_locals   rP   zIdbAdapter.frame_localsc                 C   rI   r   )r   f_coder   	codetable)r   r   r   codecidr	   r	   r
   
frame_code   rP   zIdbAdapter.frame_codec                 C      t | }|jS r   )rT   co_namer   rV   rU   r	   r	   r
   	code_name      zIdbAdapter.code_namec                 C   rX   r   )rT   co_filenamerZ   r	   r	   r
   code_filename   r\   zIdbAdapter.code_filenamec                 C   s   t d)Nz"dict_keys not public or pickleable)NotImplementedErrorr   rN   r	   r	   r
   	dict_keys   s   zIdbAdapter.dict_keysc                 C   s   t | }t| S r   )rK   listkeys)r   rN   rM   r	   r	   r
   dict_keys_list   s   zIdbAdapter.dict_keys_listc                 C   s   t | }|| }t|}|S r   )rK   reprlibrepr)r   rN   keyrM   valuer	   r	   r
   	dict_item   s   
zIdbAdapter.dict_itemN)r   r    r!   r   r%   r(   r)   r+   r.   r2   r8   r<   rB   rC   rH   rO   rR   rW   r[   r^   ra   rd   ri   r	   r	   r	   r
   r"   F   s*    
	r"   c                 C   s.   	 t | |}t|}t|}| t| tS r   )r   r   ZIdbr"   registeridb_adap_oid)Z
rpchandlerr   Z	gui_proxyr#   Zidb_adapr	   r	   r
   start_debugger   s   
	
rl   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )
FrameProxyc                 C   s   || _ || _d| _i | _d S )Nr   )_conn_fid_oid
_dictcache)r   r   r   r	   r	   r
   r      s   
zFrameProxy.__init__c                 C   sb   |d d dkrt ||dkr|  S |dkr|  S |dkr$|  S | j| jd| j|fi S )Nr   _rS   rJ   rQ   rH   )AttributeError_get_f_code_get_f_globals_get_f_localsrn   r   rp   ro   r   rG   r	   r	   r
   __getattr__   s   
zFrameProxy.__getattr__c                 C   s(   | j | jd| jfi }t| j | j|S )NrW   )rn   r   rp   ro   	CodeProxy)r   rV   r	   r	   r
   rt      s   zFrameProxy._get_f_codec                 C   "   | j | jd| jfi }| |S )NrO   rn   r   rp   ro   _get_dict_proxyr`   r	   r	   r
   ru         
zFrameProxy._get_f_globalsc                 C   rz   )NrR   r{   r`   r	   r	   r
   rv      r}   zFrameProxy._get_f_localsc                 C   s2   || j v r
| j | S t| j| j|}|| j |< |S r   )rq   	DictProxyrn   rp   )r   rN   Zdpr	   r	   r
   r|      s
   


zFrameProxy._get_dict_proxyN)	r   r    r!   r   rx   rt   ru   rv   r|   r	   r	   r	   r
   rm      s    rm   c                   @      e Zd Zdd Zdd ZdS )ry   c                 C      || _ || _|| _d S r   )rn   rp   _cid)r   r   r   rV   r	   r	   r
   r         
zCodeProxy.__init__c                 C   sD   |dkr| j | jd| jfi S |dkr | j | jd| jfi S d S )NrY   r[   r]   r^   )rn   r   rp   r   rw   r	   r	   r
   rx      s   zCodeProxy.__getattr__N)r   r    r!   r   rx   r	   r	   r	   r
   ry      s    ry   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r~   c                 C   r   r   )rn   rp   _did)r   r   r   rN   r	   r	   r
   r     r   zDictProxy.__init__c                 C   s   | j | jd| jfi S )Nrd   rn   r   rp   r   r&   r	   r	   r
   rc     s   

zDictProxy.keysc                 C   s   | j | jd| j|fi S )Nri   r   )r   rg   r	   r	   r
   __getitem__  s   
zDictProxy.__getitem__c                 C   s   t |r   )rs   rw   r	   r	   r
   rx     s   zDictProxy.__getattr__N)r   r    r!   r   rc   r   rx   r	   r	   r	   r
   r~     s
    	r~   c                   @   r   )
GUIAdapterc                 C   r   r   )r   gui)r   r   r   r	   r	   r
   r     r   zGUIAdapter.__init__c                 C   s    t | j|}| j||| d S r   )rm   r   r   r   )r   r   r   r   r   r	   r	   r
   r   !  s   zGUIAdapter.interactionNr   r	   r	   r	   r
   r     s    r   c                   @   sl   e Z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d Zdd Zdd Zdd ZdS )IdbProxyc                 C   s   || _ || _|| _d S r   )r   r   shell)r   r   r   r   r	   r	   r
   r   )  r   zIdbProxy.__init__c                O   s   | j | j|||}|S r   )r   r   r   )r   Z
methodnameargskwargsrh   r	   r	   r
   call.  s   zIdbProxy.callc                 C   s$   | j | jd|fi }|| jj_d S )Nr8   )r   Z
asyncqueuer   r   ZinterpZ
active_seq)r   r:   localsseqr	   r	   r
   r8   4  s   zIdbProxy.runc                    s.     d|j|\}} fdd|D }||fS )Nr2   c                    s    g | ]\}}t  j||fqS r	   )rm   r   )r/   r   r0   r&   r	   r
   r1   <  s     z&IdbProxy.get_stack.<locals>.<listcomp>r   ro   )r   r   r3   r5   r6   r	   r&   r
   r2   9  s   zIdbProxy.get_stackc                 C      |  d d S )Nr)   r   r&   r	   r	   r
   r)   ?  r'   zIdbProxy.set_continuec                 C   r   )Nr%   r   r&   r	   r	   r
   r%   B  r'   zIdbProxy.set_stepc                 C      |  d|j d S )Nr+   r   r   r   r	   r	   r
   r+   E     zIdbProxy.set_nextc                 C   r   )Nr.   r   r   r	   r	   r
   r.   H  r   zIdbProxy.set_returnc                 C   r   )Nr(   r   r&   r	   r	   r
   r(   K  r'   zIdbProxy.set_quitc                 C      |  d||}|S )Nr<   r   r=   r	   r	   r
   r<   N  rA   zIdbProxy.set_breakc                 C   r   )NrB   r   r=   r	   r	   r
   rB   R  rA   zIdbProxy.clear_breakc                 C   s   |  d|}|S )NrC   r   rD   r	   r	   r
   rC   V  rE   zIdbProxy.clear_all_file_breaksN)r   r    r!   r   r   r8   r2   r)   r%   r+   r.   r(   r<   rB   rC   r	   r	   r	   r
   r   '  s    r   c                 C   sF   	 |  ddtfi at| |t}t||}t| |}| t| |S NexecZstart_the_debugger)r   r   rk   r   r   ZDebuggerr   rj   )rpccltZpyshellZ	idb_proxyr   Zgui_adapr	   r	   r
   start_remote_debuggerZ  s   
r   c                 C   s   	 t |  | t d S r   )close_subprocess_debugger
unregisterr   r   r	   r	   r
   close_remote_debuggerr  s   r   c                 C   s   |  ddtfi  d S )Nr   Zstop_the_debugger)r   rk   r   r	   r	   r
   r   ~  s   r   c                 C   s   |  ddtfi }d S r   )r   r   )r   Zidb_adap_oid_retr	   r	   r
   restart_subprocess_debugger  s   r   r7   )mainz!idlelib.idle_test.test_debugger_rr   F)	verbosityexit)re   typesZidlelibr   Z	debuggingrk   r   r   rK   rT   r   r   r   r   r"   rl   rm   ry   r~   r   r   r   r   r   r   r   Zunittestr   r	   r	   r	   r
   <module>   s:    m*3