o
    IAfa~                     @   s   	 d dl Z d dlZd dlZd dlmZmZmZ g dZeeB eB ZG dd de	Z
G dd dZdd	 ZG d
d dZdd Zdd ZG dd deZdd Zdd Zdd ZdS )    N)CO_GENERATORCO_COROUTINECO_ASYNC_GENERATOR)BdbQuitBdb
Breakpointc                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r   r   /usr/lib/python3.10/bdb.pyr      s    r   c                   @   s  e Z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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%d&Zd]d'd(Zd)d* Zd+d, Zd-d. Zd]d/d0Zd1d2 Zd3d4 Zd5d6 Z		d_d8d9Zd:d; Zd<d= Zd>d? Z d@dA Z!dBdC Z"dDdE Z#dFdG Z$dHdI Z%dJdK Z&dLdM Z'dNdO Z(dPdQ Z)d`dSdTZ*dadUdVZ+dadWdXZ,dYdZ Z-d[d\ Z.dS )br   Nc                 C   s0   |rt |nd | _i | _i | _d | _|   d S N)setskipbreaksfncacheframe_returning_load_breaks)selfr   r   r   r   __init__   s
   zBdb.__init__c                 C   sT   	 |d|dd  d kr|S | j |}|s(tj|}tj|}|| j |< |S )N<   >)r   getospathabspathnormcase)r   filenamecanonicr   r   r   r    '   s   
zBdb.canonicc                 C   s(   	 dd l }|  d | _| d d  d S )Nr   )	linecache
checkcachebotframe_set_stopinfo)r   r!   r   r   r   reset8   s
   z	Bdb.resetc                 C   s   	 | j rd S |dkr| |S |dkr| ||S |dkr#| ||S |dkr-| ||S |dkr4| jS |dkr;| jS |dkrB| jS tdt| | jS )	Nlinecallreturn	exceptionZc_callZc_exceptionZc_returnz*bdb.Bdb.dispatch: unknown debugging event:)quittingdispatch_linedispatch_calldispatch_returndispatch_exceptiontrace_dispatchprintrepr)r   frameeventargr   r   r   r/   ?   s&   
zBdb.trace_dispatchc                 C   s0   	 |  |s| |r| | | jrt| jS r   )	stop_here
break_here	user_liner*   r   r/   r   r2   r   r   r   r+   j   s
   

zBdb.dispatch_linec                 C   sf   	 | j d u r|j| _ | jS | |s| |sd S | jr%|jjt@ r%| jS | 	|| | j
r0t| jS r   )r#   f_backr/   r5   break_anywhere	stopframef_codeco_flagsGENERATOR_AND_COROUTINE_FLAGS	user_callr*   r   r   r2   r4   r   r   r   r,   v   s   

zBdb.dispatch_callc                 C   s   	 |  |s|| jkr?| jr|jjt@ r| jS z|| _| || W d | _nd | _w | j	r/t
| j|u r?| jdkr?| d d  | jS Nr   )r5   returnframer;   r<   r=   r>   r/   r   user_returnr*   r   
stoplinenor$   r@   r   r   r   r-      s   
zBdb.dispatch_returnc                 C   s   	 |  |r&|jjt@ r|d tu r|d d u s#| || | jr#t| j
S | jrH|| jurH| jjjt@ rH|d tt	fv rH| || | jrHt| j
S )Nr      )r5   r<   r=   r>   StopIterationuser_exceptionr*   r   r;   GeneratorExitr/   r@   r   r   r   r.      s   


zBdb.dispatch_exceptionc                 C   s0   	 |d u rdS | j D ]}t||r dS q
dS NFT)r   fnmatch)r   module_namepatternr   r   r   is_skipped_module   s   
zBdb.is_skipped_modulec                 C   sP   	 | j r| |jdrdS || ju r!| jdkrdS |j| jkS | js&dS dS )Nr   Fr   T)r   rM   	f_globalsr   r;   rD   f_linenor8   r   r   r   r5      s   

zBdb.stop_herec                 C   s   	 |  |jj}|| jvrdS |j}|| j| vr&|jj}|| j| vr&dS t|||\}}|rC|j| _|rA|j	rA| 
t|j dS dS rI   )r    r<   co_filenamer   rO   co_firstlineno	effectivenumberZ	currentbp	temporarydo_clearstr)r   r2   r   linenobpflagr   r   r   r6      s    

zBdb.break_herec                 C   s
   	 t d)Nz)subclass of bdb must implement do_clear())NotImplementedError)r   r4   r   r   r   rU      s   zBdb.do_clearc                 C   s   	 |  |jj| jv S r   )r    r<   rP   r   r8   r   r   r   r:      s   zBdb.break_anywherec                 C      	 d S r   r   )r   r2   Zargument_listr   r   r   r?        zBdb.user_callc                 C   r[   r   r   r8   r   r   r   r7     r\   zBdb.user_linec                 C   r[   r   r   )r   r2   Zreturn_valuer   r   r   rC     r\   zBdb.user_returnc                 C   r[   r   r   )r   r2   exc_infor   r   r   rG     r\   zBdb.user_exceptionr   c                 C   s   	 || _ || _d| _|| _d S NF)r;   rB   r*   rD   )r   r;   rB   rD   r   r   r   r$     s
   
zBdb._set_stopinfoc                 C   s&   	 |d u r
|j d }| ||| d S Nr   )rO   r$   )r   r2   rW   r   r   r   	set_until$  s   
zBdb.set_untilc                 C   s2   	 | j r| j j}|r|js| j|_| d d  d S r   )r   r9   f_tracer/   r$   )r   Zcaller_framer   r   r   set_step,  s   
zBdb.set_stepc                 C   s   	 |  |d  d S r   )r$   r8   r   r   r   set_next8  s   zBdb.set_nextc                 C   s2   	 |j jt@ r| |d d d S | |j| d S rA   )r<   r=   r>   r$   r9   r8   r   r   r   
set_return<  s   zBdb.set_returnc                 C   sP   	 |d u r
t  j}|   |r| j|_|| _|j}|s|   t | j d S r   )	sys	_getframer9   r%   r/   ra   r#   rb   settracer8   r   r   r   	set_traceC  s   
zBdb.set_tracec                 C   sf   	 |  | jd d | js+td  t j}|r-|| jur1|`|j}|r/|| jusd S d S d S d S d S rA   )r$   r#   r   re   rg   rf   r9   ra   r8   r   r   r   set_continueR  s   

