Ë
    #´˜jÿQ  ã                   óø   — d Z ddlZddlZddl­ ddlmZmZ ddlmZ ddl	m
Z
 ddlmZ  G d„ d	ej                  «      Zd
„ Zd„ Z G d„ d«      Z G d„ de
«      Z G d„ d«      Zedk(  rddlmZ  eddd¬«       yy)a³  Debug user code with a GUI interface to a subclass of bdb.Bdb.

The Idb idb and Debugger gui instances each need a reference to each
other or to an rpc proxy for each other.

If IDLE is started with '-n', so that user code and idb both run in the
IDLE process, Debugger is called without an idb.  Debugger.__init__
calls Idb with its incomplete self.  Idb.__init__ stores gui and gui
then stores idb.

If IDLE is started normally, so that user code executes in a separate
process, debugger_r.start_remote_debugger is called, executing in the
IDLE process.  It calls 'start the debugger' in the remote process,
which calls Idb with a gui proxy.  Then Debugger is called in the IDLE
for more.
é    N)Ú*)ÚFrameÚ	Scrollbar)Úmacosx)ÚScrolledList)ÚListedToplevelc                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚIdbz6Supply user_line and user_exception functions for Bdb.c                 ó0   •— || _         t        ‰| �	  «        y ©N)ÚguiÚsuperÚ__init__)Úselfr   Ú	__class__s     €ú"lib/python3.12/idlelib/debugger.pyr   zIdb.__init__    s   ø€ ØˆŒÜ‰ÑÕó    c                 óª   — t        |«      r| j                  «        yt        |«      }	 | j                  j	                  ||«       y# t
        $ r Y yw xY w)zmHandle a user stopping or breaking at a line.

        Convert frame to a string and send it to gui.
        N)Ú_in_rpc_codeÚset_stepÚ_frame2messager   ÚinteractionÚTclError)r   ÚframeÚmessages      r   Ú	user_linezIdb.user_line$   sM   € ô
 ˜ÔØ�M‰MŒOØÜ  Ó'ˆð	Ø�H‰H× Ñ  ¨%Õ0øÜò 	Ùð	ús   ©A Á	AÁAc                 óŒ   — t        |«      r| j                  «        yt        |«      }| j                  j	                  |||«       y)z)Handle an the occurrence of an exception.N)r   r   r   r   r   )r   r   Úexc_infor   s       r   Úuser_exceptionzIdb.user_exception2   s6   € ä˜ÔØ�M‰MŒOØÜ  Ó'ˆØ�‰×Ñ˜W e¨XÕ6r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   Ú__classcell__)r   s   @r   r
   r
      s   ø„ Ù<ôòö7r   r
   c                 óÀ   — | j                   j                  j                  d«      ry| j                  }|€y|j                   j                  }d|v rd|v ryt	        |«      S )z)Determine if debugger is within RPC code.zrpc.pyTFÚidlelibÚdebugger)Úf_codeÚco_filenameÚcountÚf_backr   )r   Ú
prev_frameÚ	prev_names      r   r   r   :   s_   € à‡|�|×Ñ×%Ñ% hÔ/Øà—\‘\ˆ
ØÐØØ×%Ñ%×1Ñ1ˆ	Ø˜	Ñ! j°IÑ&=ð Ü˜JÓ'Ð'r   c                 óÜ   — | j                   }|j                  }| j                  }t        j                  j                  |«      }|› d|› �}|j                  dk7  r|› d|j                  › d�}|S )z"Return a message string for frame.Ú:Ú?ú: z())r(   r)   Úf_linenoÚosÚpathÚbasenameÚco_name)r   ÚcodeÚfilenameÚlinenor5   r   s         r   r   r   I   sj   € à�<‰<€DØ×Ñ€HØ�^‰^€FÜ�w‰w×Ñ Ó)€HØ�
˜!˜F˜8Ð$€GØ‡|�|�sÒØ�I˜R §¡˜~¨RÐ0ˆØ€Nr   c                   ó¾   — e Zd ZdZdZdZdZdZdZdZ	dZ
dd„Zd„ Zdd„Zd„ Zdd„Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Z d„ Z!y)ÚDebuggerz–The debugger interface.

    This class handles the drawing of the debugger window and
    the interactions with the underlying debugger session.
    Nc                 ó„   — |€t        | «      }|| _        || _        d| _        | j	                  «        d| _        d| _        y)a  Instantiate and draw a debugger window.

        :param pyshell: An instance of the PyShell Window
        :type  pyshell: :class:`idlelib.pyshell.PyShell`

        :param idb: An instance of the IDLE debugger (optional)
        :type  idb: :class:`idlelib.debugger.Idb`
        NFr   )r
   ÚpyshellÚidbr   Úmake_guiÚinteractingÚnesting_level)r   r=   r>   s      r   r   zDebugger.__init__c   s@   € ð ˆ;Ü�d“)ˆCØˆŒØˆŒØˆŒ
