o
     JAf÷  ã                   @   sž  	 d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZG dd„ deƒZg d¢Zdd„ Zdd„ Zd	d
„ ZG dd„ deƒZdZG dd„ dejejƒZedurg d¢ZeD ]Zeeede ƒj ¡ d 7 Zqteej j7 Z[[d+dd„Z!d+dd„Z"dd„ Z#dd„ Z$ddœdd„Z%d,dd„Z&d d!„ Z'd"Z(d#d$„ Z)d%d&„ Z*d'Z+d(d)„ Z,e-d*krÍd dl.Z.e. ,¡  dS dS )-é    Nc                   @   s   e Zd Z	 dS )ÚRestartN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú/usr/lib/python3.10/pdb.pyr   W   s    r   )	ÚrunÚpmÚPdbÚrunevalÚrunctxÚruncallÚ	set_traceÚpost_mortemÚhelpc                 C   sž   t  dt  | ¡ ¡}zt |¡}W n
 ty   Y d S w |' t|ddD ]\}}| |¡r<| ||f  W  d   ƒ S q%W d   ƒ d S 1 sHw   Y  d S )Nzdef\s+%s\s*[(]é   )Ústart)ÚreÚcompileÚescapeÚtokenizeÚopenÚOSErrorÚ	enumerateÚmatch)ÚfuncnameÚfilenameZcreÚfpÚlinenoÚliner   r   r   Úfind_function^   s"   ÿ
ýÿ
ÿür    c                 C   sX   t  | ¡\}}t  | ¡r| j| ju r|dfS t  | ¡r|dfS t  ||d … ¡|d fS ©Nr   )ÚinspectZ
findsourceZisframeÚ	f_globalsÚf_localsZismoduleZgetblock)ÚobjÚlinesr   r   r   r   Úgetsourcelinesk   s   
r'   c                 C   s8   t t | ¡ƒ}| ¡  |D ]\}}||kr|  S qdS ©Nr   )ÚlistÚdisZfindlinestartsÚreverse)ÚcodeZlastiZ
linestartsÚir   r   r   r   Úlasti2linenot   s   ÿr.   c                   @   s   e Zd Z	 dd„ ZdS )Ú_rstrc                 C   s   | S ©Nr   ©Úselfr   r   r   Ú__repr__   s   z_rstr.__repr__N)r   r   r   r3   r   r   r   r   r/   }   s    r/   z
-> c                   @   s(  e Zd 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(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ ZeZd£d8d9„Zd:d;„ ZeZ eZ!eZ"d<d=„ Z#eZ$d>d?„ Z%d@dA„ Z&dBdC„ Z'eZ(dDdE„ Z)eZ*dFdG„ Z+eZ,dHdI„ Z-eZ.dJdK„ Z/e/Z0eZ1eZ2dLdM„ Z3e3Z4e3Z5dNdO„ Z6dPdQ„ Z7e7Z8dRdS„ Z9e9Z:dTdU„ Z;e;Z<dVdW„ Z=e=Z>dXdY„ Z?e?Z@dZd[„ ZAeAZBd\d]„ ZCeCZDd^d_„ ZEeE ZFZGd`da„ ZHeHZIdbdc„ ZJeZKddde„ ZLeLZMeLZNdfdg„ ZOdhdi„ ZPePZQdjdk„ ZReRZSdldm„ ZTd¤dndo„ZUdpdq„ ZVdrds„ ZWdtdu„ ZXdvdw„ ZYeZZeZ[eZ\dxdy„ Z]e]Z^dzd{„ Z_e_Z`d|d}„ ZaeZbd¥dd€„Zcdd‚„ ZdeZedƒd„„ ZfeZgd…d†„ Zhd‡dˆ„ Zid‰dŠ„ Zjd‹dŒ„ ZkddŽ„ Zldd„ Zmg d‘¢Znd’d“„ Zoepfd”d•„Zqd–d—„ ZrerZsd˜d™„ Ztdšd›„ Zudœd„ ZvdždŸ„ Zwd d¡„ ZxdS )¦r
   NÚtabFTc           	      C   s\  t jj| |d tj | |||¡ t d¡ |rd| _d| _i | _	i | _
d| _d| _i | _zdd l}| d¡ W n	 tyA   Y nw d| _|| _g | _|rz ttj d¡ƒ}| j |¡ W d   ƒ n1 sgw   Y  W n	 tyv   Y nw ztd	ƒ}| j |¡ W d   ƒ n1 sw   Y  W n	 tyœ   Y nw i | _i | _i | _d| _d | _d S )
N)Úskipzpdb.Pdbr   z(Pdb) Ú Fz 	
`@#$%^&*()=+[{]}\|;:'",<>?z~/.pdbrcz.pdbrc)ÚbdbÚBdbÚ__init__ÚcmdÚCmdÚsysÚauditZuse_rawinputÚpromptÚaliasesÚ
displayingÚ
mainpyfileÚ_wait_for_mainpyfileÚ	tb_linenoÚreadlineZset_completer_delimsÚImportErrorÚallow_kbdintÚnosigintÚrcLinesr   ÚosÚpathÚ
expanduserÚextendr   ÚcommandsÚcommands_dopromptÚcommands_silentÚcommands_definingÚcommands_bnum)	r2   ÚcompletekeyÚstdinÚstdoutr5   rG   ZreadrcrD   ZrcFiler   r   r   r9   Ž   sT   
ÿÿ€ÿ
ÿ€ÿ
zPdb.__init__c                 C   s*   | j rt‚|  d¡ |  ¡  |  |¡ d S )Nz-
Program interrupted. (Use 'cont' to resume).)rF   ÚKeyboardInterruptÚmessageÚset_stepr   )r2   ÚsignumÚframer   r   r   Úsigint_handler½   s
   
zPdb.sigint_handlerc                 C   s   t j | ¡ |  ¡  d S r0   )r7   r8   ÚresetÚforgetr1   r   r   r   r[   Ä   s   z	Pdb.resetc                 C   s&   d | _ g | _d| _d | _| j ¡  d S r(   )r   ÚstackÚcurindexÚcurframerC   Úclearr1   r   r   r   r\   È   s
   z
Pdb.forgetc                 C   sj   |   ¡  |  ||¡\| _| _|r#t|jj|jƒ}|| j|j< |j	}|s| j| j d | _
| j
j| _|  ¡ S r(   )r\   Z	get_stackr]   r^   r.   Útb_frameÚf_codeÚtb_lastirC   Útb_nextr_   r$   Úcurframe_localsÚexecRcLines)r2   ÚfÚtbr   r   r   r   ÚsetupÏ   s   ú
z	Pdb.setupc                 C   sj   | j sd S | j }| ¡  g | _ |r3| ¡  ¡ }|r/|d dkr/|  |¡r/|  j t|ƒ7  _ dS |sd S d S )Nr   ú#T)rH   r+   ÚpopÚstripÚonecmdÚreversed)r2   rH   r   r   r   r   rf   á   s   
øzPdb.execRcLinesc                 C   s4   	 | j rd S |  |¡r|  d¡ |  |d ¡ d S d S )Nz--Call--)rB   Z	stop_hererV   Úinteraction)r2   rY   Zargument_listr   r   r   Ú	user_callõ   s   

þzPdb.user_callc                 C   sN   	 | j r| j|  |jj¡ks|jdkrd S d| _ |  |¡r%|  |d ¡ d S d S )Nr   F)rB   rA   Úcanonicrb   Úco_filenameÚf_linenoÚbp_commandsro   )r2   rY   r   r   r   Ú	user_lineþ   s   

ÿzPdb.user_linec                 C   s–   	 t | ddƒrI| j| jv rI| j}d| _| j}|  |d ¡ | j| D ]}|  |¡ q!|| _| j| s:|  | j| j	 ¡ | j
| rC|  ¡  |  ¡  d S dS )NÚ	currentbpFr   r   )Úgetattrrv   rM   Úlastcmdri   rm   rO   Úprint_stack_entryr]   r^   rN   Ú_cmdloopr\   )r2   rY   rv   Zlastcmd_backr   r   r   r   rt     s"   

zPdb.bp_commandsc                 C   s0   	 | j rd S ||jd< |  d¡ |  |d ¡ d S )NÚ
__return__z
--Return--)rB   r$   rV   ro   )r2   rY   Zreturn_valuer   r   r   Úuser_return   s   

zPdb.user_returnc                 C   sj   	 | j rd S |\}}}||f|jd< |s|tu rdnd}|  d|t ||¡d  ¡ f ¡ |  ||¡ d S )NZ__exception__z	Internal r6   z%s%séÿÿÿÿ)rB   r$   ÚStopIterationrV   Ú	tracebackÚformat_exception_onlyrl   ro   )r2   rY   Úexc_infoÚexc_typeÚ	exc_valueÚexc_tracebackÚprefixr   r   r   Úuser_exception(  s   
ÿÿÿzPdb.user_exceptionc                 C   s<   	 zd| _ |  ¡  d| _ W d S  ty   |  d¡ Y nw q)NTFz--KeyboardInterrupt--)rF   ÚcmdlooprU   rV   r1   r   r   r   rz   <  s   ÿøzPdb._cmdloopc                 C   sb   | j  | j¡}|r-| ¡ D ]!\}}|  |¡}||ur,||kr,|||< |  d|||f ¡ qd S d S )Nzdisplay %s: %r  [old: %r])r@   Úgetr_   ÚitemsÚ_getval_exceptrV   )r2   r@   ÚexprZoldvalueZnewvaluer   r   r   ÚpreloopI  s   
ÿ€øzPdb.preloopc                 C   sr   t jrz
t tjt j¡ W n	 ty   Y nw d t _|  ||¡r&|  ¡  d S |  | j| j	 ¡ |  
¡  |  ¡  d S r0   )r
   Ú_previous_sigint_handlerÚsignalÚSIGINTÚ
ValueErrorri   r\   ry   r]   r^   rz   )r2   rY   r   r   r   r   ro   V  s   ÿzPdb.interactionc                 C   s    	 |d ur|   t|ƒ¡ d S d S r0   )rV   Úrepr)r2   r%   r   r   r   Údisplayhookh  s   ÿzPdb.displayhookc                 C   s¶   |d d… dkr|dd … }| j }| jj}z;t|d ddƒ}tj}tj}tj}z| jt_| jt_| jt_t|||ƒ W |t_|t_|t_W d S |t_|t_|t_w    |  	¡  Y d S )Nr   ú!Ú
z<stdin>Zsingle)
re   r_   r#   r   r<   rT   rS   r’   ÚexecÚ
_error_exc)r2   r   ÚlocalsÚglobalsr,   Zsave_stdoutZ
save_stdinZsave_displayhookr   r   r   Údefaultp  s*   þzPdb.defaultc                 C   sæ   	 |  ¡ s|S | ¡ }|d | jv rJ| j|d  }d}|dd … D ]}| dt|ƒ |¡}|d7 }q!| dd |dd … ¡¡}| ¡ }|d | jv s|d dkrq| d¡}|dkrq||d d …  ¡ }| j 	|¡ |d |…  
¡ }|S )	Nr   r   ú%z%*ú Úaliasz;;é   )rl   Úsplitr?   ÚreplaceÚstrÚjoinÚfindÚlstripÚcmdqueueÚappendÚrstrip)r2   r   ÚargsÚiiZtmpArgZmarkerÚnextr   r   r   Úprecmd…  s,   ÿ
ø
z
Pdb.precmdc                 C   s    	 | j stj | |¡S |  |¡S r0   )rP   r:   r;   rm   Úhandle_command_def)r2   r   r   r   r   rm   ž  s   
z
Pdb.onecmdc                 C   sÄ   	 |   |¡\}}}|sd S |dkrd| j| j< d S |dkr"g | _dS | j| j }|r4| |d | ¡ n| |¡ z	t| d| ƒ}W n tyN   | j}Y nw |j	| j
v r`d| j| j< g | _dS d S )NZsilentTÚendr   r›   Údo_F)Z	parselinerO   rQ   r¤   rM   r¥   rw   ÚAttributeErrorr™   r   Úcommands_resumingrN   )r2   r   r:   ÚargZcmdlistÚfuncr   r   r   r«   ª  s0   

