a
    hqiq                     @   s  d dl Z d dlZ d dlZdZdd Zdd ZdZdd	 ZG d
d de jj	Z
G dd de jjZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd de jjZG dd de jjZG dd deZG d d! d!eZG d"d# d#eZG d$d% d%eZG d&d' d'eZG d(d) d)eZG d*d+ d+e jjZG d,d- d-e jjZG d.d/ d/eZG d0d1 d1eZG d2d3 d3e jjZ G d4d5 d5e jjZ!G d6d7 d7e!Z"G d8d9 d9e!Z#G d:d; d;e!Z$G d<d= d=e!Z%G d>d? d?e jjZ&G d@dA dAe jjZ'G dBdC dCe'Z(G dDdE dEe'Z)G dFdG dGe'Z*G dHdI dIe'Z+G dJdK dKe'Z,G dLdM dMe'Z-G dNdO dOe jjZ.G dPdQ dQe jjZ/G dRdS dSe/Z0G dTdU dUe/Z1G dVdW dWe jjZ2G dXdY dYe jjZ3G dZd[ d[e3Z4G d\d] d]e3Z5G d^d_ d_e jjZ6G d`da dae jjZ7G dbdc dce7Z8G ddde dee7Z9G dfdg dge jjZ:G dhdi die:Z;G djdk dke jjZ<dldm Z=dS )n    Nzlibstdc++::c                   C   s
   t dS Nboolgdblookup_type r   r   1/usr/share/gcc-11/python/libstdcxx/v6/xmethods.pyget_bool_type   s    r	   c                   C   s
   t dS )Nzstd::size_tr   r   r   r   r   get_std_size_type   s    r
   z__8::c                 C   s2   t | tjr| j} dt|f }td| | duS )z
    Test whether a type is a specialization of the named class template.
    The type can be specified as a string or a gdb.Type object.
    The template should be the name of a class template as a string,
    without any 'std' qualification.
    z(%s)?%sz^std::(__\d::)?%s<.*>$N)
isinstancer   Typetag_versioned_namespacerematch)xZtemplate_namer   r   r   is_specialization_of!   s    r   c                   @   s   e Zd Zdd ZdS )LibStdCxxXMethodc                 C   s   t jj| | || _d S N)r   xmethodXMethod__init__worker_class)selfnamer   r   r   r   r   .   s    zLibStdCxxXMethod.__init__N)__name__
__module____qualname__r   r   r   r   r   r   -   s   r   c                   @   s   e Zd Zdd Zdd ZdS )ArrayWorkerBasec                 C   s   || _ || _d S r   )	_val_type_sizer   val_typesizer   r   r   r   6   s    zArrayWorkerBase.__init__c                 C   s   t d}|| j  S )Nz
(void *) 0)r   Zparse_and_evalcastr   pointerdereference)r   Znullptrr   r   r   
null_value:   s    
zArrayWorkerBase.null_valueN)r   r   r   r   r'   r   r   r   r   r   5   s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ArraySizeWorkerc                 C   s   t | || d S r   r   r   r!   r   r   r   r   @   s    zArraySizeWorker.__init__c                 C   s   d S r   r   r   r   r   r   get_arg_typesC   s    zArraySizeWorker.get_arg_typesc                 C   s   t  S r   r
   r   objr   r   r   get_result_typeF   s    zArraySizeWorker.get_result_typec                 C   s   | j S r   )r    r-   r   r   r   __call__I   s    zArraySizeWorker.__call__Nr   r   r   r   r+   r/   r0   r   r   r   r   r(   ?   s   r(   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ArrayEmptyWorkerc                 C   s   t | || d S r   r)   r!   r   r   r   r   N   s    zArrayEmptyWorker.__init__c                 C   s   d S r   r   r*   r   r   r   r+   Q   s    zArrayEmptyWorker.get_arg_typesc                 C   s   t  S r   r	   r-   r   r   r   r/   T   s    z ArrayEmptyWorker.get_result_typec                 C   s   t | jdkS Nr   )intr    r-   r   r   r   r0   W   s    zArrayEmptyWorker.__call__Nr1   r   r   r   r   r2   M   s   r2   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ArrayFrontWorkerc                 C   s   t | || d S r   r)   r!   r   r   r   r   \   s    zArrayFrontWorker.__init__c                 C   s   d S r   r   r*   r   r   r   r+   _   s    zArrayFrontWorker.get_arg_typesc                 C   s   | j S r   r   r-   r   r   r   r/   b   s    z ArrayFrontWorker.get_result_typec                 C   s&   t | jdkr|d d S |  S d S Nr   _M_elemsr5   r    r'   r-   r   r   r   r0   e   s    zArrayFrontWorker.__call__Nr1   r   r   r   r   r6   [   s   r6   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ArrayBackWorkerc                 C   s   t | || d S r   r)   r!   r   r   r   r   m   s    zArrayBackWorker.__init__c                 C   s   d S r   r   r*   r   r   r   r+   p   s    zArrayBackWorker.get_arg_typesc                 C   s   | j S r   r7   r-   r   r   r   r/   s   s    zArrayBackWorker.get_result_typec                 C   s,   t | jdkr |d | jd  S |  S d S )Nr   r9      r:   r-   r   r   r   r0   v   s    zArrayBackWorker.__call__Nr1   r   r   r   r   r;   l   s   r;   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ArrayAtWorkerc                 C   s   t | || d S r   r)   r!   r   r   r   r   ~   s    zArrayAtWorker.__init__c                 C   s   t  S r   r,   r*   r   r   r   r+      s    zArrayAtWorker.get_arg_typesc                 C   s   | j S r   r7   r   r.   indexr   r   r   r/      s    zArrayAtWorker.get_result_typec                 C   s4   t |t | jkr(tdt || jf |d | S )Nz%Array index "%d" should not be >= %d.r9   )r5   r    