Ø�‰ŒØ ˆÔØˆÕr   c                 óî   ‡ ‡— ‰ j                   dkD  r1‰ j                  «        ‰ j                  j                  dˆˆ fd„«       y	 d‰ _         ‰ j
                  j                  ‰Ž d‰ _        S # d‰ _        w xY w)zRun the debugger.r   éd   c                  ó"   •—  ‰j                   ‰ Ž S r   )Úrun)Úargsr   s   €€r   Ú<lambda>zDebugger.run.<locals>.<lambda>–   s   ø€ ¨¨¯©°4©r   NTF)rA   Ú
abort_loopÚrootÚafterr@   r>   rE   )r   rF   s   ``r   rE   zDebugger.runu   sc   ù€ ð> ×Ñ Ò!Ø�O‰OÔØ�I‰I�O‰O˜CÔ!8Ô9Øð	%Ø#ˆDÔØ�4—8‘8—<‘< Ð&à$ˆDÕø˜uˆDÕús   ÁA+ Á+	A4c                 óT  — 	 | j                  «        | j                  r| j                  j	                  «        y| j
                  r!| j
                  j                  «        d| _        | j                  j                  «        | j                  j                  «        y# t        $ r Y Œ”w xY w)zClose the debugger and window.N)
ÚquitÚ	Exceptionr@   ÚtopÚbellÚstackviewerÚcloser=   Úclose_debuggerÚdestroy©r   Úevents     r   rQ   zDebugger.closež   sƒ   € ð	Ø�I‰IŒKð ×ÒØ�H‰H�M‰MŒOØØ×ÒØ×Ñ×"Ñ"Ô$¸ dÔ&6ð 	�‰×#Ñ#Ô%à�‰×ÑÕøô ò 	Ùð	ús   ‚B Â	B'Â&B'c                 óJ  — | j                   }|j                  | _        |j                  x| _        }t        |«      x| _        }| j                  j                  d«       | j                  j                  d«       |j                  d| j                  «       | j                  j                  d| j                  «       t        |«      x| _        }| j                  j                  d¬«       g x| _        }t        |d| j                  ¬«      x| _        }|j#                  |«       t        |d	| j$                  ¬«      x| _        }|j#                  |«       t        |d
| j(                  ¬«      x| _        }|j#                  |«       t        |d| j,                  ¬«      x| _        }|j#                  |«       t        |d| j0                  ¬«      x| _        }|j#                  |«       |D ]&  }|j3                  d¬«       |j                  d¬«       Œ( t        |«      x| _        }| j4                  j                  d¬«       | j6                  s5t9        |«      | j:                  _        | j6                  j=                  d«       t?        |d| j@                  | j6                  ¬«      | _!        | jB                  jE                  dd¬«       | jF                  st9        |«      | j:                  _#        t?        |d| jH                  | jF                  ¬«      | _%        | jJ                  jE                  dd¬«       | jL                  s5t9        |«      | j:                  _&        | jL                  j=                  d«       t?        |d| jN                  | jL                  ¬«      | _(        | jP                  jE                  dd¬«       | jR                  st9        |«      | j:                  _)        t?        |d| jT                  | jR                  ¬«      | _+        | jV                  jE                  dd¬«       tY        |d¬«      | _-        | jZ                  j                  d¬«       tY        |d¬«      | _.        | j\                  j                  dd¬«       | j\                  j_                  d«      | _0        t        |d¬«      | _1        | jb                  j                  dd¬«       t        |«      | _2        | jd                  j                  dd¬«       t        |d¬«      | _3        | jf                  j                  dd¬«       | j6                  ji                  «       r| jA                  «        | jL                  ji                  «       r| jO                  «        | jR                  ji                  «       r| jU                  «        yy) z$Draw the debugger gui on the screen.zDebug ControlÚDebugÚWM_DELETE_WINDOWz<Escape>Úw)ÚanchorÚGo)ÚtextÚcommandÚStepÚOverÚOutÚQuitÚdisabled©ÚstateÚleft)Úsideé   ÚStack)r\   r]   Úvariabler   ©ÚrowÚcolumnÚSourceÚLocalsÚGlobalsÚx)rZ   ÚfillÚ
background)ÚheightÚboth©Úexpandrq   N)5r=   ÚflistrI   r   rN   Úwm_titleÚwm_iconnameÚwm_protocolrQ   Úbindr   ÚbframeÚpackÚbuttonsÚButtonÚcontÚbcontÚappendÚstepÚbstepÚnextÚbnextÚretÚbretrL   Ú	configureÚcframeÚvstackÚ
BooleanVarr   ÚsetÚCheckbuttonÚ
show_stackÚbstackÚgridÚvsourceÚshow_sourceÚbsourceÚvlocalsÚshow_localsÚblocalsÚvglobalsÚshow_globalsÚbglobalsÚLabelÚstatusÚerrorÚcgetÚerrorbgÚfstackÚflocalsÚfglobalsÚget)r   r=   rI   rN   r|   ÚblÚbrŠ   s           r   r?   zDebugger.make_gui°   s(  € à—,‘,ˆØ—]‘]ˆŒ
Ø"Ÿ<™<Ð'ˆŒ	�DÜ'¨Ó-Ð-ˆŒ�3Ø�‰×Ñ˜/Ô*Ø�‰×Ñ˜WÔ%Ø�‰Ð*¨D¯J©JÔ7Ø�‰�‰�j $§*¡*Ô-ä$ S›zÐ)ˆŒ�fØ�‰×Ñ ÐÔ$ØÐˆŒ�rä ¨T¸4¿9¹9ÔEÐEˆŒ
�QØ
�	‰	�!ŒÜ ¨V¸T¿Y¹YÔGÐGˆŒ
�QØ
�	‰	�!ŒÜ ¨V¸T¿Y¹YÔGÐGˆŒ
�QØ
�	‰	�!ŒÜ˜v¨E¸4¿8¹8ÔDÐDˆŒ	�AØ
�	‰	�!ŒÜ˜v¨F¸D¿I¹IÔFÐFˆŒ	�AØ
�	‰	�!ŒãˆAØ�K‰K˜jˆKÔ)Ø�F‰F˜ˆFÕð ô  % V›}Ð,ˆŒ�fØ�‰×Ñ˜fÐÔ%à�{Š{Ü$.¨s£OˆD�N‰NÔ!Ø�K‰K�O‰O˜AÔÜ! &Ø $§/¡/¸D¿K¹KôIˆŒà�‰×Ñ˜Q qÐÔ)Ø�|Š|Ü%/°£_ˆD�N‰NÔ"Ü" 6Ø 4×#3Ñ#3¸d¿l¹lôLˆŒà�‰×Ñ˜a¨ÐÔ*Ø�|Š|Ü%/°£_ˆD�N‰NÔ"Ø�L‰L×Ñ˜QÔÜ" 6Ø 4×#3Ñ#3¸d¿l¹lôLˆŒà�‰×Ñ˜a¨ÐÔ*Ø�}Š}Ü&0°£oˆD�N‰NÔ#Ü# FØ D×$5Ñ$5ÀÇÁôOˆŒà�‰×Ñ˜q¨ÐÔ+ä˜C¨Ô,ˆŒØ�‰×Ñ ÐÔ$Ü˜3 sÔ+ˆŒ
Ø�
‰
�‰˜s¨ˆÔ-Ø—z‘z—‘ |Ó4ˆŒä˜C¨Ô*ˆŒØ�‰×Ñ ¨ÐÔ/Ü˜S“zˆŒØ�‰×Ñ ¨ÐÔ0Ü˜c¨!Ô,ˆŒØ�‰×Ñ !¨&ÐÔ1à�;‰;�?‰?ÔØ�O‰OÔØ�<‰<×ÑÔØ×ÑÔØ�=‰=×ÑÔØ×ÑÕð r   c                 ó0  — || _         | j                  j                  |¬«       |r |\  }}}	 |j                  }|�	 |› d|› �}d}nd}d }| j                  }| j                  j                  ||¬«       | j                  }	|	r;| j                  j                  | j                   |«      \  }
}|	j                  |
|«       | j                  d«       | j                  j                  «       r| j                  «        | j                   D ]  }|j                  d¬	«       Œ | j"                  j%                  «        | xj&                  dz  c_        | j(                  j*                  j-                  d
d«       | xj&                  dz  c_        | j                   D ]  }|j                  d¬	«       Œ | j                  j                  d¬«       | j                  j                  d| j                  ¬«       d | _         y # t        $ r dt        |«      z  }Y �ŒÓw xY w#  Y �ŒÒxY w)N©r\   z%sr1   ÚyellowÚ )r\   rr   rg   Únormalrc   Úvwaitú::idledebugwaitrb   )r   rœ   r‰   r    ÚAttributeErrorÚstrrŸ   r�   rP   r>   Ú	get_stackÚ
load_stackÚshow_variablesr’   r£   Úsync_source_liner~   rN   ÚwakeuprA   rI   ÚtkÚcall)r   r   r   ÚinfoÚtypeÚvalueÚtbÚm1ÚbgÚsvÚstackÚir¥   s                r   r   zDebugger.interactionü   sÑ  € ØˆŒ
Ø�‰×Ñ 7ÐÔ+áØ"‰OˆD�%˜ð&Ø—]‘]�ð Ð ðà˜4˜r % Ð)�Bð ‰BàˆBØˆBØ—‘ˆBØ�
‰
×Ñ "°ÐÔ4à×ÑˆÙØ—x‘x×)Ñ)¨$¯*©*°bÓ9‰HˆE�1Ø�M‰M˜% Ô#à×Ñ˜AÔà�<‰<×ÑÔØ×!Ñ!Ô#à—”ˆAØ�K‰K˜hˆKÕ'ð ð 	�‰�‰Ôð 	×Ò˜aÑÕØ�	‰	�‰×Ñ˜'Ð#4Ô5Ø×Ò˜aÑÕà—”ˆAØ�K‰K˜jˆKÕ)ð à�‰×Ñ 2ÐÔ&Ø�
‰
×Ñ "°·±ÐÔ>Øˆ�
øôQ "ò &ØœC ›IÑ%“ð&ûðÚús   ­G2 ¼H Ç2HÈHÈHc                 óà   — | j                   }|sy | j                  |«      \  }}|d d |dd  z   dk7  r=t        j                  j	                  |«      r| j
                  j                  ||«       y y y )Nrg   éÿÿÿÿz<>)r   Ú_Debugger__frame2fileliner3   r4   Úexistsrw   Úgotofileline)r   r   r8   r9   s       r   r²   zDebugger.sync_source_line.  sk   € Ø—