ÿzPdb.handle_command_defc                 C   s   t || jd d S )N©Úfile©ÚprintrT   ©r2   Úmsgr   r   r   rV   È  ó   zPdb.messagec                 C   s   t d|| jd d S )Nz***r²   r´   r¶   r   r   r   ÚerrorË  ó   z	Pdb.errorc                 C   s¤   |  ¡  d¡r	g S z
|  ||||¡}W n ty   g }Y nw t t |¡d ¡}|D ]$}tj |¡r;| 	|d ¡ q+tj 
|¡rO| ¡  d¡rO| 	|d ¡ q+|S )N)ú:ú,Ú*ú/)ú.pyz.pywr»   )rl   ÚendswithÚ_complete_expressionÚ	ExceptionÚglobr   rI   rJ   Úisdirr¥   ÚisfileÚlower)r2   Útextr   ÚbegidxÚendidxÚretÚglobsÚfnr   r   r   Ú_complete_locationÑ  s   ÿ€zPdb._complete_locationc                    s   ‡ fdd„t tjjƒD ƒS )Nc                    s.   g | ]\}}|d urt |ƒ ˆ ¡rt |ƒ‘qS r0   )r    Ú
startswith)Ú.0r-   Úbp©rÇ   r   r   Ú
<listcomp>è  s    ÿz*Pdb._complete_bpnumber.<locals>.<listcomp>)r   r7   Ú
BreakpointÚ
bpbynumber©r2   rÇ   r   rÈ   rÉ   r   rÑ   r   Ú_complete_bpnumberä  s   zPdb._complete_bpnumberc              	      sº   | j sg S i | j j¥| j¥}dˆv rRˆ d¡‰ z|ˆ d  }ˆ dd… D ]}t||ƒ}q$W n ttfy:   g  Y S w d ˆ d d… ¡d ‰‡ ‡fdd„t|ƒD ƒS ‡fdd„| 	¡ D ƒS )NÚ.r   r   r}   c                    s"   g | ]}|  ˆ d  ¡rˆ| ‘qS )r}   ©rÎ   ©rÏ   Ún)Údottedr…   r   r   rÒ   ÿ  s   " z,Pdb._complete_expression.<locals>.<listcomp>c                    ó   g | ]	}|  ˆ ¡r|‘qS r   rØ   rÙ   rÑ   r   r   rÒ     ó    )
r_   r#   re   rž   rw   ÚKeyErrorr®   r¡   ÚdirÚkeys)r2   rÇ   r   rÈ   rÉ   Únsr%   Úpartr   )rÛ   r…   rÇ   r   rÁ   ë  s    
ÿÿzPdb._complete_expressionc                 C   sD  	 |st tjjƒd }nzt|ƒ}W n   |  d¡ Y d S || _|| jv r5| j| | j| | j	| f}nd }g | j|< d| j|< d| j	|< | j
}d| _
d| _zKz|  ¡  W n2 tyˆ   |ru|d | j|< |d | j|< |d | j	|< n| j|= | j|= | j	|= |  d¡ Y n
w W d| _|| _
d S W d| _|| _
d S d| _|| _
w )	Nr   z.Usage: commands [bnum]
        ...
        endTFz(com) r   r   z1command definition aborted, old commands restored)Úlenr7   rÓ   rÔ   Úintr¹   rQ   rM   rN   rO   r>   rP   r‡   rU   )r2   r°   ZbnumZold_command_defsZprompt_backr   r   r   Údo_commands  sR   $

