3
๓ทZz  ใ               @   s~   d dl mZmZ d dljjZG dd deZG dd dejeZdd Z	d	d
 Z
dd Zdd Zedkrzdd Zeej dS )้    )ฺSourceWalkerฺcode_deparseNc                   s@   e Zd Z fddZ fddZ fddZ fddZ  ZS )	ฺLineMapWalkerc                s"   t t| j|| i | _d| _d S )N้   )ฺsuperr   ฺ__init__ฺsource_linemapฺcurrent_line_number)ฺselfฺargsฺkwargs)ฺ	__class__ฉ ๚Y/home/psgendb/BIRCHDEV/python/lib/python3.6/site-packages/uncompyle6/semantics/linemap.pyr      s    zLineMapWalker.__init__c                sF   x4|D ],}x&t |D ]}|dkr|  jd7  _qW qW tt| j| S )z3Augment write routine to keep track of current lineฺ
r   )ฺstrr	   r   r   ฺwrite)r
   ฺdataฺlฺi)r   r   r   r      s    
zLineMapWalker.writec                s.   t |dr|jr|j| j| j< tt| j|S )z;Augment write default routine to record line number changesฺ	linestart)ฺhasattrr   r   r	   r   r   ฺdefault)r
   ฺnode)r   r   r   r   '   s    
zLineMapWalker.defaultc                s.   t |dr|jr|j| j| j< tt| j|S )Nr   )r   r   r   r	   r   r   ฺn_LOAD_CONST)r
   r   )r   r   r   r   .   s    
zLineMapWalker.n_LOAD_CONST)ฺ__name__ฺ
__module__ฺ__qualname__r   r   r   r   ฺ__classcell__r   r   )r   r   r      s   r   c                   s   e Zd Z fddZ  ZS )ฺLineMapFragmentWalkerc                s"   t t| j|| i | _d| _d S )Nr   )r   r   r   r   r	   )r
   r   r   )r   r   r   r   6   s    zLineMapFragmentWalker.__init__)r   r   r   r   r   r   r   )r   r   r   5   s   r   c              O   s   t |d< t| |S )zl
    Like deparse_code but saves line number correspondences.
    Deprecated. Use code_deparse_with_map
    ฺwalker)r   r   )r   r   r   r   r   ฺdeparse_code_with_map;   s    r!   c              O   s   t |d< t| |S )zB
    Like code_deparse but saves line number correspondences.
    r    )r   r   )r   r   r   r   r   ฺcode_deparse_with_mapC   s    r"   c              O   s   t |d< tj| |S )zq
    Like deparse_code_with_map but saves fragments.
    Deprecated. Use code_deparse_with_fragments_and_map
    r    )r   ฺ	fragmentsZdeparse_code)r   r   r   r   r   ฺ#deparse_code_with_fragments_and_mapJ   s    r$   c              O   s   t |d< tj| |S )z9
    Like code_deparse_with_map but saves fragments.
    r    )r   r#   r   )r   r   r   r   r   ฺ#code_deparse_with_fragments_and_mapR   s    r%   ฺ__main__c                st   t |  d}d}td  fddt jj D }t| t|  td  fddt jj D }t| dS )zThis is a docstringr   ้   r   c                s   g | ]}| j | fqS r   )r   )ฺ.0ฺline_no)ฺdeparsedr   r   ๚
<listcomp>_   s   z deparse_test.<locals>.<listcomp>c                s   g | ]}| j | fqS r   )r   )r(   r)   )r*   r   r   r+   e   s   N)r"   ฺprintฺsortedr   ฺkeysr%   )ฺcoฺaฺbZlinemapZlinemap2r   )r*   r   ฺdeparse_testZ   s     

r2   )Zuncompyle6.semantics.pysourcer   r   Zuncompyle6.semantics.fragmentsZ	semanticsr#   r   ZFragmentsWalkerr   r!   r"   r$   r%   r   r2   ฺ__code__r   r   r   r   ฺ<module>   s   "