o
    DXîhùö  ã                   @   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G d	d
„ d
eƒZdZG dd„ dejejƒZedur‰g d¢ZeD ]Zeeede ƒj ¡ d 7 Zqpe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   ú-/opt/python-3.10.19/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   s8   t t | ¡ƒ}| ¡  |D ]\}}||kr|  S qdS ©Nr   )ÚlistÚdisZfindlinestartsÚreverse)ÚcodeZlastiZ
linestartsÚir   r   r   r   Úlasti2linenok   s   ÿr'   c                   @   s   e Zd Z	 dd„ ZdS )Ú_rstrc                 C   s   | S ©Nr   ©Úselfr   r   r   Ú__repr__v   s   z_rstr.__repr__N)r   r   r   r,   r   r   r   r   r(   t   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)	r+   ÚcompletekeyÚstdinÚstdoutr.   r@   Zreadrcr=   ZrcFiler   r   r   r2   …   sT   
ÿÿ€ÿ
ÿ€ÿ
zPdb.__init__c                 C   s*   | j rt‚|  d¡ |  ¡  |  |¡ d S )Nz-
Program interrupted. (Use 'cont' to resume).)r?   ÚKeyboardInterruptÚmessageÚset_stepr   )r+   ÚsignumÚframer   r   r   Úsigint_handler´   s
   
zPdb.sigint_handlerc                 C   s   t j | ¡ |  ¡  d S r)   )r0   r1   ÚresetÚforgetr*   r   r   r   rT   »   s   z	Pdb.resetc                 C   s&   d | _ g | _d| _d | _| j ¡  d S r!   )r   ÚstackÚcurindexÚcurframer<   Úclearr*   r   r   r   rU   ¿   s
   z
Pdb.forgetc                 C   sj   |   ¡  |  ||¡\| _| _|r#t|jj|jƒ}|| j|j< |j	}|s| j| j d | _
| j
j| _|  ¡ S r!   )rU   Z	get_stackrV   rW   r'   Útb_frameÚf_codeÚtb_lastir<   Útb_nextrX   Úf_localsÚcurframe_localsÚexecRcLines)r+   Ú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)rA   r$   ÚpopÚstripÚonecmdÚreversed)r+   rA   r   r   r   r   r`   Ø   s   
øzPdb.execRcLinesc                 C   s4   	 | j rd S |  |¡r|  d¡ |  |d ¡ d S d S )Nz--Call--)r;   Z	stop_hererO   Úinteraction)r+   rR   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)r;   r:   Úcanonicr[   Úco_filenameÚf_linenoÚbp_commandsri   )r+   rR   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   )Úgetattrrp   rF   Úlastcmdrc   rg   rH   Úprint_stack_entryrV   rW   rG   Ú_cmdlooprU   )r+   rR   rp   Zlastcmd_backr   r   r   r   rn   ÿ   s"   

zPdb.bp_commandsc                 C   s0   	 | j rd S ||jd< |  d¡ |  |d ¡ d S )NÚ
__return__z
--Return--)r;   r^   rO   ri   )r+   rR   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 r/   z%s%séÿÿÿÿ)r;   r^   ÚStopIterationrO   Ú	tracebackÚformat_exception_onlyrf   ri   )r+   rR   Ú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--)r?   ÚcmdlooprN   rO   r*   r   r   r   rt   3  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])r9   ÚgetrX   ÚitemsÚ_getval_exceptrO   )r+   r9   ÚexprZoldvalueZnewvaluer   r   r   Úpreloop@  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 r)   )r
   Ú_previous_sigint_handlerÚsignalÚSIGINTÚ