IndexErrorr>   r   r   r   r0      s
    zArrayAtWorker.__call__Nr1   r   r   r   r   r=   }   s   r=   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ArraySubscriptWorkerc                 C   s   t | || d S r   r)   r!   r   r   r   r      s    zArraySubscriptWorker.__init__c                 C   s   t  S r   r,   r*   r   r   r   r+      s    z"ArraySubscriptWorker.get_arg_typesc                 C   s   | j S r   r7   r>   r   r   r   r/      s    z$ArraySubscriptWorker.get_result_typec                 C   s&   t | jdkr|d | S |  S d S r8   r:   r>   r   r   r   r0      s    zArraySubscriptWorker.__call__Nr1   r   r   r   r   rA      s   rA   c                   @   s   e Zd Zdd Zdd ZdS )ArrayMethodsMatcherc                    sf   t jj td  tdttdttdttdt	tdt
tdtd _ fd	d
 jD  _d S )Narrayr#   emptyfrontbackat
operator[]r#   rD   rE   rF   rG   rH   c                    s   g | ]} j | qS r   _method_dict.0mr*   r   r   
<listcomp>       z0ArrayMethodsMatcher.__init__.<locals>.<listcomp>)r   r   XMethodMatcherr   matcher_name_prefixr   r(   r2   r6   r;   r=   rA   rK   methodsr*   r   r*   r   r      s    
zArrayMethodsMatcher.__init__c                 C   s`   t |dsd S | j|}|d u s(|js,d S z|d}|d}W n   Y d S 0 |||S )NrC   r   r<   )r   rK   getenabledtemplate_argumentr   )r   
class_typemethod_namemethodZ
value_typer#   r   r   r   r      s    

zArrayMethodsMatcher.matchNr   r   r   r   r   r   r   r   r   rB      s   rB   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )DequeWorkerBasec                 C   s   || _ d|j pd| _d S )Ni   r<   )r   sizeof_bufsizer   r"   r   r   r   r      s    zDequeWorkerBase.__init__c                 C   sf   |d d }|d d }|d |d kr,dS | j |d |d  d  |d |d   |d	 |d   S )
N_M_impl_M_start	_M_finish_M_curr   _M_noder<   _M_first_M_lastr]   )r   r.   startfinishr   r   r   r#      s    zDequeWorkerBase.sizec                 C   s`   |d d }|d |d  }||k r0|d | S || }|d dt || j   }||| j  S )Nr_   r`   re   rb   rc   r<   )r5   r]   )r   r.   idxrg   Zfirst_node_sizeZ
index_noder   r   r   r?      s    zDequeWorkerBase.indexN)r   r   r   r   r#   r?   r   r   r   r   r[      s   
r[   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )DequeEmptyWorkerc                 C   s   d S r   r   r*   r   r   r   r+      s    zDequeEmptyWorker.get_arg_typesc                 C   s   t  S r   r3   r-   r   r   r   r/      s    z DequeEmptyWorker.get_result_typec                 C   s    |d d d |d d d kS )Nr_   r`   rb   ra   r   r-   r   r   r   r0      s    zDequeEmptyWorker.__call__Nr   r   r   r+   r/   r0   r   r   r   r   rj      s   rj   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )DequeSizeWorkerc                 C   s   d S r   r   r*   r   r   r   r+      s    zDequeSizeWorker.get_arg_typesc                 C   s   t  S r   r,   r-   r   r   r   r/      s    zDequeSizeWorker.get_result_typec                 C   s
   |  |S r   r#   r-   r   r   r   r0      s    zDequeSizeWorker.__call__Nrk   r   r   r   r   rl      s   rl   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )DequeFrontWorkerc                 C   s   d S r   r   r*   r   r   r   r+      s    zDequeFrontWorker.get_arg_typesc                 C   s   | j S r   r7   r-   r   r   r   r/      s    z DequeFrontWorker.get_result_typec                 C   s   |d d d d S )Nr_   r`   rb   r   r   r-   r   r   r   r0      s    zDequeFrontWorker.__call__Nrk   r   r   r   r   rn      s   rn   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )DequeBackWorkerc                 C   s   d S r   r   r*   r   r   r   r+      s    zDequeBackWorker.get_arg_typesc                 C   s   | j S r   r7   r-   r   r   r   r/      s    zDequeBackWorker.get_result_typec                 C   s^   |d d d |d d d krF|d d d d }|d | j d  S |d d d d S d S )	Nr_   ra   rb   rd   rc   r<   r   rf   r   r.   Z	prev_noder   r   r   r0      s    zDequeBackWorker.__call__Nrk   r   r   r   r   ro      s   ro   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )DequeSubscriptWorkerc                 C   s   t  S r   r,   r*   r   r   r   r+   
  s    z"DequeSubscriptWorker.get_arg_typesc                 C   s   | j S r   r7   r   r.   Z	subscriptr   r   r   r/     s    z$DequeSubscriptWorker.get_result_typec                 C   s   |  ||S r   )r?   rs   r   r   r   r0     s    zDequeSubscriptWorker.__call__Nrk   r   r   r   r   rr   	  s   rr   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )DequeAtWorkerc                 C   s   t  S r   r,   r*   r   r   r   r+     s    zDequeAtWorker.get_arg_typesc                 C   s   | j S r   r7   r>   r   r   r   r/     s    zDequeAtWorker.get_result_typec                 C   s@   t | |}t ||kr0tdt ||f n| ||S d S )Nz%Deque index "%d" should not be >= %d.)r5   r#   r@   r?   )r   r.   r?   Z