þ


öÿ
ý
ÿzPdb.do_commandsr   c              
   C   s.  	 |s| j r|  d¡ tjjD ]}|r|  | ¡ ¡ qd S d }d }d }| d¡}|dkr>||d d …  ¡ }|d |…  ¡ }| 	d¡}d }	|dkr…|d |…  ¡ }|  
|¡}
|
sa|  d| ¡ d S |
}||d d …  ¡ }zt|ƒ}W ni ty„   |  d| ¡ Y d S w zt|ƒ}W nQ tyÜ   zt|| jj| jƒ}W n   |}Y zt|dƒr­|j}|j}|j}	|j}|j}W n   |  |¡\}}}|sÓ|  d	| ¡ Y Y d S |}	t|ƒ}Y Y nw |sã|  ¡ }|  ||¡}|r|  |||||	¡}|rþ|  |¡ d S |  ||¡d
 }|  d|j|j|jf ¡ d S d S )Nz!Num Type         Disp Enb   Wherer¼   r   r   r»   z%r not found from sys.pathzBad lineno: %sÚ__func__zJThe specified object %r is not a function or was not found along sys.path.r}   zBreakpoint %d at %s:%d) ÚbreaksrV   r7   rÓ   rÔ   Zbpformatr¢   r£   r¦   ÚrfindÚlookupmoduler¹   rä   r   Úevalr_   r#   re   Úhasattrræ   Ú__code__Úco_nameÚco_firstlinenorr   ÚlineinfoÚdefaultFileÚ	checklineZ	set_breakÚ