‘
ˆÙØØ×0Ñ0°Ó7Ñˆ�&Ø�B�Qˆ<˜( 2 3˜-Ñ'¨4Ò/´B·G±G·N±NÀ8Ô4LØ�J‰J×#Ñ# H¨fÕ5ð 5MÐ/r   c                 óR   — |j                   }|j                  }|j                  }||fS r   )r(   r)   r2   )r   r   r7   r8   r9   s        r   Ú__frame2filelinezDebugger.__frame2fileline6  s*   € Ø�|‰|ˆØ×#Ñ#ˆØ—‘ˆØ˜ÐÐr   c                 óX   — | j                   j                  «        | j                  «        y r   )r>   Úset_continuerH   ©r   s    r   r€   zDebugger.cont<  s   € Ø�‰×ÑÔØ�‰Õr   c                 óX   — | j                   j                  «        | j                  «        y r   )r>   r   rH   rÈ   s    r   rƒ   zDebugger.step@  ó   € Ø�‰×ÑÔØ�‰Õr   c                 ón   — | j                   j                  | j                  «       | j                  «        y r   )r>   Úset_nextr   rH   rÈ   s    r   r…   zDebugger.nextD  s"   € Ø�‰×Ñ˜$Ÿ*™*Ô%Ø�‰Õr   c                 ón   — | j                   j                  | j                  «       | j                  «        y r   )r>   Ú
set_returnr   rH   rÈ   s    r   r‡   zDebugger.retH  s"   € Ø�‰×Ñ˜DŸJ™JÔ'Ø�‰Õr   c                 óX   — | j                   j                  «        | j                  «        y r   )r>   Úset_quitrH   rÈ   s    r   rL   zDebugger.quitL  rÊ   r   c                 óR   — | j                   j                  j                  ddd«       y )Nr�   r¬   Ú1)rI   r´   rµ   rÈ   s    r   rH   zDebugger.abort_loopP  s   € Ø�	‰	�‰×Ñ˜%Ð!2°CÕ8r   c                 óÎ  — | j                   s‹| j                  j                  «       rqt        | j                  | j
                  | «      x| _         }| j                  r<| j                  j                  | j                  d «      \  }}|j                  ||«       y y | j                   }|r1| j                  j                  «       sd | _         |j                  «        d| j                  d<   y )Nrg   rs   )rP   r‹   r£   ÚStackViewerr    rw   r   r>   r¯   r°   rQ   )r   r¼   r½   r¾   s       r   r�   zDebugger.show_stackS  sª   € Ø×Ò D§K¡K§O¡OÔ$5Ü$/°·±¸T¿Z¹ZÈÓ$NÐNˆDÔ˜rØ�zŠzØŸ8™8×-Ñ-¨d¯j©j¸$Ó?‘��qØ—‘˜e QÕ'ð ð ×!Ñ!ˆBÙ˜$Ÿ+™+Ÿ/™/Ô+Ø#'�Ô Ø—‘”