deque_sizer   r   r   r0     s    
zDequeAtWorker.__call__Nrk   r   r   r   r   rt     s   rt   c                   @   s   e Zd Zdd Zdd ZdS )DequeMethodsMatcherc                    sf   t jj td  tdttdttdttdt	tdt
tdtd _ fd	d
 jD  _d S )NdequerD   r#   rE   rF   rH   rG   )rD   r#   rE   rF   rH   rG   c                    s   g | ]} j | qS r   rJ   rL   r*   r   r   rO   0  rP   z0DequeMethodsMatcher.__init__.<locals>.<listcomp>)r   r   rQ   r   rR   r   rj   rl   rn   ro   rr   rt   rK   rS   r*   r   r*   r   r   %  s    
zDequeMethodsMatcher.__init__c                 C   s<   t |dsd S | j|}|d u s(|js,d S ||dS )Nrv   r   r   rK   rT   rU   r   rV   r   rW   rX   rY   r   r   r   r   2  s    
zDequeMethodsMatcher.matchNrZ   r   r   r   r   ru   $  s   ru   c                   @   s   e Zd Zdd Zdd ZdS )ForwardListWorkerBasec                 C   s   || _ || _d S r   r   
_node_typer   r"   	node_typer   r   r   r   >  s    zForwardListWorkerBase.__init__c                 C   s   d S r   r   r*   r   r   r   r+   B  s    z#ForwardListWorkerBase.get_arg_typesN)r   r   r   r   r+   r   r   r   r   ry   =  s   ry   c                   @   s   e Zd Zdd Zdd ZdS )ForwardListEmptyWorkerc                 C   s   t  S r   r3   r-   r   r   r   r/   G  s    z&ForwardListEmptyWorker.get_result_typec                 C   s   |d d d dkS )Nr_   _M_head_M_nextr   r   r-   r   r   r   r0   J  s    zForwardListEmptyWorker.__call__Nr   r   r   r/   r0   r   r   r   r   r~   F  s   r~   c                   @   s   e Zd Zdd Zdd ZdS )ForwardListFrontWorkerc                 C   s   | j S r   r7   r-   r   r   r   r/   O  s    z&ForwardListFrontWorker.get_result_typec                 C   s:   |d d d  | j}|d d j}| | j  S )Nr_   r   r   
_M_storage)r$   r{   addressr   r%   r&   )r   r.   nodeZval_addressr   r   r   r0   R  s    zForwardListFrontWorker.__call__Nr   r   r   r   r   r   N  s   r   c                   @   s   e Zd Zdd Zdd ZdS )ForwardListMethodsMatcherc                    sJ   t d }tjj | tdttdtd _ fdd jD  _	d S )Nforward_listrD   rE   )rD   rE   c                    s   g | ]} j | qS r   rJ   rL   r*   r   r   rO   `  rP   z6ForwardListMethodsMatcher.__init__.<locals>.<listcomp>)
rR   r   r   rQ   r   r   r~   r   rK   rS   )r   Zmatcher_namer   r*   r   r   Y  s    z"ForwardListMethodsMatcher.__init__c                 C   sX   t |dsd S | j|}|d u s(|js,d S |d}tt|d  }|	||S )Nr   r   ::_Node
r   rK   rT   rU   rV   r   r   strr%   r   r   rW   rX   rY   r"   r}   r   r   r   r   b  s    

zForwardListMethodsMatcher.matchNrZ   r   r   r   r   r   X  s   	r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )ListWorkerBasec                 C   s   || _ || _d S r   rz   r|   r   r   r   r   p  s    zListWorkerBase.__init__c                 C   s   d S r   r   r*   r   r   r   r+   t  s    zListWorkerBase.get_arg_typesc                 C   sB   |  }|j d jdkr$|d S |d j}|| j   S )Nr<   Z_M_datar   )r&   typefieldsr   r   r$   r   r%   )r   r   Zaddrr   r   r   get_value_from_nodew  s
    
z"ListWorkerBase.get_value_from_nodeN)r   r   r   r   r+   r   r   r   r   r   r   o  s   r   c                   @   s   e Zd Zdd Zdd ZdS )ListEmptyWorkerc                 C   s   t  S r   r3   r-   r   r   r   r/     s    zListEmptyWorker.get_result_typec                 C   s&   |d d }|d |j krdS dS d S )Nr_   rc   r   TFr   )r   r.   Z	base_noder   r   r   r0     s    zListEmptyWorker.__call__Nr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )ListSizeWorkerc                 C   s   t  S r   r,   r-   r   r   r   r/     s    zListSizeWorker.get_result_typec                 C   s@   |d d d }|d d j }d}||kr<|d }|d7 }q"|S )Nr_   rc   r   r   r<   r   )r   r.   Z
begin_nodeZend_noder#   r   r   r   r0     s    
zListSizeWorker.__call__Nr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )ListFrontWorkerc                 C   s   | j S r   r7   r-   r   r   r   r/     s    zListFrontWorker.get_result_typec                 C   s"   |d d d  | j}| |S )Nr_   rc   r   r$   r{   r   )r   r.   r   r   r   r   r0     s    zListFrontWorker.__call__Nr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )ListBackWorkerc                 C   s   | j S r   r7   r-   r   r   r   r/     s    zListBackWorker.get_result_typec                 C   s"   |d d d  | j}| |S )Nr_   rc   Z_M_prevr   rq   r   r   r   r0     s    zListBackWorker.__call__Nr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )ListMethodsMatcherc                    sV   t jj td  tdttdttdttdt	d _
 fdd j
D  _d S )	NlistrD   r#   rE   rF   )rD   r#   rE   rF   c                    s   g | ]} j | qS r   rJ   rL   r*   r   r   rO     rP   z/ListMethodsMatcher.__init__.<locals>.<listcomp>)r   r   rQ   r   rR   r   r   r   r   r   rK   rS   r*   r   r*   r   r     s    
zListMethodsMatcher.__init__c                 C   sX   t |dsd S | j|}|d u s(|js,d S |d}tt|d  }|	||S )Nz(__cxx11::)?listr   r   r   r   r   r   r   r     s    

zListMethodsMatcher.matchNrZ   r   r   r   r   r     s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )VectorWorkerBasec                 C   s
   || _ d S r   r7   r^   r   r   r   r     s    zVectorWorkerBase.__init__c                 C   sz   | j jtjkr^|d d d }|d d d }|d d d }| jjd }|| | | S |d d |d d  S d S )Nr_   r`   _M_pra   Z	_M_offset   r   coder   ZTYPE_CODE_BOOLr&   r   r\   )r   r.   rg   rh   Zfinish_offsetbit_sizer   r   r   r#     s    zVectorWorkerBase.sizec                 C   sj   | j jtjkrV|d d d }| jjd }|||  }|| }| d|> @ dkS |d d | S d S )Nr_   r`   r   r   r<   r   r   )r   r.   r?   rg   r   Zvalpoffsetr   r   r   rT     s    zVectorWorkerBase.getN)r   r   r   r   r#   rT   r   r   r   r   r     s   