get_breaksÚnumberr³   r   )r2   r°   Z	temporaryrÐ   r   r   ÚcondZcommaÚcolonr   rg   r±   r,   ÚokZlnr   Úerrr   r   r   Údo_breakW  s   
€


þþ

ÿ
€è
ÿùzPdb.do_breakc                 C   s$   	 | j jj}|dkr| jr| j}|S )Nz<string>)r_   rb   rr   rA   )r2   r   r   r   r   rð   ´  s
   
zPdb.defaultFilec                 C   s   	 |   |d¡ d S r!   )rø   ©r2   r°   r   r   r   Ú	do_tbreakÀ  s   zPdb.do_tbreakc           
      C   sÌ   d}|  d¡}t|ƒdkr|d  ¡ }nt|ƒdkr!|d  ¡ }n|S |dkr)|S |  d¡}|d dkr?|d= t|ƒdkr?|S |  ¡ }t|ƒdkrN|d }n|  |d ¡}|rY|}|d }t||ƒ}	|	pe|S )	N)NNNú'r   r   é   r6   r×   r2   )rž   rã   rl   rð   ré   r    )
r2   Z
identifierZfailedZidstringÚidÚpartsZfnameÚitemrg   Zanswerr   r   r   rï   É  s,   



zPdb.lineinfoc                 C   s†   	 t | dd ƒ}|r|jnd }t |||¡}|s|  d¡ dS | ¡ }|r:|d dks:|d d… dks:|d d… dkrA|  d¡ dS |S )	Nr_   zEnd of filer   rj   rü   z"""z'''zBlank or comment)rw   r#   Ú	linecacheÚgetlinerV   rl   r¹   )r2   r   r   rY   rË   r   r   r   r   rñ   ê  s   
 
zPdb.checklinec                 C   ól   	 |  ¡ }|D ],}z|  |¡}W n ty' } z|  |¡ W Y d }~qd }~ww | ¡  |  d| ¡ qd S )Nz
Enabled %s)rž   Úget_bpbynumberr   r¹   ÚenablerV   ©r2   r°   r§   r-   rÐ   r÷   r   r   r   Ú	do_enable   s   €ÿùzPdb.do_enablec                 C   r  )NzDisabled %s)rž   r  r   r¹   ÚdisablerV   r  r   r   r   Ú
do_disable  s   €ÿùzPdb.do_disablec              
   C   sÈ   	 |  dd¡}z|d }W n ty   d }Y nw z|  |d  ¡ ¡}W n& ty3   |  d¡ Y d S  tyJ } z|  |¡ W Y d }~d S d }~ww ||_|sZ|  d|j ¡ d S |  d|j ¡ d S )Nr›   r   r   úBreakpoint number expectedz#Breakpoint %d is now unconditional.z$New condition set for breakpoint %d.)	rž   Ú
IndexErrorr  rl   r¹   r   rô   rV   ró   )r2   r°   r§   rô   rÐ   r÷   r   r   r   Údo_condition%  s&   ÿ€ÿzPdb.do_conditionc              
   C   sà   	 |  ¡ }z
t|d  ¡ ƒ}W n   d}Y z|  |d  ¡ ¡}W n& ty0   |  d¡ Y d S  tyG } z|  |¡ W Y d }~d S d }~ww ||_|dkrf|dkrXd| }nd}|  d||j	f ¡ d S |  d|j	 ¡ d S )Nr   r   r	  z%d crossingsz
1 crossingz%Will ignore next %s of breakpoint %d.z-Will stop next time breakpoint %d is reached.)
rž   rä   rl   r  r
  r¹   r   ÚignorerV   ró   )r2   r°   r§   ÚcountrÐ   r÷   Zcountstrr   r   r   Ú	do_ignore@  s2   €ÿ

ÿ
ÿzPdb.do_ignorec           
      C   s„  	 |s:zt dƒ}W n ty   d}Y nw | ¡  ¡ }|dv r8dd„ tjjD ƒ}|  ¡  |D ]	}|  d| ¡ q.d S d|v rŒ| 	d¡}|d |… }||d d … }zt
|ƒ}W n tyd   d	| }Y nw |  ||¡d d … }|  ||¡}|r~|  |¡ d S |D ]	}|  d| ¡ q€d S | ¡ }	|	D ]-}z|  |¡}W n ty² } z|  |¡ W Y d }~q’d }~ww |  |¡ |  d| ¡ q’d S )
NzClear all breaks? Úno)ÚyZyesc                 S   s   g | ]}|r|‘qS r   r   )rÏ   rÐ   r   r   r   rÒ   q  s    z Pdb.do_clear.<locals>.<listcomp>z
Deleted %sr»   r   zInvalid line number (%s))ÚinputÚEOFErrorrl   rÆ   r7   rÓ   rÔ   Zclear_all_breaksrV   rè   rä   r   rò   Zclear_breakr¹   rž   r  Zclear_bpbynumber)
r2   r°   ZreplyZbplistrÐ   r-   r   r   r÷   Z
numberlistr   r   r   Údo_clearc  sT   ÿ
ÿ
þ€ÿ
ùzPdb.do_clearc                 C   s   	 |   ¡  d S r0   )Úprint_stack_tracerù   r   r   r   Údo_where–  s   zPdb.do_wherec                 C   s>   || _ | j| j  d | _| jj| _|  | j| j  ¡ d | _d S r(   )r^   r]   r_   r$   re   ry   r   )r2   ró   r   r   r   Ú_select_frame   s
   

zPdb._select_framec                 C   sz   	 | j dkr|  d¡ d S zt|pdƒ}W n ty&   |  d| ¡ Y d S w |dk r.d}ntd| j | ƒ}|  |¡ d S )Nr   zOldest framer   úInvalid frame count (%s))r^   r¹   rä   r   Úmaxr  ©r2   r°   r  Znewframer   r   r   Údo_up¨  s   

þz	Pdb.do_upc                 C   s˜   	 | j d t| jƒkr|  d¡ d S zt|pdƒ}W n ty+   |  d| ¡ Y d S w |dk r8t| jƒd }ntt| jƒd | j | ƒ}|  |¡ d S )Nr   zNewest framer  r   )r^   rã   r]   r¹   rä   r   Úminr  r  r   r   r   Údo_down¼  s   
þzPdb.do_downc                 C   sh   	 |r)zt |ƒ}W n ty   |  d| ¡ Y d S w || jjkr(|  d¡ d S nd }|  | j|¡ dS )NúError in argument: %rz7"until" line number is smaller than current line numberr   )rä   r   r¹   r_   rs   Z	set_until)r2   r°   r   r   r   r   Údo_untilÐ  s   þ
ýzPdb.do_untilc                 C   s   	 |   ¡  dS r!   )rW   rù   r   r   r   Údo_stepè  s   zPdb.do_stepc                 C   ó   	 |   | j¡ dS r!   )Zset_nextr_   rù   r   r   r   Údo_nextò  s   zPdb.do_nextc              
   C   sx   	 |r:dd l }tjdd… }z| |¡t_W n ty2 } z|  d||f ¡ W Y d }~d S d }~ww |tjd d…< t‚)Nr   r   zCannot run %s: %s)Úshlexr<   Úargvrž   r   r¹   r   )r2   r°   r"  Zargv0Úer   r   r   Údo_runû  s   €þz
Pdb.do_runc                 C   r   r!   )Z
set_returnr_   rù   r   r   r   Ú	do_return  s   zPdb.do_returnc                 C   s>   	 | j szt tj| j¡t_W n	 ty   Y nw |  ¡  dS r!   )rG   rŽ   r   rZ   r
   r   r   Zset_continuerù   r   r   r   Údo_continue  s   ÿûzPdb.do_continuec              
   C   sÂ   	 | j d t| jƒkr|  d¡ d S zt|ƒ}W n ty'   |  d¡ Y d S w z|| j_| j| j  d |f| j| j < |  | j| j  ¡ W d S  ty` } z|  d| ¡ W Y d }~d S d }~ww )Nr   z)You can only jump within the bottom framez)The 'jump' command requires a line numberr   zJump failed: %s)	r^   rã   r]   r¹   rä   r   r_   rs   ry   )r2   r°   r$  r   r   r   Údo_jump*  s"   

ÿ€ÿzPdb.do_jumpc                 C   sœ   	 t  d ¡ | jj}| j}t| j| j| jƒ}d| j	 
¡  |_	|  d¡ zt  |j|||f¡ W n ty<   |  ¡  Y nw |  d¡ t  | j¡ |j| _d S )Nz(%s) zENTERING RECURSIVE DEBUGGERzLEAVING RECURSIVE DEBUGGER)r<   Úsettracer_   r#   re   r
   rR   rS   rT   r>   rl   rV   Úcall_tracingr   rÂ   r–   Ztrace_dispatchrx   )r2   r°   r˜   r—   Úpr   r   r   Údo_debugG  s   

ÿ
zPdb.do_debugc                 C   s   	 d| _ |  ¡  dS )NTr   )Ú_user_requested_quitÚset_quitrù   r   r   r   Údo_quit]  s   zPdb.do_quitc                 C   s   	 |   d¡ d| _|  ¡  dS )Nr6   Tr   )rV   r-  r.  rù   r   r   r   Údo_EOFh  s
   
z
Pdb.do_EOFc                 C   s   	 | j j}| j}|j|j }|jtj@ r|d }|jtj@ r"|d }t	|ƒD ]}|j
| }||v r=|  d||| f ¡ q&|  d|f ¡ q&d S )Nr   z%s = %rz%s = *** undefined ***)r_   rb   re   Úco_argcountÚco_kwonlyargcountÚco_flagsr"   Z
CO_VARARGSZCO_VARKEYWORDSÚrangeÚco_varnamesrV   )r2   r°   ÚcoÚdictrÚ   r-   Únamer   r   r   Údo_argsq  s   
ûzPdb.do_argsc                 C   s2   	 d| j v r|  t| j d ƒ¡ d S |  d¡ d S )Nr{   zNot yet returned!)re   rV   r‘   r¹   rù   r   r   r   Ú	do_retval‚  s   
zPdb.do_retvalc                 C   s&   z
t || jj| jƒW S    |  ¡  ‚ r0   )rê   r_   r#   re   r–   rù   r   r   r   Ú_getvalŒ  s
   zPdb._getvalc                 C   sh   z|d u rt || jj| jƒW S t ||j|jƒW S    t ¡ d d… }tj|Ž d  	¡ }t
d| ƒ Y S )Nr   r}   z** raised %s **)rê   r_   r#   re   r$   r<   r   r   r€   rl   r/   )r2   r°   rY   r   r÷   r   r   r   rŠ   “  s   zPdb._getval_exceptc                 C   s,   t  ¡ d d… }|  tj|Ž d  ¡ ¡ d S )Nr   r}   )r<   r   r¹   r   r€   rl   )r2   r   r   r   r   r–   ž  s   zPdb._error_excc                 C   sF   z|   |¡}W n   Y d S z
|  ||ƒ¡ W d S    |  ¡  Y d S r0   )r;  rV   r–   )r2   r°   r±   Úvalr   r   r   Ú_msg_val_func¢  s   zPdb._msg_val_funcc                 C   s   	 |   |t¡ d S r0   )r=  r‘   rù   r   r   r   Údo_p¬  s   zPdb.do_pc                 C   s   	 |   |tj¡ d S r0   )r=  ÚpprintZpformatrù   r   r   r   Údo_pp²  s   z	Pdb.do_ppc                 C   sd  	 d| _ d }|rM|dkrMz/d|v r-| d¡\}}t| ¡ ƒ}t| ¡ ƒ}||k r,|| }nt| ¡ ƒ}td|d ƒ}W n) tyL   |  d| ¡ Y d S w | jd u sV|dkr`td| jj	d ƒ}n| jd }|d u rm|d }| jj
j}|  |¡}z0t || jj¡}|  ||d |… ||| j¡ t|t|ƒƒ| _t|ƒ|k r¥|  d¡ W d S W d S  ty±   Y d S w )	Nr)   r×   r¼   r   é   r  é
   z[EOF])rx   rž   rä   rl   r  r   r¹   r   r_   rs   rb   rr   Úget_file_breaksr   Úgetlinesr#   Ú_print_linesr  rã   rV   rU   )r2   r°   ZlastÚfirstr   Ú	breaklistr&   r   r   r   Údo_list¼  sL   €€þ


ÿÿÿzPdb.do_listc              
   C   sp   	 | j jj}|  |¡}z	t| j ƒ\}}W n ty, } z|  |¡ W Y d }~d S d }~ww |  |||| j ¡ d S r0   )r_   rb   rr   rC  r'   r   r¹   rE  )r2   r°   r   rG  r&   r   r÷   r   r   r   Údo_longlistï  s   


€þzPdb.do_longlistc              
   C   st   	 z|   |¡}W n   Y d S zt|ƒ\}}W n ttfy1 } z|  |¡ W Y d }~d S d }~ww |  ||¡ d S r0   )r;  r'   r   Ú	TypeErrorr¹   rE  )r2   r°   r%   r&   r   r÷   r   r   r   Ú	do_sourceý  s   
€þzPdb.do_sourcer   c           
      C   s°   	 |r|j }| j |d¡}nd }}t||ƒD ]>\}}t|ƒ d¡}	t|	ƒdk r,|	d7 }	||v r5|	d7 }	n|	d7 }	||krB|	d7 }	n||krJ|	d7 }	|  |	d | ¡  ¡ qd S )	Nr}   rü   é   r›   ÚBz->z>>ú	)	rs   rC   rˆ   r   r    Úrjustrã   rV   r¦   )
r2   r&   r   rç   rY   Zcurrent_linenoZ
exc_linenor   r   Úsr   r   r   rE    s$   

ôzPdb._print_linesc                 C   sÆ   	 z|   |¡}W n   Y d S d }z|jj}W n	 ty    Y nw |r-|  d|j ¡ d S z|j}W n	 ty;   Y nw |rH|  d|j ¡ d S |jtu rZ|  d|j|j	f ¡ d S |  t|ƒ¡ d S )Nz	Method %szFunction %szClass %s.%s)
r;  ræ   rì   rÂ   rV   rí   Ú	__class__Útyper   r   )r2   r°   Úvaluer,   r   r   r   Ú	do_whatis#  s4   ÿ
ÿ
zPdb.do_whatisc                 C   sp   	 |s|   d¡ | j | ji ¡ ¡ D ]	}|   d| ¡ qd S |  |¡}|| j | ji ¡|< |   d||f ¡ d S )NzCurrently displaying:z%s: %rzdisplay %s: %r)rV   r@   rˆ   r_   r‰   rŠ   Ú
setdefault)r2   r°   rÿ   r<  r   r   r   Ú
do_displayF  s   
ÿ
zPdb.do_displayc                 C   sV   	 |r!z| j  | ji ¡|= W d S  ty    |  d| ¡ Y d S w | j  | jd ¡ d S )Nznot displaying %s)r@   rˆ   r_   rÞ   r¹   rk   rù   r   r   r   Údo_undisplayY  s   ÿzPdb.do_undisplayc                    s   ‡ fdd„| j  | ji ¡D ƒS )Nc                    rÜ   r   rØ   )rÏ   r$  rÑ   r   r   rÒ   i  s    
ÿz*Pdb.complete_undisplay.<locals>.<listcomp>)r@   rˆ   r_   rÕ   r   rÑ   r   Úcomplete_undisplayh  s   zPdb.complete_undisplayc                 C   s&   	 i | j j¥| j¥}tjd|d d S )Nz*interactive*)Úlocal)r_   r#   re   r,   Úinteract)r2   r°   rá   r   r   r   Údo_interactl  s   zPdb.do_interactc                 C   s¨   	 |  ¡ }t|ƒdkr%t| j ¡ ƒ}|D ]}|  d|| j| f ¡ qd S |d | jv rDt|ƒdkrD|  d|d | j|d  f ¡ d S d |dd … ¡| j|d < d S )Nr   z%s = %sr   r›   )rž   rã   Úsortedr?   rà   rV   r¡   )r2   r°   r§   rà   rœ   r   r   r   Údo_aliasu  s   $ zPdb.do_aliasc                 C   s<   	 |  ¡ }t|ƒdkrd S |d | jv r| j|d = d S d S r(   )rž   rã   r?   )r2   r°   r§   r   r   r   Ú
do_unalias˜  s   ÿzPdb.do_unaliasc                    s   ‡ fdd„| j D ƒS )Nc                    rÜ   r   rØ   )rÏ   ÚarÑ   r   r   rÒ   ¢  rÝ   z(Pdb.complete_unalias.<locals>.<listcomp>)r?   rÕ   r   rÑ   r   Úcomplete_unalias¡  rº   zPdb.complete_unalias)r'  r  r!  r&  r/  r(  c                 C   s2   z| j D ]}|  |¡ qW d S  ty   Y d S w r0   )r]   ry   rU   )r2   Úframe_linenor   r   r   r  °  s   
ÿÿzPdb.print_stack_tracec                 C   s6   |\}}|| j u rd}nd}|  ||  ||¡ ¡ d S )Nz> z  )r_   rV   Zformat_stack_entry)r2   ra  Zprompt_prefixrY   r   r…   r   r   r   ry   ·  s   


ÿzPdb.print_stack_entryc                 C   sÄ   	 |s
t j | |¡S zzt| d| ƒ}|ƒ W W S  ty'   t| d| ƒ}Y nw W n ty:   |  d| ¡ Y d S w tjjdkrJ|  d| ¡ d S |j	d u rX|  d| ¡ d S |  
|j	 ¡ ¡ d S )NZhelp_r­   zNo help for %rr   zJNo help for %r; please do not run Python with -OO if you need command helpz&No help for %r; __doc__ string missing)r:   r;   Údo_helprw   r®   r¹   r<   ÚflagsÚoptimizeÚ__doc__rV   r¦   )r2   r°   ZtopicZcommandr   r   r   rb  Â  s.   
ÿÿÿ
zPdb.do_helpc                 C   s   	 |   | jjpd ¡ ¡ d S )Nr6   )rV   Ú	help_execre  rl   r1   r   r   r   rf  ß  s   	zPdb.help_execc                 C   s
   t ƒ  d S r0   )r   r1   r   r   r   Úhelp_pdbë  s   
zPdb.help_pdbc                 C   sÖ   	 t j |¡rt j |¡r|S t j tjd |¡}t j |¡r)|  |¡| jkr)|S t j |¡\}}|dkr9|d }t j |¡rA|S tjD ]$}t j 	|¡rWt  
|¡}t j 	|¡sLt j ||¡}t j |¡rh|  S qDd S )Nr   r6   r¿   )rI   rJ   ÚisabsÚexistsr¡   r<   rq   rA   ÚsplitextÚislinkÚreadlink)r2   r   rg   ÚrootÚextÚdirnameÚfullnamer   r   r   ré   ð  s(   

ÿÿzPdb.lookupmodulec              	   C   sr   d| _ d| _dd l}| |¡\}}}|  |j¡| _dd l}|j 	¡  |j 
d| j|j|j|tdœ¡ |  |¡ d S )NTFr   Ú__main__)r   Ú__file__Ú__package__Ú
__loader__Ú__spec__Ú__builtins__)rB   r-  ÚrunpyÚ_get_module_detailsrq   rr   rA   rq  Ú__dict__r`   ÚupdateÚparentÚloaderrv  r   )r2   Úmodule_namerw  Zmod_nameZmod_specr,   rq  r   r   r   Ú
_runmodule  s    
úzPdb._runmodulec                 C   sˆ   dd l }|j ¡  |j d|tdœ¡ d| _|  |¡| _d| _t	 
|¡}d| ¡ | jf }W d   ƒ n1 s8w   Y  |  |¡ d S )Nr   rq  )r   rr  rv  TFzexec(compile(%r, %r, 'exec')))rq  ry  r`   rz  rv  rB   rq   rA   r-  ÚioÚ	open_codeÚreadr   )r2   r   rq  r   Ú	statementr   r   r   Ú
_runscript  s   
þ
ÿÿzPdb._runscript)r4   NNNFT)r   r0   )r   N)yr   r   r   r   r9   rZ   r[   r\   ri   rf   rp   ru   rt   r|   r†   rz   rŒ   ro   r’   r™   rª   rm   r«   rV   r¹   rÍ   rÖ   rÁ   rå   Zcomplete_commandsrø   rð   Zdo_bZcomplete_breakZ
complete_brú   Zcomplete_tbreakrï   rñ   r  Zcomplete_enabler  Zcomplete_disabler  Zcomplete_conditionr  Zcomplete_ignorer  Zdo_clZcomplete_clearZcomplete_clr  Zdo_wZdo_btr  r  Zdo_ur  Zdo_dr  Zdo_untr  Zdo_sr!  Zdo_nr%  Z
do_restartr&  Zdo_rr'  Zdo_cZdo_contr(  Zdo_jr,  Zcomplete_debugr/  Zdo_qZdo_exitr0  r9  Zdo_ar:  Zdo_rvr;  rŠ   r–   r=  r>  r@  Zcomplete_printZ
complete_pZcomplete_pprH  Zdo_lrI  Zdo_llrK  Zcomplete_sourcerE  rT  Zcomplete_whatisrV  Zcomplete_displayrW  rX  r[  r]  r^  r`  r¯   r  Úline_prefixry   rb  Zdo_hrf  rg  ré   r~  rƒ  r   r   r   r   r
   Š   sî    
ÿ/	
M
]!!.	

1
!	#	r
   )"r   ÚwhereZdownZupÚbreakZtbreakr`   r  r  r  Z	conditionrM   Ústepr©   ZuntilZjumpÚreturnZretvalr   Úcontinuer)   Zlonglistr§   r+  ÚppZwhatisÚsourceZdisplayZ	undisplayrZ  rœ   ZunaliasÚdebugÚquitr­   z

c                 C   s   t ƒ  | ||¡ d S r0   )r
   r   ©r‚  r˜   r—   r   r   r   r   I  rº   r   c                 C   s   t ƒ  | ||¡S r0   )r
   r   )Z
expressionr˜   r—   r   r   r   r   L  s   r   c                 C   s   t | ||ƒ d S r0   )r   rŽ  r   r   r   r   O  s   r   c                  O   s   t ƒ j| i |¤ŽS r0   )r
   r   )r§   Úkwdsr   r   r   r   S  r¸   r   )Úheaderc                 C   s,   t ƒ }| d ur| | ¡ | t ¡ j¡ d S r0   )r
   rV   r   r<   Ú	_getframeÚf_back)r  Úpdbr   r   r   r   V  s   
r   c                 C   sB   | d u r
t  ¡ d } | d u rtdƒ‚tƒ }| ¡  | d | ¡ d S )Nr   zAA valid traceback must be passed if no exception is being handled)r<   r   r   r
   r[   ro   )Útr+  r   r   r   r   ^  s   r   c                   C   s   t tjƒ d S r0   )r   r<   Úlast_tracebackr   r   r   r   r	   l  s   r	   zimport x; x.main()c                   C   s   t tƒ d S r0   )r   ÚTESTCMDr   r   r   r   Útestt  s   r—  c                  C   s   dd l } |  t¡ d S r(   )ÚpydocZpagerre  )r˜  r   r   r   r   x  s   r   a  usage: pdb.py [-c command] ... [-m module | pyfile] [arg] ...

Debug the Python program given by pyfile. Alternatively,
an executable module or package to debug can be specified using
the -m switch.

Initial commands are read from .pdbrc files in your home directory
and in the current directory, if they exist.  Commands supplied with
-c are executed after commands from .pdbrc files.

To let the script run until an exception occurs, use "-c continue".
To let the script run up to a given line X in the debugged file, use
"-c 'until X'".c               
   C   sD  dd l } |   tjdd … dddg¡\}}|sttƒ t d¡ g }d}|D ]!\}}|dv r6ttƒ t ¡  q%|d	v r@| |¡ q%|d
v rFd}q%|d }|s^tj 	|¡s^td|dƒ t d¡ |r~dd l
}z| |¡ W n ty}   t ¡  t d¡ Y nw |tjd d …< |s–tj |¡}tj |¡tjd< tƒ }	|	j |¡ 	 z|r©|	 |¡ n|	 |¡ |	jr´W d S tdƒ W ng tyÖ   td|dƒ tdd tjdd … ¡ ƒ Y nK tyì   tddd tt ¡ d ƒ Y n5 tyý   t ¡  t d¡ Y n$   t ¡  tdƒ tdƒ t ¡ d }
|	 d |
¡ td| d ƒ Y q )Nr   r   zmhc:r   zcommand=r   F)z-hz--help)z-cz	--command)z-mTzError:zdoes not existz*The program finished and will be restartedZ
Restartingzwith arguments:rN  r›   z/The program exited via sys.exit(). Exit status:)r¬   z2Uncaught exception. Entering post mortem debuggingz1Running 'cont' or 'step' will restart the programz#Post mortem debugger finished. The z will be restarted)Úgetoptr<   r#  rµ   Ú_usageÚexitr¥   rI   rJ   ri  rw  rx  rÂ   r   Ú	print_excÚrealpathro  r
   rH   rL   r~  rƒ  r-  r   r¡   Ú
SystemExitr   ÚSyntaxErrorro   )r™  Zoptsr§   rM   Zrun_as_moduleÚoptZoptargrA   rw  r“  r”  r   r   r   Úmain‹  sz    

€
þ
 ÿçr¡  rq  )NNr0   )/rI   r  r   r<   r:   r7   r*   r,   rÃ   r?  rŽ   r"   r   r   r   rÂ   r   Ú__all__r    r'   r.   r    r/   r„  r8   r;   r
   re  Z_help_orderZ_commandrw   rl   rf  r   r   r   r   r   r   r	   r–  r—  r   rš  r¡  r   r“  r   r   r   r   Ú<module>   sr   C		           7


Lþ