
[#                 @   s`  d  d l  Z d  d l Z d  d l Z d  d l Z e j d  d k rL e Z n d  d l Z e j	 Z
 y" d  d l Z d Z e j j Z Wn e k
 r d Z Yn Xd d   Z d d   Z d	 d
   Z d d   Z Gd d   d  Z d d   Z d d   Z d d   Z d d   Z Gd d   d e  Z Gd d   d  Z Gd d   d e  Z d d   Z d S)    N   TFc             C   s   t  j   j |   S)N)gdbZselected_frameread_var)Zsymname r   !share/glib-2.0/gdb/gobject_gdb.pyread_global_var   s    r   c             C   s   d d   } t  |   }  |  |  d } | d k r\ t j |  j t j d  j    } n | |  } | d  k r t j | d  Sd  S)	Nc             S   s;   |  d k r d  St  d  } | d  k r, d  S| |  d ?j S)Nr   Zstatic_fundamental_type_nodes   )r   Zaddress)typenodevalr   r   r   lookup_fundamental_type   s    z/g_type_to_name.<locals>.lookup_fundamental_type      r   ZTypeNodeZqnamei  )longr   ZValuecastlookup_typepointerglib_gdbg_quark_to_string)gtyper   r	   r   r   r   g_type_to_name   s    *r   c                sG     f d d     |  j  } | j t j k r1 d S| j   }   |  S)Nc                s   t  |   d k r d Sx" |  j t j k r: |  j   }  q W|  j t j k rQ d S|  j   } t |  d k  rs d S| d }   | j  S)NGTypeInstanceTF   r   )	strcoder   ZTYPE_CODE_TYPEDEFtargetZTYPE_CODE_STRUCTfieldslentype)r   r   Zfirst_field)is_g_type_instance_helperr   r   r   ,   s    
z5is_g_type_instance.<locals>.is_g_type_instance_helperF)r   r   r   ZTYPE_CODE_PTRr   )r
   r   r   )r   r   is_g_type_instance+   s    	r   c             C   sq   t  |   d k rm yF |  j t j d  j    } | d } | d } t |  } | SWn t k
 rl Yn Xd  S)Nr   r   Zg_classZg_type)r   r   r   r   r   r   RuntimeError)instanceZinstklassr   namer   r   r   g_type_name_from_instanceC   s    

r$   c               @   s.   e  Z d  Z d Z d d   Z d d   Z d S)GTypePrettyPrinterzPrints a GType instance pointerc             C   s   | |  _  d  S)N)r
   )selfr
   r   r   r   __init__R   s    zGTypePrettyPrinter.__init__c             C   s=   t  |  j  } | r, d t |  j  | f Sd t |  j  S)Nz	0x%x [%s]z0x%x)r$   r
   r   )r&   r#   r   r   r   	to_stringU   s    zGTypePrettyPrinter.to_stringN)__name__
__module____qualname____doc__r'   r(   r   r   r   r   r%   O   s   r%   c             C   s   t  |   r t |   Sd  S)N)r   r%   )r
   r   r   r   pretty_printer_lookup[   s    
r-   c             C   sr   |  d  k r d  St  |   }  |  d k r, d  St d  } t d  } t  |  } |  | k  rn | |  d j   Sd  S)Nr   Zg_signal_nodesZg_n_signal_nodesr#   )r   r   string)idr
   Zmax_sr   r   r   get_signal_namea   s    r0   c             C   s   t  |  j    S)N)r   function)framer   r   r   
frame_namen   s    r3   c             C   s   |  j    j |  S)N)Zinferior_framer   )r2   varr   r   r   	frame_varq   s    r5   c               @   s   e  Z d  Z d d   Z d d   Z d d 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 S)SignalFramec             C   s.   t  j |  | d  | d |  _ | |  _ d  S)Nr   r7   )FrameDecoratorr'   r2   frames)r&   r9   r   r   r   r'   v   s    zSignalFrame.__init__c             C   s   d S)Nzsignal-emissionr   )r&   r   r   r   r#   {   s    zSignalFrame.nameNc             C   sf   yI t  | |  } | d  k s' | j r+ d  S| d  k rD | j |  | SWn t k
 ra d  SYn Xd  S)N)r5   is_optimized_outappend