r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )VectorEmptyWorkerc                 C   s   d S r   r   r*   r   r   r   r+     s    zVectorEmptyWorker.get_arg_typesc                 C   s   t  S r   r3   r-   r   r   r   r/     s    z!VectorEmptyWorker.get_result_typec                 C   s   t | |dkS r4   )r5   r#   r-   r   r   r   r0     s    zVectorEmptyWorker.__call__Nrk   r   r   r   r   r     s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )VectorSizeWorkerc                 C   s   d S r   r   r*   r   r   r   r+     s    zVectorSizeWorker.get_arg_typesc                 C   s   t  S r   r,   r-   r   r   r   r/     s    z VectorSizeWorker.get_result_typec                 C   s
   |  |S r   rm   r-   r   r   r   r0     s    zVectorSizeWorker.__call__Nrk   r   r   r   r   r     s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )VectorFrontWorkerc                 C   s   d S r   r   r*   r   r   r   r+     s    zVectorFrontWorker.get_arg_typesc                 C   s   | j S r   r7   r-   r   r   r   r/     s    z!VectorFrontWorker.get_result_typec                 C   s   |  |dS r4   )rT   r-   r   r   r   r0     s    zVectorFrontWorker.__call__Nrk   r   r   r   r   r     s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )VectorBackWorkerc                 C   s   d S r   r   r*   r   r   r   r+     s    zVectorBackWorker.get_arg_typesc                 C   s   | j S r   r7   r-   r   r   r   r/     s    z VectorBackWorker.get_result_typec                 C   s   |  |t| |d S Nr<   )rT   r5   r#   r-   r   r   r   r0     s    zVectorBackWorker.__call__Nrk   r   r   r   r   r      s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )VectorAtWorkerc                 C   s   t  S r   r,   r*   r   r   r   r+     s    zVectorAtWorker.get_arg_typesc                 C   s   | j S r   r7   r>   r   r   r   r/     s    zVectorAtWorker.get_result_typec                 C   s>   t | |}t ||kr.tdt ||f | |t |S )Nz&Vector index "%d" should not be >= %d.)r5   r#   r@   rT   )r   r.   r?   r#   r   r   r   r0     s    