zBdb.set_continuec                 C   s$   	 | j | _d | _d| _td  d S NT)r#   r;   rB   r*   re   rg   r   r   r   r   set_quita  s
   zBdb.set_quitc                 C   s*   	 | j |g }||vr|| d S d S r   )r   
setdefaultappend)r   r   rW   Z
bp_linenosr   r   r   _add_to_breaksr  s
   zBdb._add_to_breaksFc           	      C   sP   	 |  |}dd l}|||}|sd||f S | || t|||||}d S )Nr   zLine %s:%d does not exist)r    r!   getlinero   r   )	r   r   rW   rT   condfuncnamer!   r&   rX   r   r   r   	set_breakx  s   
zBdb.set_breakc                 C   s&   	 t j D ]
\}}| || qd S r   )r   bplistkeysro   r   r   rW   r   r   r   r     s   zBdb._load_breaksc                 C   s:   	 ||ft jvr| j| | | j| s| j|= d S d S r   )r   rt   r   removerv   r   r   r   _prune_breaks  s   
zBdb._prune_breaksc                 C   sl   	 |  |}|| jvrd| S || j| vrd||f S tj||f d d  D ]}|  q'| || d S )NThere are no breakpoints in %szThere is no breakpoint at %s:%d)r    r   r   rt   deleteMerx   )r   r   rW   rX   r   r   r   clear_break  s   


zBdb.clear_breakc              
   C   sZ   	 z|  |}W n ty } z
t|W  Y d }~S d }~ww |  | |j|j d S r   )get_bpbynumber
ValueErrorrV   rz   rx   filer&   )r   r4   rX   errr   r   r   clear_bpbynumber  s   zBdb.clear_bpbynumberc                 C   sZ   	 |  |}|| jvrd| S | j| D ]}tj||f }|D ]}|  qq| j|= d S )Nry   )r    r   r   rt   rz   )r   r   r&   ZblistrX   r   r   r   clear_all_file_breaks  s   