ValueError)r&   r2   r#   arrayvr   r   r   r   ~   s    zSignalFrame.read_varc             C   s   y t  | |  } | d  k s' | j r+ d  S| j t j d  j    } | d  k r~ t |  r~ | d  k rz | j |  | Sd  SWn t k
 r d  SYn Xd  S)NGObject)	r5   r:   r   r   r   r   r$   r;   r<   )r&   r2   r#   r=   r>   r   r   r   read_object   s    zSignalFrame.read_objectc             C   s   | d  k r | j  |  d  S)N)r;   )r&   r=   objr   r   r   r;      s    zSignalFrame.appendc             C   s6   t  |  d k r d Sd j t t t |    Sd  S)Nr   z???z or )r   joinsetmapr   )r&   r=   r   r   r   or_join_array   s    zSignalFrame.or_join_arrayc             C   sA   |  j  | d  } t j |  } | d  k	 r9 | d | S| Sd  S)Ndetail:)r   r   r   )r&   r2   signalrF   r   r   r   get_detailed_signal_from_frame   s
    z*SignalFrame.get_detailed_signal_from_framec       
      C   s  g  } g  } x|  j  D]} t |  } | d k r |  j | d |  |  j | d  } | r | d j   } |  j | |  } |  j | |  | d k r1|  j | d  } | r | d d j t j	 d	  j
    } |  j | |  |  j | d
  }	 t |	  } | r1|  j | |  } |  j | |  | d k sI| d k r|  j | d |  |  j | d
  }	 t |	  } | r|  j | |  } |  j | |  | d k r |  j | d |  |  j | d |  Pq W|  j |  } |  j |  } d | | f S)Nsignal_emit_unlocked_Rr!   noder#   g_signal_emitvinstance_and_paramsr   Z	v_pointerr?   Z	signal_idg_signal_emit_valistg_signal_emitg_signal_emit_by_nameZdetailed_signalz<emit signal %s on instance %s>)r9   r3   r@   r   r.   rI   r;   r   r   ZTyper   r0   rE   )
r&   Z	instancesZsignalsr2   r#   rK   rH   rM   r!   r/   r   r   r   r1      sF    &zSignalFrame.functionc             C   s   |  j  d d  S)Nr   r   r7   )r9   )r&   r   r   r   elided   s    zSignalFrame.elidedc             C   s   | j  d |  j   d  d  S)N 
)writer1   )r&   streamZfullr   r   r   describe   s    zSignalFrame.describe)r)   r*   r+   r'   r#   r   r@   r;   rE   rI   r1   rQ   rV   r   r   r   r   r6   u   s   +r6   c               @   sX   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d S)GFrameDecoratorc             C   s   g  |  _  | |  _ d  S)N)queueiter)r&   rY   r   r   r   r'      s    	zGFrameDecorator.__init__c             C   s   |  S)Nr   )r&   r   r   r   __iter__   s    zGFrameDecorator.__iter__c             C   s\   xU t  |  j  d k rW y# t |  j  } |  j j |  Wq t k
 rS d  SYq Xq Wd  S)N   )r   rX   nextrY   r;   StopIteration)r&   fr   r   r   fill   s    zGFrameDecorator.fillc             C   sJ   xC t  t t |  j  d   D]# } t |  j |  d k r | Sq Wd S)Nr   rJ   r   r7   )rangeminr   rX   r3   )r&   ir   r   r   find_signal_emission   s    %z$GFrameDecorator.find_signal_emissionc             C   s/  |  j    t |  j  d k r% t  |  j   } | d k r| } xW | d k rS Pt |  j | d  } | j d  d k s | d k r | d } qF PqF W| d } x@ | t |  j  k  r t |  j |  d
 k r | d } q Pq W|  j | |  } t |  g } | |  j | |  <|  j j d  S)Nr   r   Z	_marshal_Zg_closure_invokerL   rN   rO   rP   _g_closure_invoke_va)rL   rN   rO   rP   rd   )	r_   r   rX   r]   rc   r3   findr6   pop)r&   ZemissionstartZ	prev_nameendZsignal_framesZ
new_framesr   r   r   r\      s4    
!
   	zGFrameDecorator.nextc             C   s
   |  j    S)N)r\   )r&   r   r   r   __next__  s    zGFrameDecorator.__next__N)	r)   r*   r+   r'   rZ   r_   rc   r\   ri   r   r   r   r   rW      s   $rW   c               @   s.   e  Z d  Z d Z d Z d Z d d   Z d S)GFrameFilterZglibTd   c             C   s
   t  |  S)N)rW   )r&   iteratorr   r   r   filter  s    zGFrameFilter.filterN)r)   r*   r+   r#   ZenabledZpriorityrm   r   r   r   r   rj     s   rj   c             C   sE   |  d  k r t  }  t r1 t   } | |  j | j <|  j j t  d  S)N)r   HAVE_GDB_FRAMEDECORATORrj   Zframe_filtersr#   Zpretty_printersr;   r-   )rA   rm   r   r   r   register   s    	ro   )os.pathosr   r   sysversion_infointr   	itertoolsZimaprD   Zgdb.FrameDecoratorrn   r8   ImportErrorr   r   r   r$   r%   r-   r0   r3   r5   r6   rW   objectrj   ro   r   r   r   r   <module>   s4   		f=