zVectorAtWorker.__call__Nrk   r   r   r   r   r     s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )VectorSubscriptWorkerc                 C   s   t  S r   r,   r*   r   r   r   r+     s    z#VectorSubscriptWorker.get_arg_typesc                 C   s   | j S r   r7   rs   r   r   r   r/     s    z%VectorSubscriptWorker.get_result_typec                 C   s   |  |t|S r   )rT   r5   rs   r   r   r   r0   !  s    zVectorSubscriptWorker.__call__Nrk   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )VectorMethodsMatcherc                    sf   t jj td  tdttdttdttdt	tdt
tdtd _ fd	d
 jD  _d S )Nvectorr#   rD   rE   rF   rG   rH   rI   c                    s   g | ]} j | qS r   rJ   rL   r*   r   r   rO   2  rP   z1VectorMethodsMatcher.__init__.<locals>.<listcomp>)r   r   rQ   r   rR   r   r   r   r   r   r   r   rK   rS   r*   r   r*   r   r   &  s    
	zVectorMethodsMatcher.__init__c                 C   s<   t |dsd S | j|}|d u s(|js,d S ||dS )Nr   r   rw   rx   r   r   r   r   4  s    
zVectorMethodsMatcher.matchNrZ   r   r   r   r   r   %  s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )AssociativeContainerWorkerBasec                 C   s
   || _ d S r   Z
