3
/*^>                 @   sR   d dl Z d dlZd dlmZ er&ejZdddZG dd dZeddddd
ZdS )    N)PYTHON3Tc             C   s|   t | tr| S t | tstttt| jd}t|dkrD|d S t|dksTt|\}}|d |krt|rp|S |S |S d S )N_   r      )
isinstanceintstrAssertionErrorlistmapsplitlen)offsetprefer_lastZoffsetsZoffset_1Zoffset_2 r   T/home/psgendb/BIRCHDEV/python/lib/python3.6/site-packages/uncompyle6/scanners/tok.pyoff2int   s    
r   c               @   s^   e Zd ZdZdddZdd Zd	d
 Zdd Zdd ZdddZ	dd Z
dd ZdddZdS )Tokenz
    Class representing a byte-code instruction.

    A byte-code token is equivalent to Python 3's dis.instruction or
    the contents of one line as output by dis.dis().
    Nr   Fc
             C   s   t || _|| _|| _|| _|	r4d||d f | _n|| _|| _|dkrTd | _d | _|d krrddlm}
 |
j	| _	n|| _	|d kr| j	j
j| jd | _n|| _d S )Nz%d_%dr   Fr   )_std_api)internkindhas_argattrpattrr   	linestartZxdis.stdr   opcopmapgetop)selfopnamer   r   r   r   r   r   r   Zhas_extended_argr   r   r   r   __init__;   s$    

zToken.__init__c             C   s<   t |tr.| j|jko,| j|jkp,| j|jkS | j|kS dS )zd '==' on kind and "pattr" attributes.
            It is okay if offsets and linestarts are differentN)r   r   r   r   r   )r   or   r   r   __eq__`   s    
zToken.__eq__c             C   s   | j | S )z< '!=', but it's okay if offsets and linestarts are different)r#   )r   r"   r   r   r   __ne__k   s    zToken.__ne__c             C   s
   t | jS )N)r   r   )r   r   r   r   __repr__o   s    zToken.__repr__c             C   s   | j ddS )N )line_prefix)format)r   r   r   r   __str__x   s    zToken.__str__r&   c             C   s`  |d k	r8| j rd||| j f nd|ddt|  f }n$| j rLd|| j f nddt|  }d| j| jf }| js~d||f S t| jtrd| j nd}| j}| jr.| j}| j	rP| j
| j	jkr| jjd
sd
| j }qP| j
| j	jkrt| j| _| jjd
s,d
t| j }qP| j
| j	jkrd|dkr:| j}n(|dkrTd||||f S d|||f S n| j
| j	jkrt| jtr| j	j| j }d||||f S | j
| j	jkrd|||f S |dkrd|||f S | j
| j	jkr| j	jdkr,d|||| jf S n$|dkrPd|||| j| j	j|f S n"tjd| jrLd|||f S d}d||||f S )Nz
(%03d)%s L.%4d  z(%03d)%s 	   z
%s L.%4d  z
%8s  %-17sz%s%sz%6d    zto ZLOAD_STRZ	LOAD_CODEz	%s%s%s %sz%s%s        %rz%s%s%sZLOAD_ASSERTz%s%s        %sg      @EXTENDED_ARGz%s%s%s 0x%x << %s = %sz_\d+$r&   z	%s%s%s %rz       )r   r   r   r   r   r   r   r   r   r   r   ZJREL_OPS
startswithZJABS_OPSr   Z	CONST_OPS
hascomparecmp_opZhasvargsZNAME_OPSversionZEXTENDED_ARG_SHIFTresearch)r   r'   Z	token_numprefixZoffset_opnameZargstrnamer   r   r   r   r(   {   sf    



zToken.formatc             C   s
   t | jS )N)hashr   )r   r   r   r   __hash__   s    zToken.__hash__c             C   s   t d S )N)
IndexError)r   ir   r   r   __getitem__   s    zToken.__getitem__Tc             C   s   t | j|S )N)r   r   )r   r   r   r   r   r      s    zToken.off2int)NNr;   NNNNF)r&   N)T)__name__
__module____qualname____doc__r!   r#   r$   r%   r)   r(   r7   r:   r   r   r   r   r   r   /   s"   	       
	
Cr   
LOAD_CONSTr   )r   r   r   )Tr;   )r2   sys
uncompyle6r   r   r   r   Z	NoneTokenr   r   r   r   <module>   s   
 