Ø$%ˆD�K‰K˜Ò!r   c                 óZ   — | j                   j                  «       r| j                  «        y y r   )r’   r£   r²   rÈ   s    r   r“   zDebugger.show_source`  s#   € Ø�<‰<×ÑÔØ×!Ñ!Õ#ð r   c                 ó8   — |d   | _         | j                  «        y ©Nr   )r   r±   )r   Ú	stackitems     r   Ú
show_framezDebugger.show_framed  s   € Ø˜q‘\ˆŒ
Ø×ÑÕr   c                 óü   — | j                   }| j                  j                  «       r|sDt        | j                  d«      | _         n(|r&d | _         |j                  «        d| j                  d<   | j                  «        y )Nrn   rg   rs   )Úlocalsviewerr•   r£   ÚNamespaceViewerr¡   rQ   r±   )r   Úlvs     r   r–   zDebugger.show_localsh  sa   € Ø×ÑˆØ�<‰<×ÑÔÙÜ$3°D·L±LÀ(Ó$K�Õ!áØ$(�Ô!Ø—‘”
Ø)*�—‘˜XÑ&Ø×ÑÕr   c                 óü   — | j                   }| j                  j                  «       r|sDt        | j                  d«      | _         n(|r&d | _         |j                  «        d| j                  d<   | j                  «        y )Nro   rg   rs   )Úglobalsviewerr˜   r£   rÜ   r¢   rQ   r±   )r   Úgvs     r   r™   zDebugger.show_globalst  sa   € Ø×ÑˆØ�=‰=×ÑÔÙÜ%4°T·]±]ÀIÓ%N�Õ"áØ%)�Ô"Ø—‘”
Ø*+�—‘˜hÑ'Ø×ÑÕr   c                 ól  — | j                   }| j                  }| j                  }|sd x}}n"|j                  }|j                  }|r|r||u rd }|r1|j                  ||| j                  j                  j                  «       |r2|j                  ||| j                  j                  j                  «       y y r   )	rÛ   rß   r   Úf_localsÚ	f_globalsÚ	load_dictr=   ÚinterpÚrpcclt)r   ÚforcerÝ   rà   r   ÚldictÚgdicts          r   r±   zDebugger.show_variables€  s›   € Ø×ÑˆØ×ÑˆØ—
‘
ˆÙØ Ð ˆE‘Eà—N‘NˆEØ—O‘OˆEÙ‘b˜U e™^Ø�ÙØ�L‰L˜  t§|¡|×':Ñ':×'AÑ'AÔBÙØ�L‰L˜  t§|¡|×':Ñ':×'AÑ'AÕBð r   c                 ó<   — | j                   j                  ||«       y)zzSet a filename-lineno breakpoint in the debugger.

        Called from self.load_breakpoints and EW.setbreakpoint
        N)r>   Ú	set_break©r   r8   r9   s      r   Úset_breakpointzDebugger.set_breakpoint�  s   € ð
 	�‰×Ñ˜8 VÕ,r   c                 ó<   — | j                   j                  ||«       y r   )r>   Úclear_breakrì   s      r   Úclear_breakpointzDebugger.clear_breakpoint—  s   € Ø�‰×Ñ˜X vÕ.r   c                 ó:   — | j                   j                  |«       y r   )r>   Úclear_all_file_breaks)r   r8   s     r   Úclear_file_breakszDebugger.clear_file_breaksš  s   € Ø�‰×&Ñ& xÕ0r   c                 óà   — | j                   j                  j                  D ]<  }|j                  j                  }	 |j
                  D ]  }| j                  ||«       Œ Œ> y# t        $ r Y ŒKw xY w)z>Load PyShellEditorWindow breakpoints into subprocess debugger.N)r=   rw   ÚinversedictÚior8   Úbreakpointsrí   r­   )r   Úeditwinr8   r9   s       r   Úload_breakpointszDebugger.load_breakpoints�  sd   € à—|‘|×)Ñ)×5Ô5ˆGØ—z‘z×*Ñ*ˆHðØ%×1Ô1�FØ×'Ñ'¨°&Õ9ñ 2ñ 6øô
 "ò Ùðús   »#A!Á!	A-Á,A-r   )r   )"r    r!   r"   r#   r‹   r’   r•   r˜   rP   rÛ   rß   r   rE   rQ   r?   r   r²   rÁ   r€   rƒ   r…   r‡   rL   rH   r�   r“   rÙ   r–   r™   r±   rí   rð   ró   rù   © r   r   r;   r;   U   s¤   „ ñð
 €FØ€GØ€GØ€HØ€KØ€LØ€Móò$'%óRò$J óX0òd6ò òòòòòò9ò&ò$òò
ò
óCò -ò/ò1ór   r;   c                   óH   — e Zd ZdZd„ Zdd„Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zy)rÔ   z#Code stack viewer for debugger GUI.c                 ó´   — t        j                  «       rt        j                  | |«       nt        j                  | |d¬«       || _        || _        g | _        y )NéP   )Úwidth)r   ÚisAquaTkr   r   rw   r   r½   )r   Úmasterrw   r   s       r   r   zStackViewer.__init__«  sE   € Ü�?‰?Ôô ×!Ñ! $¨Õ/ä×!Ñ! $¨°bÕ9ØˆŒ
ØˆŒØˆ�
r   Nc                 óÄ  — || _         | j                  «        t        t        |«      «      D ]•  }||   \  }}	 |j                  d   }|j
                  }|j                  }|j                  }	dd l}
|
j                  ||«      }|j                  «       }|	dv r	d|||fz  }n	d||	||fz  }||k(  rd|z   }| j                  |«       Œ— |�| j                  |«       y y #  d}Y Œ˜xY w)Nr    r0   r   )r0   r©   Nz%s, line %d: %sz%s.%s(), line %d: %sz> )r½   ÚclearÚrangeÚlenrã   r(   r)   r6   Ú	linecacheÚgetlineÚstripr‚   Úselect)r   r½   Úindexr¾   r   r9   Úmodnamer7   r8   Úfuncnamer  Ú
sourcelineÚitems                r   r°   zStackViewer.load_stack·  sû   € ØˆŒ
Ø�
‰
ŒÜ”s˜5“zÖ"ˆAØ! !™H‰MˆE�6ðØŸ/™/¨*Ñ5�ð —<‘<ˆDØ×'Ñ'ˆHØ—|‘|ˆHÛØ"×*Ñ*¨8°VÓ<ˆJØ#×)Ñ)Ó+ˆJØ˜?Ñ*Ø(¨G°V¸ZÐ+HÑH‘à-°¸(Ø17¸ð1Eñ E�à�EŠzØ˜d‘{�Ø�K‰K˜Õð' #ð( ÐØ�K‰K˜Õð øð!Ø’ús   ¸CÃCc                 óH   — | j                   rt        j                  | |«      S y©úOverride base method.N)r½   r   Úpopup_eventrT   s     r   r  zStackViewer.popup_eventÑ  s!   € à�:Š:Ü×+Ñ+¨D°%Ó8Ð8ð r   c                 ó�   — | j                   }|j                  d| j                  ¬«       |j                  d| j                  ¬«       y)r  zGo to source line)Úlabelr]   zShow stack frameN)ÚmenuÚadd_commandÚgoto_source_lineÚshow_stack_frame)r   r  s     r   Ú	fill_menuzStackViewer.fill_menuÖ  sI   € à�y‰yˆØ×ÑÐ2Ø!%×!6Ñ!6ð 	ô 	8à×ÑÐ1Ø!%×!6Ñ!6ð 	õ 	8r   c                 ó˜   — d|cxk  rt        | j                  «      k  r,n y| j                  j                  | j                  |   «       yy)r  r   N)r  r½   r   rÙ   ©r   r	  s     r   Ú	on_selectzStackViewer.on_selectÞ  s7   € à�Ô'œ˜DŸJ™J›Õ'Ø�H‰H×Ñ §
¡
¨5Ñ 1Õ2ð (r   c                 ó&   — | j                  |«       yr  )r“   r  s     r   Ú	on_doublezStackViewer.on_doubleã  s   € à×Ñ˜Õr   c                 ó\   — | j                   j                  d«      }| j                  |«       y )NÚactive)Úlistboxr	  r“   r  s     r   r  zStackViewer.goto_source_lineç  s$   € Ø—‘×"Ñ" 8Ó,ˆØ×Ñ˜Õr   c                 óÎ   — | j                   j                  d«      }d|cxk  rt        | j                  «      k  r,n y | j                  j                  | j                  |   «       y y )Nr  r   )r   r	  r  r½   r   rÙ   r  s     r   r  zStackViewer.show_stack_frameë  sK   € Ø—‘×"Ñ" 8Ó,ˆØ�Ô'œ˜DŸJ™J›Õ'Ø�H‰H×Ñ §
¡
¨5Ñ 1Õ2ð (r   c                 ó8  — d|cxk  rt        | j                  «      k  sy  y | j                  |   \  }}|j                  }|j                  }t        j
                  j                  |«      r0| j                  j                  |«      }|r|j                  |«       y y y r×   )
r  r½   r(   r)   r3   r4   Úisfilerw   ÚopenÚgotoline)r   r	  r   r9   r7   r8   Úedits          r   r“   zStackViewer.show_sourceð  sƒ   € Ø�UÔ,œS §¡›_Ò,Øð -ØØŸ
™
 5Ñ)‰ˆˆvØ�|‰|ˆØ×#Ñ#ˆÜ�7‰7�>‰>˜(Ô#Ø—:‘:—?‘? 8Ó,ˆDÙØ—‘˜fÕ%ð ð $r   r   )r    r!   r"   r#   r   r°   r  r  r  r  r  r  r“   rú   r   r   rÔ   rÔ   ¨  s2   „ Ù)ò
óò49ò
8ò3ò
 ò ò3ó
	&r   rÔ   c                   ó*   — e Zd ZdZdd„ZdZdd„Zd„ Zy)	rÜ   z/Global/local namespace viewer for debugger GUI.Nc           
      ó  — d}d}|rdt        |«      z  }|| _        || _        dd l}|j	                  «       | _        d| j
                  _        d| j
                  _        t        |«      x| _	        }| j                  j                  dd¬«       t        ||dd	¬
«      | _        | j                  j                  d¬«       t        |d¬«      x| _        }|j                  dd¬«       t        |t!        dt#        d|«      «      dd||f¬«      x| _        }	|	j                  ddd¬«       |	j&                  |d<   |j(                  |	d<   t        |	«      x| _        }
|	j-                  dd|
d¬«      | _        | j1                  |«       y )Nr   é(   é   é<   rg   rt   ru   é   Úgroove)r\   ÚborderwidthÚreliefrp   )rq   Úvbar)ÚnameÚrightÚy)rf   rq   é,  )rs   Úscrollregionre   )rf   rq   rv   r]   ÚyscrollcommandÚnw)ÚwindowrZ   )r  r   ÚtitleÚreprlibÚReprÚreprÚ	maxstringÚmaxotherr   r   r}   r›   r  r   r0  ÚCanvasÚminÚmaxÚcanvasÚyviewr�   ÚsubframeÚcreate_windowÚsfidrä   )r   r   r9  Úodictrþ   rs   r:  r   r0  rB  rD  s              r   r   zNamespaceViewer.__init__ÿ  sW  € ØˆØˆÙØœ˜E›
‘]ˆFØˆŒØˆŒ
ÛØ—L‘L“NˆŒ	Ø ˆ�	‰	ÔØˆ�	‰	ÔÜ" 6›]Ð*ˆŒ
�UØ�
‰
�‰˜q vˆÔ.Ü˜5 u¸!ÀHÔMˆŒ
Ø�
‰
�‰˜SˆÔ!Ü$ U°Ô8Ð8ˆŒ	�DØ�	‰	�w Sˆ	Ô)Ü% eÜ-0°´c¸"¸f³oÓ-FØ45°q¸%ÀÐ3Hô Jð 	JˆŒ�fð 	�‰˜ f°QˆÔ7Ø Ÿ,™,ˆˆY‰Ø#'§8¡8ˆÐÑ Ü#(¨£=Ð0ˆŒ˜Ø×(Ñ(¨¨A°hÀtÐ(ÓLˆŒ	Ø�‰�uÕr   rÀ   c                 óx  — || j                   u r|sy | j                  }| j                  }t        |j                  j                  «       «      D ]  }|j                  «        Œ d | _         |s!t        |d¬«      }|j                  dd¬«       n¥|j                  «       }t        |«      }	d}
|	D ]ƒ  }||   }| j                  j                  |«      }|r|dd }t        ||¬«      }|j                  |
dd¬«       t        |dd¬	«      }|j                  d|«       |j                  |
dd¬«       |
dz   }
Œ… || _         |j                  «        |j                  «       }|j!                  «       }| j"                  }dd||f| j"                  d
<   |dkD  rd|d<   |j%                  d¬«       y ||d<   |j%                  d¬«       y )NÚNoner§   r   rj   rg   rÀ   r7  )rk   rl   Ústicky)rþ   r.  r5  r4  rs   )rv   )Ú
prev_odictrD  r   ÚlistÚchildrenÚvaluesrS   r›   r‘   ÚkeysÚsortedr<  ÚEntryÚinsertÚupdate_idletasksÚwinfo_reqwidthÚwinfo_reqheightrB  r}   )r   rG  rç   Ú
rpc_clientrD  r   ÚcÚlÚ	keys_listÚnamesrk   r1  r¸   Úsvaluerþ   rs   rB  s                    r   rä   zNamespaceViewer.load_dict  s   € Ø�D—O‘OÑ#©EØØ—=‘=ˆØ—
‘
ˆÜ�h×'Ñ'×.Ñ.Ó0Ö1ˆAØ�I‰I�Kð 2àˆŒÙÜ�h VÔ,ˆAØ�F‰F�q ˆFÕ#ð Ÿ
™
›ˆIÜ˜9Ó%ˆEàˆCÛ�Ø˜d™�ØŸ™Ÿ™¨Ó.�ñ Ø# A b˜\�FÜ˜(¨Ô.�Ø—‘˜3 q°�Ô6Ü˜(¨!¸Ô;�Ø—‘˜˜FÔ#Ø—‘˜3 q°�Ô6Ø˜!‘e‘ð ð  ˆŒà×!Ñ!Ô#Ø×'Ñ'Ó)ˆØ×)Ñ)Ó+ˆØ—‘ˆØ'(¨!¨U°FÐ&;ˆ�‰�NÑ#Ø�CŠ<Ø"ˆF�8ÑØ�J‰J˜aˆJÕ à%ˆF�8ÑØ�J‰J˜aˆJÕ r   c                 ó8   — | j                   j                  «        y r   )r   rS   rÈ   s    r   rQ   zNamespaceViewer.closeR  s   € Ø�
‰
×ÑÕr   r   )r   N)r    r!   r"   r#   r   rK  rä   rQ   rú   r   r   rÜ   rÜ   ü  s   „ Ù5óð6 €Jó4!ólr   rÜ   Ú__main__)Úmainzidlelib.idle_test.test_debuggerr,  F)Ú	verbosityÚexit)r#   Úbdbr3   ÚtkinterÚtkinter.ttkr   r   r&   r   Úidlelib.scrolledlistr   Úidlelib.windowr   ÚBdbr
   r   r   r;   rÔ   rÜ   r    Úunittestr^  rú   r   r   Ú<module>rh     sƒ   ðñó" Û 	ä ß (å Ý -Ý )ô7ˆ#�'‰'ô 7ò:(ò	÷Pñ Pôf
Q&�,ô Q&÷hWñ Wðt ˆzÒÝÙÐ	*°a¸eÖDð r   