U
    
a                      @   s   d dl Z d dlZejd  dkr"eZdd Zdd ZG dd dZG d	d
 d
ZG dd dZ	G dd dZ
dd Zdd ZG dd de jZe  dS )    N   c                 C   s   t  | 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 S t | } | dkr d S ztd}t td}W nF tk
r~   ztd}t td}W n tk
rx   Y Y d S X Y nX | |k r||   S d S )Nr   ZquarksZquark_seq_idZg_quarksZg_quark_seq_id)longr   	Exception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 r   r   selfr   r   r   r   __init__%   s    zGListNodePrinter.__init__c                 C   s,   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 r   r   r   r   r   r   r   3   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   6   s    zGSListNodePrinter.to_stringNr   r   r   r   r   r   0   s   r   c                   @   s>   e Zd ZdZG d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   >   s    zGListPrinter._iterator.__init__c                 C   s   | S r   r   r   r   r   r   __iter__C   s    zGListPrinter._iterator.__iter__c                 C   sB   | 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   F   s    

zGListPrinter._iterator.nextN)r   r   r   r   r$   r   __next__r   r   r   r   	_iterator=   s   	r(   c                 C   s   || _ || _d S r   )r   r!   )r   r   r!   r   r   r   r   Q   s    zGListPrinter.__init__c                 C   s   |  | j| jS r   )r(   r   r!   r   r   r   r   childrenU   s    zGListPrinter.childrenc                 C   s   dt | j S Nz0x%xr   r   r   r   r   r   r   X   s    zGListPrinter.to_stringc                 C   s   dS )NZarrayr   r   r   r   r   display_hint[   s    zGListPrinter.display_hintN	r   r   r   r   r(   r   r)   r   r,   r   r   r   r   r   :   s   r   c                   @   s>   e Zd ZdZG dd dZdd Zdd Zdd	 Zd
d ZdS )GHashPrinterzPrints a GHashTablec                   @   s6   e Zd ZG dd dZdd Zdd Zdd ZeZd	S )
zGHashPrinter._iteratorc                   @   s   e Zd Zdd Zdd ZdS )z%GHashPrinter._iterator._pointer_arrayc                 C   s<   || _ td| _| j r| jntd}|| | _d S )NZgpointerZguint)
_big_itemsr   lookup_type_gpointer_typecastpointer_items)r   ZptrZ	big_itemsZ	item_typer   r   r   r   d   s
    z.GHashPrinter._iterator._pointer_array.__init__c                 C   s    | j | }| js|| j}|S r   )r4   r/   r2   r1   )r   itemr   r   r   __getitem__m   s    
z1GHashPrinter._iterator._pointer_array.__getitem__N)r   r   r   r   r6   r   r   r   r   _pointer_arrayc   s   	r7   c                 C   sd   || _ |dkrN| |d |d | _| |d |d | _|d | _|d | _d| _|| _d | _d S )Nr   keysZhave_big_keysvaluesZhave_big_valueshashessize)	htr7   r8   r9   r:   r;   poskeys_are_stringsvalue)r   r<   r>   r   r   r   r   u   s    

zGHashPrinter._iterator.__init__c                 C   s   | S r   r   r   r   r   r   r$      s    zGHashPrinter._iterator.__iter__c                 C   s   | j dkrt| jd k	r(| j}d | _|S t| jt| jk rt| j| j dkr| j| j }| j| j }| j	r|
td }d| j |f| _d| j |f}|  jd7  _|S |  jd7  _q(td S )Nr      charz[%dv]z[%dk]r%   )r<   r&   r?   r   r=   r;   r:   r8   r9   r>   r2   r   r0   r3   )r   vkeyr   r   r   r   r      s$    

zGHashPrinter._iterator.nextN)r   r   r   r7   r   r$   r   r'   r   r   r   r   r(   b   s
   r(   c                 C   s\   || _ d| _ztd}W n tk
r0   d }Y nX | j dkrX|d k	rX| j d |krXd| _d S )NFZ
g_str_hashr   Z	hash_funcT)r   r>   r   r	   )r   r   Zstring_hashr   r   r   r      s    
zGHashPrinter.__init__c                 C   s   |  | j| jS r   )r(   r   r>   r   r   r   r   r)      s    zGHashPrinter.childrenc                 C   s   dt | j S 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_hintNr-   r   r   r   r   r.   _   s   =r.   c                 C   s   | j  }|jtjkr| }|jtjkrt|  }t|}|dkrPt| dS |dkrbt| dS |dkrt	| S n*t|}|dkrt
| S |dkrt| dS d S )NGListGSListZ
GHashTablezGSList *)typeunqualifiedcoder   ZTYPE_CODE_REFtargetTYPE_CODE_PTRr   r   r.   r   )r   rG   tr   r   r   pretty_printer_lookup   s$    




rM   c                 C   s   | d krt } | jt d S r   )r   Zpretty_printersappendrM   )objr   r   r   register   s    rP   c                       sX   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  ZS )ForeachCommandzForeach on listc                    s   t t| dtjtj d S )NZgforeach)superrQ   r   r   ZCOMMAND_DATAZCOMPLETE_SYMBOLr   	__class__r   r   r      s
    
  zForeachCommand.__init__c                 C   s   |d   sdS dS )Nr   FT)isalpha)r   namer   r   r   
valid_name   s    zForeachCommand.valid_namec                 C   s  | d}|dkrtd|d | }| |s8td|t|k rZ||  rZ|d }q8|||d  dkrvtd|d }|t|k r||  r|d }q~| d	|}|d
krtd||| }|d }|t|k r||  r|d }q||d  }|||fS )N r   zNo var specifiedzInvalid variable namer%   r@   inzInvalid syntax, missing in:zInvalid syntax, missing colon)findr	   rW   lenisspace)r   argivarZcolonr   commandr   r   r   
parse_args   s,    




zForeachCommand.parse_argsc                 C   s@   | td }t|}d||f }t| t| d S )NZvoidzset $%s = (void *)0x%x
)r2   r   r0   r3   r   Zexecute)r   r_   r5   rb   Zto_evalr   r   r   do_iter  s
    
zForeachCommand.do_iterc                 C   s@   | td }t|dkr<| ||d | |d }qd S )NrF   r   r   r   r2   r   r0   r3   r   rd   r   r_   	containerrb   Zlist_elementr   r   r   slist_iterator  s    zForeachCommand.slist_iteratorc                 C   s@   | td }t|dkr<| ||d | |d }qd S )NrE   r   r   r   re   rf   r   r   r   list_iterator  s    zForeachCommand.list_iteratorc                 C   s\   |j  }|jtjkrF|  }t|}|dkr8| jS |dkrF| jS t	dt|j  d S )NrF   rE   zInvalid container type %s)
rG   rH   rI   r   rK   rJ   r   rh   ri   r	   )r   rg   rL   r   r   r   pick_iterator  s    
zForeachCommand.pick_iteratorc                 C   s4   |  |\}}}t|}| |}|||| d S r   )rc   r   Zparse_and_evalrj   )r   r_   Zfrom_ttyra   rg   rb   funcr   r   r   invoke%  s    

zForeachCommand.invoke)r   r   r   r   r   rW   rc   rd   rh   ri   rj   rl   __classcell__r   r   rS   r   rQ      s   !rQ   )r   sysversion_infointr   r   r   r   r   r   r.   rM   rP   ZCommandrQ   r   r   r   r   <module>   s   
%XS