zBdb.clear_all_file_breaksc                 C   s.   	 | j sdS tjD ]}|r|  q	i | _ d S )NzThere are no breakpoints)r   r   
bpbynumberrz   )r   rX   r   r   r   clear_all_breaks  s   
zBdb.clear_all_breaksc                 C   s|   	 |st dzt|}W n t y   t d| d w ztj| }W n ty1   t d| d w |d u r<t d| |S )NzBreakpoint number expectedz Non-numeric breakpoint number %sz!Breakpoint number %d out of rangezBreakpoint %d already deleted)r}   intr   r   
IndexError)r   r4   rS   rX   r   r   r   r|     s    zBdb.get_bpbynumberc                 C   s$   	 |  |}|| jv o|| j| v S r   r    r   rv   r   r   r   	get_break  s
   

zBdb.get_breakc                 C   s6   	 |  |}|| jv r|| j| v rtj||f pg S r   )r    r   r   rt   rv   r   r   r   
get_breaks  s   

zBdb.get_breaksc                 C   s$   	 |  |}|| jv r| j| S g S r   r   )r   r   r   r   r   get_file_breaks  s
   


zBdb.get_file_breaksc                 C   s   	 | j S r   )r   rk   r   r   r   get_all_breaks	  s   zBdb.get_all_breaksc                 C   s   	 g }|r|j |u r|j}|d ur&|||jf || ju rn|j}|d us|  tdt|d }|d urG||j |j	f |j}|d us7|d u rTtdt|d }||fS )Nr   r   )
tb_frametb_nextrn   rO   r#   r9   reversemaxlen	tb_lineno)r   ftstackir   r   r   	get_stack  s&   
zBdb.get_stack: c                 C   s   	 dd l }dd l}|\}}| |jj}d||f }|jjr%||jj7 }n|d7 }|d7 }d|jv rB|jd }	|d7 }|||	7 }||||j	}
|
rT|||

  7 }|S )Nr   z%s(%r)z<lambda>z()Z
__return__z->)r!   reprlibr    r<   rP   co_namef_localsr1   rp   rN   strip)r   Zframe_linenoZlprefixr!   r   r2   rW   r   srvr&   r   r   r   format_stack_entry'  s"   

zBdb.format_stack_entryc              	   C   s   	 |d u rdd l }|j}|d u r|}|   t|tr!t|dd}t| j z(zt	||| W n	 t
y9   Y nw W d| _td  d S W d| _td  d S d| _td  w )Nr   z<string>execT)__main____dict__r%   
isinstancerV   compilere   rg   r/   r   r   r*   )r   cmdglobalslocalsr   r   r   r   runF  s.   
zBdb.runc              	   C   s   	 |d u rdd l }|j}|d u r|}|   t| j z%zt|||W W d| _td  S  ty6   Y nw W d| _td  d S d| _td  w )Nr   T)	r   r   r%   re   rg   r/   evalr*   r   )r   exprr   r   r   r   r   r   runeval\  s(   zBdb.runevalc                 C   s   	 |  ||| d S r   )r   )r   r   r   r   r   r   r   runctxp  s   z
Bdb.runctxc             	   O   s   	 |    t| j d }z)z	||i |}W n	 ty    Y nw W d| _td  |S W d| _td  |S d| _td  w rj   )r%   re   rg   r/   r   r*   )r   funcargskwdsresr   r   r   runcallw  s&   

zBdb.runcallr   )r   FNN)r   NN)/r   r	   r
   r   r    r%   r/   r+   r,   r-   r.   rM   r5   r6   rU   r:   r?   r7   rC   rG   r$   r`   rb   rc   rd   rh   ri   rl   ro   rs   r   rx   r{   r   r   r   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s`    
+	







