Ë
    #´˜j–T  ã                   óN  — d 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mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ ddlZddlZ eej2                  d
   d«      s4dD ]  Z eee«       ej2                  dez   = Œ dej2                  d
   _        dZ	 dZee_        ee _        d4d„Z"	 d5d„Z#da$d„ Z% e%d«        ejL                  «       Z'e'fd„Z(da)da*da+d6d„Z,d„ Z-d„ Z.d„ Z/d„ Z0d„ Z1d„ Z2d„ Zd„ Z3d„ Z4d Z5d!„ Z6d"„ Z7 G d#„ d$ejp                  «      Z9 G d%„ d&ejt                  «      Z; G d'„ d(e;«      Z< G d)„ d*e;«      Z= G d+„ d,ej|                  «      Z? G d-„ d.«      Z@eAd/k(  rdd0lBm,Z,  e,d1d2¬3«        e%d«       y# e!$ r Y ŒÝw xY w)7z× idlelib.run

Simplified, pyshell.ModifiedInterpreter spawns a subprocess with
f'''{sys.executable} -c "__import__('idlelib.run').run.main()"'''
'.run' is needed because __import__ returns idlelib, not idlelib.run.
é    N)Úautocomplete)Úcalltip)Ú
debugger_r)Ú
debugobj_r)Úiomenu)Úrpc)Ústackviewerzidlelib.runÚfirstrun)ÚsimpledialogÚ
messageboxÚfontÚdialogÚ
filedialogÚcommondialogÚttkztkinter.Fz	127.0.0.1zCtrl-D (end-of-file)c                 ó°   — d}|d|› d|› d�z  }|€t        j                  ||«      }|j                  «       }|r|d|z  z  }||j                  › d| › d�z  }|S )zFormat warnings the IDLE way.z!
Warning (from warnings module):
z  File "z", line Ú
z    %s
ú: )Ú	linecacheÚgetlineÚstripÚ__name__)ÚmessageÚcategoryÚfilenameÚlinenoÚlineÚss         úlib/python3.12/idlelib/run.pyÚidle_formatwarningr    3   sy   € ð 	.€AØˆ9�X�J˜i¨ x¨rÐ	2Ñ2€AØ€|Ü× Ñ  ¨6Ó2ˆØ�:‰:‹<€DÙØ	ˆZ˜$ÑÑˆØˆH×ÑÐ˜b  	¨Ð	,Ñ,€AØ€Hó    c           	      ó„   — |€t         j                  }	 |j                  t        | ||||«      «       y# t        $ r Y yw xY w)zuShow Idle-format warning after replacing warnings.showwarning.

    The only difference is the formatter called.
    N)ÚsysÚstderrÚwriter    ÚOSError)r   r   r   r   Úfiler   s         r   Úidle_showwarning_subprocr(   @   sH   € ð €|Ü�z‰zˆðØ�
‰
Ô%Ø˜ 8¨V°Tó;õ 	<øäò Ùðús   ”3 ³	?¾?c                 ó†   — | r't         € t        j                  a t        t        _        yyt         �t         t        _        da yy)zFReplace warning.showwarning with idle_showwarning_subproc, or reverse.N)Ú_warnings_showwarningÚwarningsÚshowwarningr(   )Úcaptures    r   Úcapture_warningsr.   P   sA   € ñ Ü Ð(Ü$,×$8Ñ$8Ð!Ü#;ŒHÕ ð )ô !Ð,Ü#8ŒHÔ Ø$(Ñ!ð -r!   Tc                 ó&   — | j                  d«       y)z–Process any tk events that are ready to be dispatched if tkinter
    has been imported, a tcl interpreter has been created and tk has been
    loaded.ÚupdateN)Úeval)Útcls    r   Úhandle_tk_eventsr3   `   s   € ð ‡H�HˆXÕr!   c                 óø  — | a 	 t        t        j                  «      dkD  sJ ‚t	        t        j                  d   «      }t        d«       dgt        j                  dd t        j                  t        dt        |ffd¬	«      j                  «        	 	 t        r	 t        «        	 t         j"                  j%                  dd
¬«      }|r3|\  }\  }}} ||i |¤Ž}t         j*                  j-                  ||f«       n
t/        «        Œt#  t        dt        j                  ¬«       Y yxY w# t        $ r Y Œ¢w xY w# t&        j(                  $ r d}Y Œˆw xY w# t        $ r t0        rdaY ŒÔt2        $ r t        d«       ‚  t        j4                  «       \  }}	}
	 t7        «        t         j*                  j-                  df«       Y �Œ0#  t9        j6                  ||	|
t        j                  ¬«       t        «        Y nxY wY ŒöxY w)af  Start the Python execution server in a subprocess

    In the Python subprocess, RPCServer is instantiated with handlerclass
    MyHandler, which inherits register/unregister methods from RPCHandler via
    the mix-in class SocketIO.

    When the RPCServer 'server' is instantiated, the TCPServer initialization
    creates an instance of run.MyHandler and calls its handle() method.
    handle() instantiates a run.Executive object, passing it a reference to the
    MyHandler object.  That reference is saved as attribute rpchandler of the
    Executive instance.  The Executive methods have access to the reference and
    can pass it on to entities that they command
    (e.g. debugger_r.Debugger.start_debugger()).  The latter, in turn, can
    call MyHandler(SocketIO) register/unregister methods via the reference to
    register and unregister themselves.

    é   éÿÿÿÿz/IDLE Subprocess: no IP port passed in sys.argv.©r'   NTÚ Ú
SockThread)ÚtargetÚnameÚargsÚdaemonçš™™™™™©?)ÚblockÚtimeoutF)Úno_exitfuncÚlenr#   ÚargvÚintÚprintÚ
__stderr__r.   Ú	threadingÚThreadÚmanage_socketÚ	LOCALHOSTÚstartÚexit_nowÚexitÚKeyboardInterruptr   Úrequest_queueÚgetÚqueueÚEmptyÚresponse_queueÚputr3   ÚquittingÚ
SystemExitÚexc_infoÚprint_exceptionÚ	traceback)Údel_exitfuncÚportÚrequestÚseqÚmethodr<   ÚkwargsÚretÚtypeÚvalueÚtbs              r   Úmainrd   n   sË  € ð* €KðÜ”3—8‘8‹}˜qÒ Ð!Ð Ü”3—8‘8˜B‘<Ó ˆô �TÔØ�$„C‡H�H‰Q€KÜ×ÑœMØ&Ü% tÐ,Ð.Ø ô÷ ‘e”gà
ð$	ÝðÜ”FðÜ×+Ñ+×/Ñ/°dÀDÐ/ÓI�ñ
 Ø.5Ñ+�Ñ+�f˜d FÙ˜dÐ- fÑ-�Ü×"Ñ"×&Ñ&¨¨S zÕ2ä Ô"ð' øðÜÐ?Ü—>‘>õ	#áûô )ò áðûô
 —;‘;ò Ø’ðûô !ò 	ÝØ�ÙÜò 	Ü˜UÔ#Øð
	Ü!Ÿl™l›n‰OˆD�%˜ðÜÔ!Ü×"Ñ"×&Ñ&¨¨T {Ô3ò øðä×)Ñ)¨$°°rÄÇÁÕOÜ–ú‘úsq   „:D ÂE Â
D& Â#!D5 Ã?E ÄD#Ä&	D2Ä/E Ä1D2Ä2E Ä5EÅ
E ÅEÅE ÅG9Å#-G9Æ+F?Æ?3G4Ç2G9c                 ór  — t        d«      D ])  }t        j                  |«       	 t        | t        «      } n+ t        dt        j                  ¬«       t        | «       day |j                  «        y # t
        $ r:}t        d|j                  d   z   dz   t        j                  ¬«       |}Y d }~Œ¥d }~ww xY w)Né   zIDLE Subprocess: OSError: r5   z, retrying....r7   z8IDLE Subprocess: Connection to IDLE GUI failed, exiting.T)ÚrangeÚtimeÚsleepÚMyRPCServerÚ	MyHandlerr&   rE   r<   r#   rF   Úshow_socket_errorrL   Úhandle_request)ÚaddressÚiÚserverÚerrÚsocket_errors        r   rI   rI   ¼   s¢   € Ü�1ŽXˆÜ�
‰
�1Œð	Ü  ¬)Ó4ˆFÙð	 ô 	ð *Ü03·±õ	@ä˜,¨Ô0àˆØØ
×ÑÕøô ò 	ÜÐ.°·±¸!±Ñ<Ø"ñ#Ü),¯©õ9à�Lûð	ús   ¥A3Á3	B6Á<0B1Â1B6c                 óô   — ddl }ddlm}  |j                  «       }t	        |«       |j                  «         |dd|d   › d|d   › d| j                  › d	| j                  › d
�	|¬«       |j                  «        y)z(Display socket error from manage_socket.r   N)Ú	showerrorzSubprocess Connection Errorz#IDLE's subprocess can't connect to Ú:r5   z.
Fatal OSError #r   zz.
See the 'Startup failure' section of the IDLE doc, online at
https://docs.python.org/3/library/idle.html#startup-failure)Úparent)	ÚtkinterÚtkinter.messageboxrt   ÚTkÚfix_scalingÚwithdrawÚerrnoÚstrerrorÚdestroy)rq   rn   rw   rt   Úroots        r   rl   rl   Ï   s{   € ãÝ,Øˆ7�:‰:‹<€DÜ�ÔØ‡M�M„OÙØ)Ø1°'¸!±*°¸Q¸wÀq¹z¸lð KØ!Ÿi™i˜[¨¨3¯<©<¨.ð 9JðJð õð 	‡L�L…Nr!   c                 ó@  — | t         t        fv rot        j                  «       }t	        j
                  |«      5  t        j                  | ||«       ddd«       |j                  «       j                  d«      d   dz   gS t        j                  | |«      S # 1 sw Y   ŒExY w)z,Return line composing the exception message.Nr   éþÿÿÿ)ÚAttributeErrorÚ	NameErrorÚioÚStringIOÚ
contextlibÚredirect_stderrr#   Ú__excepthook__ÚgetvalueÚsplitrY   Úformat_exception_only)ÚtypÚexcrc   rq   s       r   Úget_message_linesrŽ   à   s   € à
Œ~œyÐ)Ñ)ä�k‰k‹mˆÜ×'Ñ'¨Õ,Ü×Ñ˜s C¨Ô,÷ -à—‘“×$Ñ$ TÓ*¨2Ñ.°Ñ5Ð6Ð6ä×.Ñ.¨s°CÓ8Ð8÷	 -Ð,ús   ¸BÂBc                  ó*  ‡‡‡— dd l }  | j                  «        t        «        t        j                  Št        j
                  «       x\  }}}}|\  t        _        t        _        t        _        |t        _	        t        «       Šˆˆˆfd„Š ‰|||«       y )Nr   c                 ó>  •— ‰j                  t        |«      «       |j                  }|j                  }|�8t        |«      ‰vr+ ‰
t	        |«      ||j
                  «       t        d‰	¬«       nE|�C|j                  s7t        |«      ‰vr* ‰
t	        |«      ||j
                  «       t        d‰	¬«       |rGt        j                  |«      }t        d‰	¬«       d}t        ||«       t        j                  |‰	¬«       t        | ||«      }|D ]  }t        |d‰	¬«       Œ y )NzF
The above exception was the direct cause of the following exception:
r7   zE
During handling of the above exception, another exception occurred:
z"Traceback (most recent call last):)zrun.pyzrpc.pyzthreading.pyzqueue.pyzdebugger_r.pyzbdb.pyr8   )Úendr'   )ÚaddÚidÚ__context__Ú	__cause__ra   Ú__traceback__rE   Ú__suppress_context__rY   Ú
extract_tbÚcleanup_tracebackÚ
print_listrŽ   )rŒ   r�   rc   ÚcontextÚcauseÚtbeÚexcludeÚlinesr   ÚefileÚ	print_excÚseens            €€€r   r¡   z"print_exception.<locals>.print_excö   s   ø€ Ø�‰”�C“ÔØ—/‘/ˆØ—‘ˆØÐ¤ E£°$Ñ!6Ù”d˜5“k 5¨%×*=Ñ*=Ô>Üð 2Ø8=ö?àÐ!Ø×*Ò*Ü�‹k Ñ%Ù”d˜7“m W¨g×.CÑ.CÔDÜð 2Ø8=õ?áÜ×&Ñ& rÓ*ˆCÜÐ6¸UÕCð2ˆGä˜c 7Ô+Ü× Ñ  ¨5Õ1Ü! # s¨BÓ/ˆÛˆDÜ�$˜B UÖ+ñ r!   )r   Ú
checkcacheÚflush_stdoutr#   r$   rW   Ú	last_typeÚ
last_valueÚlast_tracebackÚlast_excÚset)r   rŒ   Úvalrc   Úexcinfor    r¡   r¢   s        @@@r   rX   rX   ì   sl   ú€ ÛØ€I×ÑÔÜ„NÜ�J‰J€EÜ Ÿ\™\›^Ð+�L€Cˆˆb�7Ø8?Ñ5„C„M”3”>¤3Ô#5Ø„C„LÜ‹5€Dö,ñ2 ˆc�3˜Õr!   c                 ó  — | dd }| r'|D ]  }| d   d   j                  |«      sŒ n n| d= | rŒ'| r'|D ]  }| d   d   j                  |«      sŒ n n| d= | rŒ't        | «      dk(  r#|dd | dd t        dt        j                  ¬«       t
        j                  d   j                  }t        t        | «      «      D ]E  }| |   \  }}}}	|dk(  rd}|	s'|j                  d	«      r|j                  d
d||fi «      }	||||	f| |<   ŒG y)zARemove excluded traces from beginning/end of tb; get cached linesNr   r6   z** IDLE Internal Exception: r7   ÚexecÚ?z
-toplevel-z	<pyshell#r   r   )ÚcountrB   rE   r#   r$   r   ÚobjecttableÚ
rpchandlerrg   Ú
startswithÚ
remotecall)
rc   rž   Úorig_tbÚrpcfiler±   ro   ÚfnÚlnÚnmr   s
             r   r™   r™     s!  € à‘ˆe€GÙ
ÛˆGØ�!‰u�Q‰x�~‰~˜gÕ&Ùð ð ØˆqˆEò ñ ÛˆGØ�"‰v�a‰y�‰˜wÕ'Ùð ð ØˆrˆFò ô ˆ2ƒw�!‚|à™�
ˆ‰1ˆÜÐ,´3·:±:Õ>Ü—‘ Ñ(×3Ñ3€JÜ”3�r“7Ž^ˆØ˜a™5ÑˆˆB��DØ�Š9ØˆBÙ˜Ÿ™ kÔ2Ø×(Ñ(¨°iØ/1°2¨h¸ó<ˆDà�B˜˜DÐ ˆˆ1Šñ r!   c                   ó   — y)zXXX How to do this now?N© rº   r!   r   r¤   r¤   0  s   � r!   c                  óx   — t         rddl} | j                  «        t        d«       t	        j
                  d«       y)zêExit subprocess, possibly after first clearing exit functions.

    If config-main.cfg/.def 'General' 'delete-exitfunc' is True, then any
    functions registered with atexit will be removed before exiting.
    (VPython support)

    r   NF)rA   ÚatexitÚ_clearr.   r#   rM   )r¼   s    r   rM   rM   3  s&   € õ ÛØ�‰ŒÜ�UÔÜ‡H�HˆQ…Kr!   c                 ó(  — ddl }t        | j                  j                  dd«      «      }|dkD  rd|j                  j                  | «      D ]E  }|j                  j                  | |d¬«      }t        |d   «      }|dk  sŒ5t        d	|z  «      |d<   ŒG yy)
zScale fonts on HiDPI displays.r   NÚtkÚscalinggffffffö?T)r   r;   ÚexistsÚsizeg      è¿)	Útkinter.fontÚfloatr¿   Úcallr   ÚnamesÚFontrD   Úround)r   rw   rÀ   r;   r   rÂ   s         r   rz   rz   B  s…   € ãÜ�D—G‘G—L‘L  yÓ1Ó2€GØ�‚}Ø—L‘L×&Ñ& tÖ,ˆDØ—<‘<×$Ñ$¨$°TÀ$Ð$ÓGˆDÜ�t˜F‘|Ó$ˆDØ�a‹xÜ$ U¨4¡ZÓ0��V’ñ	 -ð r!   c                 óž   — | j                   �| j                   dz   nd}|t        j                  t        j                  |«      «      z   | _         y )Nz

r8   )Ú__doc__ÚtextwrapÚfillÚdedent)ÚfunÚtextÚtems      r   ÚfixdocrÑ   N  s9   € Ø$'§K¡KÐ$;ˆ3�;‰;˜ÒÀ€CØœŸ™¤h§o¡o°dÓ&;Ó<Ñ<€C…Kr!   é   c                  óš  ‡ ‡— t        j                  t        j                  «      ˆfd„«       Št	        ‰dt
        › d�«       t        j                  t        j                  «      ˆ fd„«       Š t	        ‰ dt
        › dt
        › d�«       t        j                  t        j                  «       t
        z   «       ‰t        _        ‰ t        _        y)	z9Install wrappers to always add 30 to the recursion limit.c                  óÂ   •— |rt        d«      ‚	 | \  }|dkD  st        d«      ‚‰j                  |t        z   «      S # t        $ r t        dt        | «      › d�«      ‚w xY w)Nz.setrecursionlimit() takes no keyword argumentsz0setrecursionlimit() takes exactly one argument (z given)r   z/recursion limit must be greater or equal than 1)Ú	TypeErrorÚ
ValueErrorrB   Ú__wrapped__ÚRECURSIONLIMIT_DELTA)r<   r_   ÚlimitÚsetrecursionlimits      €r   rÚ   z:install_recursionlimit_wrappers.<locals>.setrecursionlimitX  s�   ø€ ñ ÜØ@óBð Bð	=Ø‰FˆEð �qŠyÜØAóCð Cð !×,Ñ,¨UÔ5IÑ-IÓJÐJøô ò 	=Üð )Ü),¨T«¨°7ð<ó =ð =ð	=ús	   �< ¼"Az#            This IDLE wrapper adds z7 to prevent possible
            uninterruptible loops.c                  ó2   •— ‰ j                  «       t        z
  S ©N)r×   rØ   )Úgetrecursionlimits   €r   rÝ   z:install_recursionlimit_wrappers.<locals>.getrecursionlimitm  s   ø€ à ×,Ñ,Ó.Ô1EÑEÐEr!   z(            This IDLE wrapper subtracts z# to compensate
            for the z" IDLE adds when setting the limit.N)Ú	functoolsÚwrapsr#   rÚ   rÑ   rØ   rÝ   )rÝ   rÚ   s   @@r   Úinstall_recursionlimit_wrappersrà   T  sË   ù€ ô ‡_�_”S×*Ñ*Ó+óKó ,ðKô  Ðð #$Ü$8Ð#9ð :#ð&ô 'ô ‡_�_”S×*Ñ*Ó+óFó ,ðFô Ðð #)Ü)=Ð(>ð ?Ü)Ð*Ð*LðPô Qô
 ×Ñœ#×/Ñ/Ó1Ô4HÑHÔIà-„CÔØ-„CÕr!   c                  ó\  — t        t        j                  dd«      r‘t        t        j                  dd«      rut        j                  j                  t        _        t        j                  j                  t        _        t        j                  t        j                  «       t
        z
  «       yyy)z£Uninstall the recursion limit wrappers from the sys module.

    IDLE only uses this for tests. Users can import run and call
    this to remove the wrapping.
    r×   N)Úgetattrr#   rÚ   rÝ   r×   rØ   rº   r!   r   Ú!uninstall_recursionlimit_wrappersrã   |  sy   € ô ”C×)Ñ)¨=¸$Ô?Ü”C×)Ñ)¨=¸$Ô?ä #× 5Ñ 5× AÑ AŒÔÜ #× 5Ñ 5× AÑ AŒÔÜ×Ñœc×3Ñ3Ó5Ô8LÑLÕMð	 @ð @r!   c                   ó   — e Zd Zd„ Zy)rj   c                 ó¸  — 	 ‚ # t         $ r ‚ t        $ r dat        j                  «        Y y t
        j                  }t        t        j                  dd› dt        j                  «       j                  › d|› d|›d�	«      |¬«       t        j                  d|¬	«       t        t        j                  d
d› �«      |¬«       dat        j                  «        Y yxY w)zrOverride RPCServer method for IDLE

        Interrupt the MainThread and exit server if link is dropped.

        Tz
            z(----------------------------------------zU
            Unhandled exception in user code execution server!'
            Thread: z"
            IDLE Client Address: z
            Request: r7   iìÿÿÿ)rÙ   r'   a  
            *** Unrecoverable, server exiting!

            Users should never see this message; it is likely transient.
            If this recurs, report this with a copy of the message
            and an explanation of how to make it repeat.
            N)rV   ÚEOFErrorrL   ÚthreadÚinterrupt_mainr#   rF   rE   rË   rÍ   rG   Úcurrent_threadr;   rY   r¡   rU   )Úselfr\   Úclient_addressÚerfs       r   Úhandle_errorzMyRPCServer.handle_error�  sç   € ð	$ØøÜò 	ØÜò 	$àˆHÜ×!Ñ!Ö#ð	$Ü—.‘.ˆCÜ”(—/‘/ð 'ØˆHð ä×-Ñ-Ó/×4Ñ4Ð5ð 6"Ø"0Ð!1ð 2Ø�[ð !ð#ó ð õô ×Ñ c°Õ4Ü”(—/‘/ð 'ð ˆHð#ó ð  #õ$ð ˆHÜ×!Ñ!Ö#ús   ‚ ƒ(C­B*CN)r   Ú
__module__Ú__qualname__rí   rº   r!   r   rj   rj   ‹  s   „ ó!$r!   rj   c                   óJ   — e Zd Zdd„Zed„ «       Zed„ «       Zed„ «       Zd„ Zy)Ú	StdioFilec                 ób   — || _         ddi| j                   _        || _        || _        || _        y )NÚwidthr5   )ÚshellÚ_RPCProxy__attributesÚtagsÚ	_encodingÚ_errors)rê   rô   rö   ÚencodingÚerrorss        r   Ú__init__zStdioFile.__init__µ  s0   € ØˆŒ
ð -4°Q¨<ˆ�
‰
Ô(ØˆŒ	Ø!ˆŒØˆ�r!   c                 ó   — | j                   S rÜ   )r÷   ©rê   s    r   rù   zStdioFile.encoding¾  s   € à�~‰~Ðr!   c                 ó   — | j                   S rÜ   )rø   rý   s    r   rú   zStdioFile.errorsÂ  s   € à�|‰|Ðr!   c                 ó    — d| j                   z  S )Nz<%s>)rö   rý   s    r   r;   zStdioFile.nameÆ  s   € à˜Ÿ	™	Ñ!Ð!r!   c                  ó   — y©NTrº   rý   s    r   ÚisattyzStdioFile.isattyÊ  ó   € Ør!   N)zutf-8Ústrict)	r   rî   rï   rû   Úpropertyrù   rú   r;   r  rº   r!   r   rñ   rñ   ³  sH   „ óð ñó ðð ñó ðð ñ"ó ð"ór!   rñ   c                   ó   — e Zd Zd„ Zd„ Zy)ÚStdOutputFilec                  ó   — yr  rº   rý   s    r   ÚwritablezStdOutputFile.writableÐ  r  r!   c                 ó  — | j                   rt        d«      ‚t        j                  || j                  | j
                  «      j                  | j                  | j
                  «      }| j                  j                  || j                  «      S )Nzwrite to closed file)
ÚclosedrÖ   ÚstrÚencoderù   rú   Údecoderô   r%   rö   )rê   r   s     r   r%   zStdOutputFile.writeÓ  s_   € Ø�;Š;ÜÐ3Ó4Ð4Ü�J‰J�q˜$Ÿ-™-¨¯©Ó5×<Ñ<¸T¿]¹]ÈDÏKÉKÓXˆØ�z‰z×Ñ  4§9¡9Ó-Ð-r!   N)r   rî   rï   r	  r%   rº   r!   r   r  r  Î  s   „ òó.r!   r  c                   ó,   — e Zd ZdZd„ Zdd„Zdd„Zd„ Zy)ÚStdInputFiler8   c                  ó   — yr  rº   rý   s    r   ÚreadablezStdInputFile.readableÝ  r  r!   c                 óì  — | j                   rt        d«      ‚|€d}n1t        |t        «      s!t	        dt        |«      j                  z   «      ‚| j                  }d| _        |dk  r@| j                  j                  «       x}r"||z  }| j                  j                  «       x}rŒ"|S t        |«      |k  r1| j                  j                  «       }|sn||z  }t        |«      |k  rŒ1||d  | _        |d | }|S )Núread from closed filer6   úmust be int, not r8   r   )r  rÖ   Ú
isinstancerD   rÕ   ra   r   Ú_line_bufferrô   ÚreadlinerB   )rê   rÂ   Úresultr   s       r   ÚreadzStdInputFile.readà  sü   € Ø�;Š;ÜÐ4Ó5Ð5Øˆ<Ø‰DÜ˜D¤#Ô&ÜÐ/´$°t³*×2EÑ2EÑEÓFÐFØ×"Ñ"ˆØˆÔØ�!Š8ØŸ*™*×-Ñ-Ó/Ð/�$Ð/Ø˜$‘�ð Ÿ*™*×-Ñ-Ó/Ð/�$Ñ/ð ˆô �f“+ Ò$Ø—z‘z×*Ñ*Ó,�Ù˜UØ˜$‘�ô �f“+ Ó$ð !' t u ˆDÔØ˜E˜T�]ˆFØˆr!   c                 ód  — | j                   rt        d«      ‚|€d}n1t        |t        «      s!t	        dt        |«      j                  z   «      ‚| j                  xs | j                  j                  «       }|dk  rt        |«      }|j                  dd|«      }|dk\  r|dz   }||d  | _        |d | S )Nr  r6   r  r   r   r5   )r  rÖ   r  rD   rÕ   ra   r   r  rô   r  rB   Úfind)rê   rÂ   r   Úeols       r   r  zStdInputFile.readlineõ  s­   € Ø�;Š;ÜÐ4Ó5Ð5Øˆ<Ø‰DÜ˜D¤#Ô&ÜÐ/´$°t³*×2EÑ2EÑEÓFÐFØ× Ñ Ò9 D§J¡J×$7Ñ$7Ó$9ˆØ�!Š8Ü�t“9ˆDØ�i‰i˜˜a Ó&ˆØ�!Š8Ø˜‘7ˆDØ   ˜KˆÔØ�E�Tˆ{Ðr!   c                 ó8   — | j                   j                  «        y rÜ   )rô   Úcloserý   s    r   r  zStdInputFile.close  s   € Ø�
‰
×ÑÕr!   N)r6   )r   rî   rï   r  r  r  r  r  rº   r!   r   r  r  Ú  s   „ Ø€Lòóó*ó r!   r  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)rk   c                 óÆ  — t        | «      }| j                  d|«       | j                  d«      | _        t	        | j                  dt
        j                  t
        j                  «      t        _	        t        | j                  dt
        j                  t
        j                  «      t        _        t        | j                  dt
        j                  d«      t        _        t        j                  t        _        ddl}|j                   |_        t        j                  | _        t'        «        | j                  d	«      | _        t        j*                  j-                  | dd
¬«       y)zOverride base methodr­   ÚconsoleÚstdinÚstdoutr$   Úbackslashreplacer   NÚinterpr>   )ÚmyseqÚwait)Ú	ExecutiveÚregisterÚget_remote_proxyr"  r  r   rù   rú   r#   r#  r  r$  r$   r   ÚdisplayhookÚpydocÚ
plainpagerÚpagerÚ_keep_stdinrà   r&  Ú
RPCHandlerÚgetresponse)rê   Ú	executiver-  s      r   ÚhandlezMyHandler.handle  sê   € ä˜d“Oˆ	Ø�‰�f˜iÔ(Ø×,Ñ,¨YÓ7ˆŒÜ  §¡¨wÜ!'§¡´&·-±-óAŒŒ	ä" 4§<¡<°Ü#)§?¡?´F·M±MóCŒŒ
ä" 4§<¡<°Ü#)§?¡?Ð4FóHŒŒ
ô Ÿ/™/ŒŒãØ×&Ñ&ˆŒô Ÿ9™9ˆÔä'Ô)à×+Ñ+¨HÓ5ˆŒÜ�‰×"Ñ" 4¨t¸$Ð"Õ?r!   c                 ó.   — t        j                  d«       y)z>override SocketIO method - wait for MainThread to shut us downé
   N)rh   ri   rý   s    r   ÚexithookzMyHandler.exithook%  s   € ä�
‰
�2�r!   c                 ó0   — da t        j                  «        y)zEOverride SocketIO method - terminate wait on callback and exit threadTN©rU   rç   rè   rý   s    r   ÚEOFhookzMyHandler.EOFhook)  ó   € ð ˆÜ×ÑÕr!   c                 ó0   — da t        j                  «        y)zinterrupt awakened threadTNr9  rý   s    r   Údecode_interrupthookzMyHandler.decode_interrupthook/  r;  r!   N)r   rî   rï   r4  r7  r:  r=  rº   r!   r   rk   rk   	  s   „ ò@ò4ò ó r!   rk   c                   ó>   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d
d	„Z
y)r)  c                 óÔ   — || _         t        j                  du rHt        j                  | _        t        j                  «       | _        t        j                  «       | _        y i | _        y )NF)
r±   ÚidlelibÚtestingÚ__main__Ú__dict__Úlocalsr   ÚCalltipr   ÚAutoComplete)rê   r±   s     r   rû   zExecutive.__init__8  sH   € Ø$ˆŒÜ�?‰?˜eÑ#Ü"×+Ñ+ˆDŒKÜ"Ÿ?™?Ó,ˆDŒLÜ ,× 9Ñ 9Ó ;ˆDÕàˆD�Kr!   c                 ó>  — 	 d | _         da	 t        || j                  «       da	 t	        «        y # daw xY w# t
        $ rq}|j                  r[|j                  d   }t        |t        d «      t        f«      s,t        dt        |«      z   t        j                  ¬«       Y d }~y Y d }~y Y d }~y d }~w t        j                  «       | _         t        r
t!        «        t        j"                  t        j$                  u rt'        «        nH	 t        j"                  | j                   Ž  n*#  t        j                  «       | _         t'        «        Y nxY w| j(                  j*                  j-                  d«      }|r&| j(                  j.                  j1                  «        Y y Y y xY w)NTFr   zSystemExit: r7   z<<toggle-jit-stack-viewer>>)Úuser_exc_infoÚinterruptibler­   rD  r¤   rV   r<   r  ra   rD   rE   r  r#   r$   rW   rU   rM   Ú
excepthookrˆ   rX   r±   r"  Úgetvarr&  Úopen_remote_stack_viewer)rê   ÚcodeÚeÚobÚjits        r   ÚruncodezExecutive.runcodeA  s1  € ð	Ø!%ˆDÔØ ˆMð&Ü�T˜4Ÿ;™;Ô'à %‘ô. �Nøð/ !&‘ûÜò 	EØ�vŠvØ—V‘V˜A‘Y�Ü! "¤t¨D£z´3Ð&7Ô8Ü˜.¬3¨r«7Ñ2¼¿¹×DÒDô 9ô ûð
	BÜ!$§¡£ˆDÔÝÜ”Ü�~‰~¤×!3Ñ!3Ñ3ÜÕ!ð&Ü—N‘N D×$6Ñ$6Ò7øð&Ü),¯©«�DÔ&Ü#Ö%úØ—/‘/×)Ñ)×0Ñ0Ð1NÓOˆCÙØ—‘×&Ñ&×?Ñ?ÖAñ ús@   ‚	7 Œ0 ¢7 °4´7 ·	FÁ AB,Â,AFÄD#Ä"FÄ#%E
ÅAFc                 ó:   — t         rt        j                  «        y y rÜ   )rI  rç   rè   rý   s    r   Úinterrupt_the_serverzExecutive.interrupt_the_serverb  s   € ÝÜ×!Ñ!Õ#ð r!   c                 óB   — t        j                  | j                  |«      S rÜ   )r   Ústart_debuggerr±   )rê   Úgui_adap_oids     r   Ústart_the_debuggerzExecutive.start_the_debuggerf  s   € Ü×(Ñ(¨¯©¸,ÓGÐGr!   c                 ó:   — | j                   j                  |«       y)zDUnregister the Idb Adapter.  Link objects and Idb then subject to GCN)r±   Ú
unregister)rê   Úidb_adap_oids     r   Ústop_the_debuggerzExecutive.stop_the_debuggeri  s   € à�‰×"Ñ" <Õ0r!   c                 ó8   — | j                   j                  |«      S rÜ   )r   Ú	fetch_tip)rê   r;   s     r   Úget_the_calltipzExecutive.get_the_calltipm  s   € Ø�|‰|×%Ñ% dÓ+Ð+r!   c                 ó:   — | j                   j                  ||«      S rÜ   )r   Úfetch_completions)rê   ÚwhatÚmodes      r   Úget_the_completion_listz!Executive.get_the_completion_listp  s   € Ø× Ñ ×2Ñ2°4¸Ó>Ð>r!   Nc                 ón  — | j                   r| j                   \  }}}ny d }|�| j                  j                  |«      }|rE|j                  j                  d   dv r*|j
                  }|r|j                  j                  d   dv rŒ*||_        t        j                  ||«      }t        j                  |«      S )Nr   )r   Úrun)rH  r±   r+  Útb_frameÚ	f_globalsÚtb_nextr–   r	   ÚStackTreeItemr   Úremote_object_tree_item)rê   Ú	flist_oidÚ_r�   rc   ÚflistÚitems          r   r	   zExecutive.stackviewers  s¦   € Ø×ÒØ×+Ñ+‰JˆAˆs‘BàØˆØÐ Ø—O‘O×4Ñ4°YÓ?ˆEÙ�R—[‘[×*Ñ*¨:Ñ6¸.ÑHØ—‘ˆBñ �R—[‘[×*Ñ*¨:Ñ6¸.ÒHàˆÔÜ×(Ñ(¨¨eÓ4ˆÜ×1Ñ1°$Ó7Ð7r!   rÜ   )r   rî   rï   rû   rQ  rS  rW  r[  r^  rc  r	   rº   r!   r   r)  r)  6  s,   „ òòòB$òHò1ò,ò?ô8r!   r)  rB  )rd   zidlelib.idle_test.test_runé   )Ú	verbosityrÜ   )NN)F)CrÊ   r†   rÞ   r„   r   rQ   r#   rË   rh   rY   Ú_threadrç   rG   r+   r@  r   r   r   r   r   r   r	   rB  rw   ÚhasattrÚmodulesÚmodÚdelattrr
   rJ   ÚeofrM   Úquitrƒ   r    r(   r*   r.   ÚTclr2   r3   rL   rU   rI  rd   rI   rl   rŽ   rX   r™   r¤   rz   rÑ   rØ   rà   rã   Ú	RPCServerrj   Ú
TextIOBaserñ   r  r  r1  rk   r)  r   Úunittestrº   r!   r   Ú<module>r|     sÝ  ðñó Û Û 	Û Û Û 
Û Û Û Û Û Û ã Ý  Ý Ý Ý Ý Ý Ý Û ã Ùˆs�{‰{˜=Ñ)¨:Ô6óˆñ 	�˜ÔØ�K‰K˜
 SÑ(Ñ)ð	ð +0€C‡K�K�ÑÔ'à€	ð	Ø
 €CØ€D„HØ€D„Hó
ð >Bóð Ð ò)ñ �Ô Ø€g‡k�kƒm€àó ð €Ø€Ø€óLò\ò&ò"	9ò#òJ!ò>"òò	1ò=ð Ð ò%.òPNô#$�#—-‘-ô #$ôP�—‘ô ô6	.�Iô 	.ô,�9ô ,ô^* �—‘ô * ÷ZI8ñ I8ðX ˆzÒÝÙÐ	%°Õ3á �Õ øðo ò 	Ùð	ús   Â6F ÆF$Æ#F$