
[                 @   s   d  d l  Z  d  d l Z e j d  d k r1 e Z d d   Z d d   Z Gd d   d  Z Gd	 d
   d
  Z Gd d   d  Z	 Gd d   d  Z
 d d   Z d d   Z Gd d   d e  j  Z e   d S)    N   c             C   s   t  j   j |   S)N)gdbZselected_frameZread_var)Zsymname r   share/glib-2.0/gdb/glib_gdb.pyread_global_var   s    r   c             C   s   |  d  k r d  St  |   }  |  d k r, d  Sy" t d  } t  t d   } Wn9 y" t d  } t  t d   } Wn d  SYn XYn X|  | k  r | |  j   Sd  S)Nr   ZquarksZquark_seq_idZg_quarksZg_quark_seq_id)longr   string)ZquarkvalZmax_qr   r   r   g_quark_to_string   s"    r
   c               @   s.   e  Z d  Z d Z d d   Z d d   Z d S)GListNodePrinterzPrints a GList nodec             C   s   | |  _  d  S)N)r	   )selfr	   r   r   r   __init__"   s    zGListNodePrinter.__init__c             C   s8   d t  |  j d  t |  j d  t |  j d  f S)Nz{data=%s, next=0x%x, prev=0x%x}datanextprev)strr	   r   )r   r   r   r   	to_string%   s    zGListNodePrinter.to_stringN)__name__
__module____qualname____doc__r   r   r   r   r   r   r      s   r   c               @   s.   e  Z d  Z d Z d d   Z d d   Z d S)GSListNodePrinterzPrints a GSList nodec             C   s   | |  _  d  S)N)r	   )r   r	   r   r   r   r   +   s    zGSListNodePrinter.__init__c             C   s(   d t  |  j d  t |  j d  f S)Nz{data=%s, next=0x%x}r   r   )r   r	   r   )r   r   r   r   r   .   s    zGSListNodePrinter.to_stringN)r   r   r   r   r   r   r   r   r   r   r   (   s   r   c               @   sY   e  Z d  Z d Z Gd d   d  Z d d   Z d d   Z d d	   Z d
 d   Z d S)GListPrinterzPrints a GListc               @   s:   e  Z d  Z d d   Z d d   Z d d   Z e Z d S)zGListPrinter._iteratorc             C   s   | |  _  | |  _ d |  _ d  S)Nr   )linklisttypecount)r   headr   r   r   r   r   5   s    		zGListPrinter._iterator.__init__c             C   s   |  S)Nr   )r   r   r   r   __iter__:   s    zGListPrinter._iterator.__iter__c             C   sY   |  j  d k r t  |  j  d } |  j  d |  _  |  j } |  j d |  _ d | | f S)Nr   r   r      z[%d])r   StopIterationr   )r   r   r   r   r   r   r   =   s    	zGListPrinter._iterator.nextN)r   r   r   r   r   r   __next__r   r   r   r   	_iterator4   s   	r!   c             C   s   | |  _  | |  _ d  S)N)r	   r   )r   r	   r   r   r   r   r   H   s    	zGListPrinter.__init__c             C   s   |  j  |  j |  j  S)N)r!   r	   r   )r   r   r   r   childrenL   s    zGListPrinter.childrenc             C   s   d t  |  j  S)Nz0x%x)r   r	   )r   r   r   r   r   O   s    zGListPrinter.to_stringc             C   s   d S)NZarrayr   )r   r   r   r   display_hintR   s    zGListPrinter.display_hintN)	r   r   r   r   r!   r   r"   r   r#   r   r   r   r   r   1   s   r   c               @   sY   e  Z d  Z d Z Gd d   d  Z d d   Z d d   Z d d	   Z d
 d   Z d S)GHashPrinterzPrints a GHashTablec               @   s:   e  Z d  Z d d   Z d d   Z d d   Z e Z d S)zGHashPrinter._iteratorc             C   sh   | |  _  | d k rI | d |  _ | d |  _ | d |  _ | d |  _ d |  _ | |  _ d  |  _ d  S)Nr   keysvalueshashessize)htr%   r&   r'   r(   poskeys_are_stringsvalue)r   r)   r+   r   r   r   r   Y   s    			zGHashPrinter._iterator.__init__c             C   s   |  S)Nr   )r   r   r   r   r   d   s    zGHashPrinter._iterator.__iter__c             C   s  |  j  d k r t  |  j d  k r: |  j } d  |  _ | Sx t |  j  t |  j  k  r |  j d |  _ t |  j |  j  d k r= |  j |  j } |  j |  j } |  j	 r | j
 t j d  j    } d |  j | f |  _ d |  j | f Sq= Wt  d  S)Nr   r      charz[%dv]z[%dk])r)   r   r,   r   r*   r(   r'   r%   r&   r+   castr   lookup_typepointer)r   vkeyr	   r   r   r   r   g   s     		!	zGHashPrinter._iterator.nextN)r   r   r   r   r   r   r    r   r   r   r   r!   X   s   r!   c          	   C   sn   | |  _  d |  _ y t d  } Wn d  } Yn X|  j  d k rj | d  k rj |  j  d | k rj d |  _ d  S)NFZ
g_str_hashr   Z	hash_funcT)r	   r+   r   )r   r	   Zstring_hashr   r   r   r      s    		.zGHashPrinter.__init__c             C   s   |  j  |  j |  j  S)N)r!   r	   r+   )r   r   r   r   r"      s    zGHashPrinter.childrenc             C   s   d t  |  j  S)Nz0x%x)r   r	   )r   r   r   r   r      s    zGHashPrinter.to_stringc             C   s   d S)Nmapr   )r   r   r   r   r#      s    zGHashPrinter.display_hintN)	r   r   r   r   r!   r   r"   r   r#   r   r   r   r   r$   U   s   (
r$   c             C   s   |  j  j   } | j t j k r- | j   } | j t j k r | j   j   } t |  } | d k rv t |  d  S| d k r t |  d  S| d k r t	 |   Sn; t |  } | d k r t
 |   S| d k r t |  d  Sd  S)NGListGSListZ