_unordered)r   	unorderedr   r   r   r   @  s    z'AssociativeContainerWorkerBase.__init__c                 C   s&   | j r|d d S |d d d S d S )NZ_M_hZ_M_element_count_M_tr_   Z_M_node_countr   r-   r   r   r   
node_countC  s    z)AssociativeContainerWorkerBase.node_countc                 C   s   d S r   r   r*   r   r   r   r+   I  s    z,AssociativeContainerWorkerBase.get_arg_typesN)r   r   r   r   r   r+   r   r   r   r   r   ?  s   r   c                   @   s   e Zd Zdd Zdd ZdS )AssociativeContainerEmptyWorkerc                 C   s   t  S r   r3   r-   r   r   r   r/   N  s    z/AssociativeContainerEmptyWorker.get_result_typec                 C   s   t | |dkS r4   )r5   r   r-   r   r   r   r0   Q  s    z(AssociativeContainerEmptyWorker.__call__Nr   r   r   r   r   r   M  s   r   c                   @   s   e Zd Zdd Zdd ZdS )AssociativeContainerSizeWorkerc                 C   s   t  S r   r,   r-   r   r   r   r/   V  s    z.AssociativeContainerSizeWorker.get_result_typec                 C   s
   |  |S r   )r   r-   r   r   r   r0   Y  s    z'AssociativeContainerSizeWorker.__call__Nr   r   r   r   r   r   U  s   r   c                   @   s   e Zd Zdd Zdd ZdS )"AssociativeContainerMethodsMatcherc                    sL   t jj t|  | _tdttdtd _	 fdd j	D  _
d S )Nr#   rD   )r#   rD   c                    s   g | ]} j | qS r   rJ   rL   r*   r   r   rO   g  rP   z?AssociativeContainerMethodsMatcher.__init__.<locals>.<listcomp>)r   r   rQ   r   rR   _namer   r   r   rK   rS   )r   r   r   r*   r   r   ^  s    
z+AssociativeContainerMethodsMatcher.__init__c                 C   sB   t || jsd S | j|}|d u s*|js.d S d| jv }||S )Nr   )r   r   rK   rT   rU   r   )r   rW   rX   rY   r   r   r   r   r   i  s    
z(AssociativeContainerMethodsMatcher.matchNrZ   r   r   r   r   r   ]  s   r   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )UniquePtrGetWorkerzS
    Implement std::unique_ptr<T>::get() and std::unique_ptr<T>::operator->().
    c                 C   s*   |j tjk| _| jr | | _n|| _d S r   r   r   ZTYPE_CODE_ARRAY	_is_arraytarget
_elem_typer   Z	elem_typer   r   r   r   z  s    zUniquePtrGetWorker.__init__c                 C   s   d S r   r   r*   r   r   r   r+     s    z UniquePtrGetWorker.get_arg_typesc                 C   s
   | j  S r   r   r%   r-   r   r   r   r/     s    z"UniquePtrGetWorker.get_result_typec                 C   s   |dkp| j  S NrT   r   r   rX   r   r   r   	_supports  s    zUniquePtrGetWorker._supportsc                 C   s   |  j d jj}t|dr.|d d }nt|drB|d }nd S |j d j}| d j}| d }|jdkr||d S |jr||jS d S d S )Nr   z__uniq_ptr_(data|impl)r   tupler<   Z_M_head_impl)r&   r   r   r   r   r   r$   Zis_base_class)r   r.   Z	impl_typeZtuple_memberZtuple_impl_typeZtuple_head_typeZ