ValueErrorrc   rU   rs   rV   rW   rt   )r+   rR   ry   r   r   r   ri   M  s   ÿzPdb.interactionc                 C   s    	 |d ur|   t|ƒ¡ d S d S r)   )rO   Úrepr)r+   Úobjr   r   r   Údisplayhook_  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)
r_   rX   Ú	f_globalsr   r5   rM   rL   r   ÚexecÚ
_error_exc)r+   r   ÚlocalsÚglobalsr%   Zsave_stdoutZ
save_stdinZsave_displayhookr   r   r   Údefaultg  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;;é   )rf   Úsplitr8   ÚreplaceÚstrÚjoinÚfindÚlstripÚcmdqueueÚappendÚrstrip)r+   r   ÚargsÚiiZtmpArgZmarkerÚnextr   r   r   Úprecmd|  s,   ÿ
ø
z
Pdb.precmdc                 C   s    	 | j stj | |¡S |  |¡S r)   )rI   r3   r4   rg   Úhandle_command_def)r+   r   r   r   r   rg   •  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	parselinerH   rJ   r    rF   r¡   rq   ÚAttributeErrorr•   r   Úcommands_resumingrG   )r+   r   r3   ÚargZcmdlistÚfuncr   r   r   r§   ¡  s0   

ÿzPdb.handle_command_defc                 C   s   t || jd d S )N©Úfile©ÚprintrM   ©r+   Úmsgr   r   r   rO   ¿  ó   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·   )rf   ÚendswithÚ_complete_expressionÚ	ExceptionÚglobr   rB   rC   Úisdirr¡   ÚisfileÚlower)r+   Ú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 r)   )rœ   Ú
startswith)Ú.0r&   Úbp©rÃ   r   r   Ú
<listcomp>ß  s    ÿz*Pdb._complete_bpnumber.<locals>.<listcomp>)r   r0   Ú
BreakpointÚ
bpbynumber©r+   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   rw   c                    s"   g | ]}|  ˆ d  ¡rˆ| ‘qS )rw   ©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Î   ù  ó    )
rX   r   r_   rš   rq   ÚKeyErrorrª   r   ÚdirÚkeys)r+   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)Úlenr0   rÏ   rÐ   Úintrµ   rJ   rF   rG   rH   r7   rI   r   rN   )r+   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.rw   zBreakpoint %d at %s:%d) ÚbreaksrO   r0   rÏ   rÐ   Zbpformatrž   rŸ   r¢   ÚrfindÚlookupmodulerµ   rà   rŠ   ÚevalrX   r   r_   Úhasattrrâ   Ú__code__Úco_nameÚco_firstlinenorl   ÚlineinfoÚdefaultFileÚ	checklineZ	set_breakÚ
get_breaksÚnumberr¯   r   )r+   r¬   Z	temporaryrÌ   r   r   ÚcondZcommaÚcolonr   ra   r­   r%   ÚokZlnr   Úerrr   r   r   Údo_breakN  s   
€


þþ

ÿ
€è
ÿùzPdb.do_breakc                 C   s$   	 | j jj}|dkr| jr| j}|S )Nz<string>)rX   r[   rl   r:   )r+   r   r   r   r   rì   «  s
   
