o
    i                     @   s   g d Z ddlmZ ddlmZmZ ddlmZmZm	Z	m
Z
 ddlmZmZ ddlmZmZmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZm Z  dd	l!m"Z" d
ddeeeef de#de$fddZ%d
ddeeeef de#ddfddZ&dS ))BinaryOpBytecodeCompareCompilerFlagsConcreteBytecodeConcreteInstrControlFlowGraphInstrLabel	SetLineno__version__    )StringIO)ListUnion)BaseBytecoder   _BaseBytecodeList
_InstrList)
BasicBlockr   )r   r   _ConvertBytecodeToConcrete)r   )UNSETr   CellVarr   FreeVarr   Intrinsic1OpIntrinsic2Opr	   r
   TryBeginTryEnd)r   Flinenobytecoder   returnc                   s  g  fdd}d#dd}dt dtdtffdd	}dtdtffd
d}t }d}| j d t| trd}| D ]A}	g }
|	jd urF|	j rZ|
	||	 d
|
}|||}n|
	d|||	f  d
|
}||d  t|	tr{||	j7 }q:| jr|d |d | jD ] }||j d|j d|j d|j d|jrdnd d  qn0t| tr7i }t| D ]\}}t|trd| ||< qt| D ]a\}}t|tr|| }d| }|dkr|d n?t|t r|||||| }|d7 }n+t|tr|d d }||||| }n|jd ur|j |||}|||| }||d  q|d nt| tri }t| dD ]\}}d| |t|< qD| D ]}|d|t|   d}t|D ]W\}}t|t r|||||| }|d7 }n6t|tr|r|d d }||||| }nt|trd}|jd ur|j |||}|||| }||d  qg|jd ur||d |t|j    |d qTntd!| d d" S )$Nc                    s:   r krd | |f } |S d| |f }|S |}|S )NzL.% 3s % 3s: %sz      % 3s: %s )indexline)
cur_linenor   prev_linenor    E/home/ubuntu/.local/lib/python3.10/site-packages/bytecode/__init__.pyformat_line>   s   z$format_bytecode.<locals>.format_linec                 S   s   | j }| j}|turHt|tr#zd||  }W n* ty"   d}Y n w t|tr>z
d|t|  }W n ty=   d}Y nw t|}d||f }|S )N<%s><error: unknown label>z<error: unknown block>z%s %s)	name_argr   
isinstancer	   KeyErrorr   idrepr)instrlabelstextargr    r    r%   format_instrJ   s$   

z%format_bytecode.<locals>.format_instrr/   r0   r   c                    s   t | jtrz	d|| j  }W n" ty   d}Y nw zd|t| j  }W n ty1   d}Y nw dt || jf | jr@dnd } |  |S )Nr'   r(   zTryBegin %s -> %s [%s]z last_i )	r+   targetr	   r,   r-   lenstack_depth
push_lastiappend)r/   r0   r2   r"   
try_beginsr    r%   format_try_begin]   s(   
z)format_bytecode.<locals>.format_try_beginc                    s"   | j  v r | j nd}d| S )Nz	<unknwon>zTryEnd (%s))entryr!   )r/   ir:   r    r%   format_try_ends   s   z'format_bytecode.<locals>.format_try_endz    r   r4   z
% 3s    %s
zException table:
z to z -> z []z lastizlabel_instr%sz%s:z     zblock%sz%s:
FTz-> %s
zunknown bytecode class)N)r   dictstrr   r   first_linenor+   r   r   r9   joinwriter   sizeexception_tablestart_offsetstop_offsetr5   r7   r8   r   	enumerater	   r   r-   r   
next_block	TypeErrorgetvalue)r   r   r&   r3   r<   r?   bufferindentoffsetc_instrfieldsr"   r=   r0   r!   r/   label
cfg_labelsblock_indexblock
seen_instrr    )r#   r   r$   r;   r%   format_bytecode7   s   


















r\   Nc                C   s   t t| |d d S )Nr   )printr\   )r   r   r    r    r%   dump_bytecode   s   r^   )'__all__ior   typingr   r   bytecode.bytecoder   r   r   r   bytecode.cfgr   r   bytecode.concreter   r   r   bytecode.flagsr   bytecode.instrr   r   r   r   r   r   r   r   r	   r
   r   r   bytecode.versionr   boolrF   r\   r^   r    r    r    r%   <module>   s4    8
 %