� {fc @ s d Z d d l Z d d l m Z d Z d a d Z i Z i Z i Z i Z d � Z d � Z d d d � � YZ d d d � � YZ d � Z d d d � � YZ d d d � � YZ d d d � � YZ d d! d � � YZ d d" d � � YZ d � Z d � Z d � Z d � Z d S(# s� Support for remote Python debugging. Some ASCII art to describe the structure: IN PYTHON SUBPROCESS # IN IDLE PROCESS # # oid='gui_adapter' +----------+ # +------------+ +-----+ | GUIProxy |--remote#call-->| GUIAdapter |--calls-->| GUI | +-----+--calls-->+----------+ # +------------+ +-----+ | Idb | # / +-----+<-calls--+------------+ # +----------+<--calls-/ | IdbAdapter |<--remote#call--| IdbProxy | +------------+ # +----------+ oid='idb_adapter' # The purpose of the Proxy and Adapter classes is to translate certain arguments and return values that cannot be transported through the RPC barrier, in particular frame and traceback objects. i����N( t Debuggeri t idb_adaptert gui_adapterc C s t | � } | t | <| S( N( t idt frametable( t framet fid( ( s. /usr/lib64/python2.7/idlelib/RemoteDebugger.pyt wrap_frame( s c C sO | d k r d S| d } t | � } | t | <| d | d | f } | Sd S( s0 replace info[2], a traceback instance, by its IDi i i N( t NoneR t tracebacktable( t infot tracebackt traceback_idt modified_info( ( s. /usr/lib64/python2.7/idlelib/RemoteDebugger.pyt wrap_info- s t GUIProxyc B s e Z d � Z d d � Z RS( c C s | | _ | | _ d S( N( t connt oid( t selfR t gui_adap_oid( ( s. /usr/lib64/python2.7/idlelib/RemoteDebugger.pyt __init__; s c C s5 | j j | j d | t | � t | � f i � d S( Nt interaction( R t remotecallR R R ( R t messageR R ( ( s. /usr/lib64/python2.7/idlelib/RemoteDebugger.pyR ? s N( t __name__t __module__R R R ( ( ( s. /usr/lib64/python2.7/idlelib/RemoteDebugger.pyR 9 s t IdbAdapterc B s� e 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 � Z d � Z d � Z d � Z d � Z d � Z RS( c C s | | _ d S( N( t idb( R R ( ( s. /usr/lib64/python2.7/idlelib/RemoteDebugger.pyR H s c C s | j j � d S( N( R t set_step( R ( ( s. /usr/lib64/python2.7/idlelib/RemoteDebugger.pyR M s c C s | j j � d S( N( R t set_quit( R ( ( s. /usr/lib64/python2.7/idlelib/RemoteDebugger.pyR P s c C s | j j � d S( N( R t set_continue( R ( ( s. /usr/lib64/python2.7/idlelib/RemoteDebugger.pyR S s c C s t | } | j j | � d S( N( R R t set_next( R R R ( ( s. /usr/lib64/python2.7/idlelib/RemoteDebugger.pyR V s c C s t | } | j j | � d S( N( R R t set_return( R R R ( ( s. /usr/lib64/python2.7/idlelib/RemoteDebugger.pyR Z s c C sy t | } | d k r d } n t | } | j j | | � \ } } g | D] \ } } t | � | f ^ qK } | | f S( N( R R R R t get_stackR ( R R t tbidR t tbt stackt it frame2t k( ( s. /usr/lib64/python2.7/idlelib/RemoteDebugger.pyR! ^ s +c C s&