r   c                   C   s   	 t    d S r   )r   rh   r   r   r   r   rh     s   rh   c                   @   sd   e Zd Z	 dZi ZdgZdddZedd Zdd	 Z	d
d Z
dd ZdddZdd Zdd ZdS )r   r   NFc                 C   s   || _ d | _|| _|| _|| _|| _d| _d| _d| _t	j
| _t	 j
d7  _
| j|  ||f| jv r?| j||f |  d S | g| j||f< d S )NTr   r   )rr   func_first_executable_liner~   r&   rT   rq   enabledignorehitsr   nextrS   r   rn   rt   )r   r~   r&   rT   rq   rr   r   r   r   r     s   zBreakpoint.__init__c                   C   s   dt _i t _d gt _d S r_   )r   r   rt   r   r   r   r   r   clearBreakpoints  s   zBreakpoint.clearBreakpointsc                 C   sD   	 | j | jf}d | j| j< | j| |  | j| s | j|= d S d S r   )r~   r&   r   rS   rt   rw   )r   indexr   r   r   rz     s   
zBreakpoint.deleteMec                 C      	 d| _ d S rj   r   rk   r   r   r   enable     
zBreakpoint.enablec                 C   r   r^   r   rk   r   r   r   disable  r   zBreakpoint.disablec                 C   s$   	 |d u rt j}t|  |d d S )N)r~   )re   stdoutr0   bpformat)r   outr   r   r   bpprint  s   zBreakpoint.bpprintc                 C   s   	 | j rd}nd}| jr|d }n|d }d| j|| j| jf }| jr+|d| jf 7 }| jr6|d| jf 7 }| jrL| jdkrAd	}nd
}|d| j|f 7 }|S )Nzdel  zkeep zyes  zno   z%-4dbreakpoint   %s at %s:%dz
	stop only if %sz
	ignore next %d hitsr   r    z"
	breakpoint already hit %d time%s)rT   r   rS   r~   r&   rq   r   r   )r   Zdispretssr   r   r   r     s(   

zBreakpoint.bpformatc                 C   s   	 d| j | j| jf S )Nzbreakpoint %s at %s:%s)rS   r~   r&   rk   r   r   r   __str__  s   zBreakpoint.__str__r   r   )r   r	   r
   r   rt   r   r   staticmethodr   rz   r   r   r   r   r   r   r   r   r   r     s    



r   c                 C   sP   	 | j s| j|jkrdS dS |jj| j krdS | js|j| _| j|jkr&dS dS rI   )rr   r&   rO   r<   r   r   )br2   r   r   r   checkfuncname  s   r   c                 C   s   	 t j| |f }|D ]U}|jsq
t||sq
| jd7  _|js3|jdkr-| jd8  _q
|df  S z!t|j|j|j	}|rS|jdkrL| jd8  _n|dfW   S W q
   |df Y   S dS )Nr   r   TFr   )
r   rt   r   r   r   rq   r   r   rN   r   )r~   r&   r2   Z	possiblesr   valr   r   r   rR   (  s.   


rR   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Tdbc                 C   s    |j j}|sd}td|| d S )N???z+++ call)r<   r   r0   )r   r2   r   namer   r   r   r?   ^  s   zTdb.user_callc                 C   sT   dd l }|jj}|sd}| |jj}|||j|j}td||j|d|	  d S )Nr   r   z+++:)
r!   r<   r   r    rP   rp   rO   rN   r0   r   )r   r2   r!   r   fnr&   r   r   r   r7   b  s   zTdb.user_linec                 C   s   t d| d S )Nz
+++ returnr0   )r   r2   Zretvalr   r   r   rC   i  s   zTdb.user_returnc                 C   s   t d| |   d S )Nz+++ exception)r0   ri   )r   r2   Z	exc_stuffr   r   r   rG   k  s   
zTdb.user_exceptionN)r   r	   r
   r?   r7   rC   rG   r   r   r   r   r   ]  s
    r   c                 C   s&   t d| d t| d }t d| d S )Nzfoo()
   zbar returned)r0   bar)nxr   r   r   fooo  s   r   c                 C   s   t d| d | d S )Nzbar(r   rE   r   )ar   r   r   r   t  s   r   c                  C   s   t  } | d d S )Nzimport bdb; bdb.foo(10))r   r   )r   r   r   r   testx  s   r   )rJ   re   r   inspectr   r   r   __all__r>   	Exceptionr   r   rh   r   r   rR   r   r   r   r   r   r   r   r   <module>   s*        |z 5