head_fieldr   r   r   r0     s    



zUniquePtrGetWorker.__call__N	r   r   r   __doc__r   r+   r/   r   r0   r   r   r   r   r   u  s   r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )UniquePtrDerefWorkerz*Implement std::unique_ptr<T>::operator*().c                 C   s   t | | d S r   r   r   r   r   r   r   r     s    zUniquePtrDerefWorker.__init__c                 C   s   | j S r   r   r-   r   r   r   r/     s    z$UniquePtrDerefWorker.get_result_typec                 C   s   | j  S r   r   r   r   r   r   r     s    zUniquePtrDerefWorker._supportsc                 C   s   t | | S r   )r   r0   r&   r-   r   r   r   r0     s    zUniquePtrDerefWorker.__call__Nr   r   r   r   r   r/   r   r0   r   r   r   r   r     s
   r   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )UniquePtrSubscriptWorkerz1Implement std::unique_ptr<T>::operator[](size_t).c                 C   s   t | | d S r   r   r   r   r   r   r     s    z!UniquePtrSubscriptWorker.__init__c                 C   s   t  S r   r,   r*   r   r   r   r+     s    z&UniquePtrSubscriptWorker.get_arg_typesc                 C   s   | j S r   r   r>   r   r   r   r/     s    z(UniquePtrSubscriptWorker.get_result_typec                 C   s   | j S r   r   r   r   r   r   r     s    z"UniquePtrSubscriptWorker._supportsc                 C   s   t | || S r   )r   r0   r>   r   r   r   r0     s    z!UniquePtrSubscriptWorker.__call__Nr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )UniquePtrMethodsMatcherc                    sV   t jj td  tdttdttdttdtd _	 fdd j	D  _
d S )	N
unique_ptrrT   
operator->	operator*rH   )rT   r   r   rH   c                    s   g | ]} j | qS r   rJ   rL   r*   r   r   rO     rP   z4UniquePtrMethodsMatcher.__init__.<locals>.<listcomp>)r   r   rQ   r   rR   r   r   r   r   rK   rS   r*   r   r*   r   r     s    
z UniquePtrMethodsMatcher.__init__c                 C   sN   t |dsd S | j|}|d u s(|js,d S ||d}||rJ|S d S )Nr   r   r   rK   rT   rU   r   rV   r   r   rW   rX   rY   Zworkerr   r   r   r     s    