zPdb.defaultFilec                 C   s   	 |   |d¡ d S ©Nr   )rô   ©r+   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   é   r/   rÓ   r+   )rš   rß   rf   rì   rå   r    )
r+   Z
identifierZfailedZidstringÚidÚpartsZfnameÚitemra   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 )	NrX   zEnd of filer   rd   rù   z"""z'''zBlank or comment)rq   r   Ú	linecacheÚgetlinerO   rf   rµ   )r+   r   r   rR   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µ   ÚenablerO   ©r+   r¬   r£   r&   rÌ   ró   r   r   r   Ú	do_enable÷  s   €ÿùzPdb.do_enablec                 C   rÿ   )NzDisabled %s)rš   r   rŠ   rµ   ÚdisablerO   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   rf   rµ   rŠ   rð   rO   rï   )r+   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à   rf   r   r  rµ   rŠ   ÚignorerO   rï   )r+   r¬   r£   ÚcountrÌ   ró   Zcountstrr   r   r   Ú	do_ignore7  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Î   h  s    z Pdb.do_clear.<locals>.<listcomp>z
Deleted %sr·   r   zInvalid line number (%s))ÚinputÚEOFErrorrf   rÂ   r0   rÏ   rÐ   Zclear_all_breaksrO   rä   rà   rŠ   rî   Zclear_breakrµ   rš   r   Zclear_bpbynumber)
r+   r¬   ZreplyZbplistrÌ   r&   r   r   ró   Z
numberlistr   r   r   Údo_clearZ  sT   ÿ
ÿ
þ€ÿ
ùzPdb.do_clearc                 C   s   	 |   ¡  d S r)   )Ú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!   )rW   rV   rX   r^   r_   rs   r   )r+   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))rW   rµ   rà   rŠ   Úmaxr  ©r+   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   )rW   rß   rV   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µ   rX   rm   Z	set_until)r+   r¬   r   r   r   r   Údo_untilÇ  s   þ
ýzPdb.do_untilc                 C   s   	 |   ¡  dS rõ   )rP   rö   r   r   r   Údo_stepß  s   zPdb.do_stepc                 C   ó   	 |   | j¡ dS rõ   )Zset_nextrX   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)Úshlexr5   Úargvrš   rŠ   rµ   r   )r+   r¬   r  Zargv0Úer   r   r   Údo_runò  s   €þz
Pdb.do_runc                 C   r  rõ   )Z
set_returnrX   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õ   )r@   rˆ   r‰   rS   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)	rW   rß   rV   rµ   rà   rŠ   rX   rm   rs   )r+   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)r5   ÚsettracerX   r   r_   r
   rK   rL   rM   r7   rf   rO   Úcall_tracingr   r¾   r’   Ztrace_dispatchrr   )r+   r¬   r”   r“   Úpr   r   r   Údo_debug>  s   

ÿ
zPdb.do_debugc                 C   s   	 d| _ |  ¡  dS )NTr   )Ú_user_requested_quitÚset_quitrö   r   r   r   Údo_quitT  s   zPdb.do_quitc                 C   s   	 |   d¡ d| _|  ¡  dS )Nr/   Tr   )rO   r*  r+  rö   r   r   r   Údo_EOF_  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 ***)rX   r[   r_   Úco_argcountÚco_kwonlyargcountÚco_flagsÚinspectZ
CO_VARARGSZCO_VARKEYWORDSÚrangeÚco_varnamesrO   )r+   r¬   ÚcoÚdictrÖ   r&   Únamer   r   r   Údo_argsh  s   
ûzPdb.do_argsc                 C   s2   	 d| j v r|  t| j d ƒ¡ d S |  d¡ d S )Nru   zNot yet returned!)r_   rO   r‹   rµ   rö   r   r   r   Ú	do_retvaly  s   
zPdb.do_retvalc                 C   s&   z
t || jj| jƒW S    |  ¡  ‚ r)   )ræ   rX   r   r_   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™   rw   z** raised %s **)ræ   rX   r   r_   r^   r5   r{   ry   rz   rf   r(   )r+   r¬   rR   r{   ró   r   r   r   r„   Š  s   zPdb._getval_exceptc                 C   s,   t  ¡ d d… }|  tj|Ž d  ¡ ¡ d S )Nr™   rw   )r5   r{   rµ   ry   rz   rf   )r+   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 r)   )r9  rO   r’   )r+   r¬   r­   Úvalr   r   r   Ú_msg_val_func™  s   zPdb._msg_val_funcc                 C   s   	 |   |t¡ d S r)   )r;  r‹   rö   r   r   r   Údo_p£  s   zPdb.do_pc                 C   s   	 |   |tj¡ d S r)   )r;  ÚpprintZpformatrö   r   r   r   Údo_pp©  s   z	Pdb.do_ppc                 C   sŠ  	 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}| d¡r…| jj d	¡}t|tƒr…|}|  |¡}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<frozenÚ__file__z[EOF])rr   rš   rà   rf   r  rŠ   rµ   r   rX   rm   r[   rl   rÊ   r   r‚   Ú
isinstancerœ   Úget_file_breaksrý   ÚgetlinesÚ_print_linesr  rß   rO   rN   )r+   r¬   ÚlastÚfirstr   ÚtmpÚ	breaklistÚlinesr   r   r   Údo_list³  sT   €€þ




ÿÿÿzPdb.do_listc              
   C   sr   	 | j jj}|  |¡}z
t | j ¡\}}W n ty- } z|  |¡ W Y d }~d S d }~ww |  |||| j ¡ d S r)   )	rX   r[   rl   rC  r1  Úgetsourcelinesr   rµ   rE  )r+   r¬   r   rI  rJ  r   ró   r   r   r   Údo_longlistì  s   


€þzPdb.do_longlistc              
   C   sv   	 z|   |¡}W n   Y d S z	t |¡\}}W n ttfy2 } z|  |¡ W Y d }~d S d }~ww |  ||¡ d S r)   )r9  r1  rL  r   Ú	TypeErrorrµ   rE  )r+   r¬   rŒ   rJ  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 )	Nrw   rù   é   r—   ÚBz->z>>ú	)	rm   r<   r‚   r   rœ   Úrjustrß   rO   r¢   )
r+   rJ  r   rã   rR   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)
r9  râ   rè   r¾   rO   ré   Ú	__class__Útyper   r   )r+   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)rO   r9   r‚   rX   rƒ   r„   Ú
setdefault)r+   r¬   rü   r:  r   r   r   Ú
do_displayC  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)r9   r‚   rX   rÚ   rµ   re   rö   r   r   r   Údo_undisplayV  s   ÿzPdb.do_undisplayc                    s   ‡ fdd„| j  | ji ¡D ƒS )Nc                    rØ   r   rÔ   )rË   r!  rÍ   r   r   rÎ   f  s    
ÿz*Pdb.complete_undisplay.<locals>.<listcomp>)r9   r‚   rX   rÑ   r   rÍ   r   Úcomplete_undisplaye  s   zPdb.complete_undisplayc                 C   s&   	 i | j j¥| j¥}tjd|d d S )Nz*interactive*)Úlocal)rX   r   r_   r%   Úinteract)r+   r¬   rÝ   r   r   r   Údo_interacti  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ß   Úsortedr8   rÜ   rO   r   )r+   r¬   r£   rÜ   r˜   r   r   r   Údo_aliasr  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ß   r8   )r+   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>)r8   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 r)   )rV   rs   rN   )r+   Úframe_linenor   r   r   r  ­  s   
ÿÿzPdb.print_stack_tracec                 C   s6   |\}}|| j u rd}nd}|  ||  ||¡ ¡ d S )Nz> z  )rX   rO   Zformat_stack_entry)r+   re  Zprompt_prefixrR   r   r   r   r   r   rs   ´  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)r3   r4   Údo_helprq   rª   rµ   r5   ÚflagsÚoptimizeÚ__doc__rO   r¢   )r+   r¬   ZtopicZcommandr   r   r   rf  ¿  s.   
ÿÿÿ
zPdb.do_helpc                 C   s   	 |   | jjpd ¡ ¡ d S )Nr/   )rO   Ú	help_execri  rf   r*   r   r   r   rj  Ü  s   	zPdb.help_execc                 C   s
   t ƒ  d S r)   )r   r*   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   r/   r»   )rB   rC   ÚisabsÚexistsr   r5   rk   r:   ÚsplitextÚislinkÚreadlink)r+   r   ra   Ú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   rA  Ú__package__Ú
__loader__Ú__spec__Ú__builtins__)r;   r*  ÚrunpyÚ_get_module_detailsrk   rl   r:   ru  Ú__dict__rY   ÚupdateÚparentÚloaderry  r   )r+   Úmodule_namerz  Zmod_nameZmod_specr%   ru  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   ru  )r   rA  ry  TFzexec(compile(%r, %r, 'exec')))ru  r|  rY   r}  ry  r;   rk   r:   r*  ÚioÚ	open_codeÚreadr   )r+   r   ru  r   Ú	statementr   r   r   Ú
_runscript  s   
þ
ÿÿzPdb._runscript)r-   NNNFT)r   r)   )r   N)yr   r   r   r‡   r2   rS   rT   rU   rc   r`   rj   ro   rn   rv   r€   rt   r†   ri   r   r•   r¦   rg   r§   rO   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_exitr-  r7  Zdo_ar8  Zdo_rvr9  r„   r’   r;  r<  r>  Zcomplete_printZ
complete_pZcomplete_pprK  Zdo_lrM  Zdo_llrO  Zcomplete_sourcerE  rX  Zcomplete_whatisrZ  Zcomplete_displayr[  r\  r_  ra  rb  rd  r«   r  Úline_prefixrs   rf  Zdo_hrj  rk  rå   r  r†  r   r   r   r   r
      sî    
ÿ/	
M
]!!.	

7
!	#	r
   )"r   ÚwhereZdownZupÚbreakZtbreakrY   r  r  r	  Z	conditionrF   Ústepr¥   ZuntilZjumpÚreturnZretvalr   Úcontinuer"   Zlonglistr£   r(  ÚppZwhatisÚsourceZdisplayZ	undisplayr^  r˜   ZunaliasÚdebugÚquitr©   z

c                 C   s   t ƒ  | ||¡ d S r)   )r
   r   ©r…  r”   r“   r   r   r   r   F  r¶   r   c                 C   s   t ƒ  | ||¡S r)   )r
   r   )Z
expressionr”   r“   r   r   r   r   I  s   r   c                 C   s   t | ||ƒ d S r)   )r   r‘  r   r   r   r   L  s   r   c                  O   s   t ƒ j| i |¤ŽS r)   )r
   r   )r£   Úkwdsr   r   r   r   P  r´   r   )Úheaderc                 C   s,   t ƒ }| d ur| | ¡ | t ¡ j¡ d S r)   )r
   rO   r   r5   Ú	_getframeÚf_back)r“  Úpdbr   r   r   r   S  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)r5   r{   rŠ   r
   rT   ri   )Útr(  r   r   r   r   [  s   r   c                   C   s   t tjƒ d S r)   )r   r5   Úlast_tracebackr   r   r   r   r	   i  s   r	   zimport x; x.main()c                   C   s   t tƒ d S r)   )r   ÚTESTCMDr   r   r   r   Útestq  s   rš  c                  C   s   dd l } |  t¡ d S r!   )ÚpydocZpagerri  )r›  r   r   r   r   u  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:rR  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)Úgetoptr5   r   r±   Ú_usageÚexitr¡   rB   rC   rm  rz  r{  r¾   ry   Ú	print_excÚrealpathrs  r
   rA   rE   r  r†  r*  r   r   Ú
SystemExitr{   ÚSyntaxErrorri   )rœ  Zoptsr£   rF   Zrun_as_moduleÚoptZoptargr:   rz  r–  r—  r   r   r   Úmainˆ  sz    

€
þ
 ÿçr¤  ru  )NNr)   ).rB   r‚  r   r5   r3   r0   r#   r%   r¿   r=  rˆ   r1  r   ry   rý   r¾   r   Ú__all__r    r'   rœ   r(   r‡  r1   r4   r
   ri  Z_help_orderZ_commandrq   rf   rj  r   r   r   r   r   r   r	   r™  rš  r   r  r¤  r   r–  r   r   r   r   Ú<module>   sp   C	           =


Lþ