GHashTablezGSList *)typeunqualifiedcoder   ZTYPE_CODE_REFtargetTYPE_CODE_PTRr   r   r$   r   )r	   r7   tr   r   r   pretty_printer_lookup   s$    
r=   c             C   s&   |  d  k r t  }  |  j j t  d  S)N)r   Zpretty_printersappendr=   )objr   r   r   register   s    r@   c                   s|   e  Z d  Z d Z   f d d   Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d d   Z
 d d   Z   S)ForeachCommandzForeach on listc                s&   t  t |   j d t j t j  d  S)NZgforeach)superrA   r   r   ZCOMMAND_DATAZCOMPLETE_SYMBOL)r   )	__class__r   r   r      s    zForeachCommand.__init__c             C   s   | d j    s d Sd S)Nr   FT)isalpha)r   namer   r   r   
valid_name   s    zForeachCommand.valid_namec             C   s|  | j  d  } | d k r' t d   | d  |  } |  j |  sR t d   x0 | t |  k  r | | j   r | d } qU W| | | d  d k r t d   | d } x0 | t |  k  r | | j   r | d } q W| j  d	 |  } | d k rt d
   | | |  } | d } x0 | t |  k  r^| | j   r^| d } q/W| | d   } | | | f S)N r   zNo var specifiedzInvalid variable namer   r-   inzInvalid syntax, missing in:zInvalid syntax, missing colon)find	ExceptionrF   lenisspace)r   argivarZcolonr	   commandr   r   r   
parse_args   s,    %
%
%zForeachCommand.parse_argsc             C   sX   | j  t j d  j    } t |  } d | | f } t j |  t j |  d  S)Nvoidzset $%s = (void *)0x%x
)r/   r   r0   r1   r   Zexecute)r   rO   itemrR   Zto_evalr   r   r   do_iter   s
    zForeachCommand.do_iterc             C   s\   | j  t j d  j    } x7 t |  d k rW |  j | | d |  | d } q! Wd  S)Nr6   r   r   r   )r/   r   r0   r1   r   rV   )r   rO   	containerrR   lr   r   r   slist_iterator   s    zForeachCommand.slist_iteratorc             C   s\   | j  t j d  j    } x7 t |  d k rW |  j | | d |  | d } q! Wd  S)Nr5   r   r   r   )r/   r   r0   r1   r   rV   )r   rO   rW   rR   rX   r   r   r   list_iterator   s    zForeachCommand.list_iteratorc             C   s   | j  j   } | j t j k re | j   j   } t |  } | d k rR |  j S| d k re |  j St	 d t | j     d  S)Nr6   r5   zInvalid container type %s)
r7   r8   r9   r   r;   r:   r   rY   rZ   rL   )r   rW   r<   r   r   r   pick_iterator   s    zForeachCommand.pick_iteratorc             C   sJ   |  j  |  \ } } } t j |  } |  j |  } | | | |  d  S)N)rS   r   Zparse_and_evalr[   )r   rO   Zfrom_ttyrQ   rW   rR   funcr   r   r   invoke   s    zForeachCommand.invoke)r   r   r   r   r   rF   rS   rV   rY   rZ   r[   r]   r   r   )rC   r   rA      s   !rA   )r   sysversion_infointr   r   r
   r   r   r   r$   r=   r@   ZCommandrA   r   r   r   r   <module>   s   		$>R