zUniquePtrMethodsMatcher.matchNrZ   r   r   r   r   r     s   r   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )SharedPtrGetWorkerzT
    Implements std::shared_ptr<T>::get() and std::shared_ptr<T>::operator->().
    c                 C   s*   |j tjk| _| jr | | _n|| _d S r   r   r   r   r   r   r     s    zSharedPtrGetWorker.__init__c                 C   s   d S r   r   r*   r   r   r   r+     s    z SharedPtrGetWorker.get_arg_typesc                 C   s
   | j  S r   r   r-   r   r   r   r/     s    z"SharedPtrGetWorker.get_result_typec                 C   s   |dkp| j  S r   r   r   r   r   r   r     s    zSharedPtrGetWorker._supportsc                 C   s   |d S )NZ_M_ptrr   r-   r   r   r   r0     s    zSharedPtrGetWorker.__call__Nr   r   r   r   r   r     s   r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )SharedPtrDerefWorkerz*Implement std::shared_ptr<T>::operator*().c                 C   s   t | | d S r   r   r   r   r   r   r   r     s    zSharedPtrDerefWorker.__init__c                 C   s   | j S r   r   r-   r   r   r   r/     s    z$SharedPtrDerefWorker.get_result_typec                 C   s   | j  S r   r   r   r   r   r   r     s    zSharedPtrDerefWorker._supportsc                 C   s   t | | S r   )r   r0   r&   r-   r   r   r   r0     s    zSharedPtrDerefWorker.__call__Nr   r   r   r   r   r     s
   r   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )SharedPtrSubscriptWorkerz1Implement std::shared_ptr<T>::operator[](size_t).c                 C   s   t | | d S r   r   r   r   r   r   r     s    z!SharedPtrSubscriptWorker.__init__c                 C   s   t  S r   r,   r*   r   r   r   r+     s    z&SharedPtrSubscriptWorker.get_arg_typesc                 C   s   | j S r   r   r>   r   r   r   r/     s    z(SharedPtrSubscriptWorker.get_result_typec                 C   s   | j S r   r   r   r   r   r   r     s    z"SharedPtrSubscriptWorker._supportsc                 C   sZ   t dt| j}|rJ|t|dkrJtd| jt|t|df t| || S )Nz.*\[(\d+)]$r<   z.shared_ptr<%s> index "%d" should not be >= %d.)	r   r   r   r   r5   groupr@   r   r0   )r   r.   r?   rN   r   r   r   r0     s    z!SharedPtrSubscriptWorker.__call__Nr   r   r   r   r   r   	  s   r   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )SharedPtrUseCountWorkerz*Implement std::shared_ptr<T>::use_count().c                 C   s   d S r   r   r   r   r   r   r   %  s    z SharedPtrUseCountWorker.__init__c                 C   s   d S r   r   r*   r   r   r   r+   (  s    z%SharedPtrUseCountWorker.get_arg_typesc                 C   s
   t dS )NZlongr   r-   r   r   r   r/   +  s    z'SharedPtrUseCountWorker.get_result_typec                 C   s   dS )NTr   r   r   r   r   r   .  s    z!SharedPtrUseCountWorker._supportsc                 C   s   |d d }|r|d S dS )NZ_M_refcountZ_M_piZ_M_use_countr   r   )r   r.   Z	refcountsr   r   r   r0   1  s    z SharedPtrUseCountWorker.__call__Nr   r   r   r   r   r   "  s   r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	SharedPtrUniqueWorkerz'Implement std::shared_ptr<T>::unique().c                 C   s   t | | d S r   )r   r   r   r   r   r   r   9  s    zSharedPtrUniqueWorker.__init__c                 C   s
   t dS r   r   r-   r   r   r   r/   <  s    z%SharedPtrUniqueWorker.get_result_typec                 C   s   t | |dkS r   )r   r0   r-   r   r   r   r0   ?  s    zSharedPtrUniqueWorker.__call__N)r   r   r   r   r   r/   r0   r   r   r   r   r   6  s   r   c                   @   s   e Zd Zdd Zdd ZdS )SharedPtrMethodsMatcherc                    sf   t jj td  tdttdttdttdttdt	tdt
d _ fd	d
 jD  _d S )N
shared_ptrrT   r   r   rH   	use_countunique)rT   r   r   rH   r   r   c                    s   g | ]} j | qS r   rJ   rL   r*   r   r   rO   O  rP   z4SharedPtrMethodsMatcher.__init__.<locals>.<listcomp>)r   r   rQ   r   rR   r   r   r   r   r   r   rK   rS   r*   r   r*   r   r   D  s    
z SharedPtrMethodsMatcher.__init__c                 C   sN   t |dsd S | j|}|d u s(|js,d S ||d}||rJ|S d S )Nr   r   r   r   r   r   r   r   Q  s    

zSharedPtrMethodsMatcher.matchNrZ   r   r   r   r   r   C  s   r   c                 C   s  t j| t  t j| t  t j| t  t j| t  t j| t  t j| td t j| td t j| td t j| td t j| td t j| td t j| td t j| td t j| t	  t j| t
  d S )	NsetmapZmultisetZmultimapZunordered_setZunordered_mapZunordered_multisetZunordered_multimap)r   r   Zregister_xmethod_matcherrB   r   ru   r   r   r   r   r   )Zlocusr   r   r   register_libstdcxx_xmethods]  s>    r   )>r   Zgdb.xmethodr   rR   r	   r
   r   r   r   r   r   ZXMethodWorkerr   r(   r2   r6   r;   r=   rA   rQ   rB   r[   rj   rl   rn   ro   rr   rt   ru   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sr   
	
		*