
    ,ue                        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 ddl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Z%dddeeeef   de#ddfdZ&y))LabelInstr	SetLinenoBytecodeConcreteInstrConcreteBytecodeControlFlowGraphCompilerFlagsCompareBinaryOp__version__    )StringIO)ListUnion)BaseBytecoder   _BaseBytecodeList
_InstrList)
BasicBlockr   )_ConvertBytecodeToConcrete)r   r   )r	   )UNSETr   CellVarr
   FreeVarr   Intrinsic1OpIntrinsic2Opr   r   TryBeginTryEnd)r   Flinenobytecoder   returnc                   g fd}dd}dt         dt        dt        ffd}dt        dt        ffd}t	               }d}| j
                  d t        | t              rTd	}| D ]  }	g }
|	j                  |	j                  r2|
j                   ||	             d
j                  |
      } |||      }n.|
j                  |dd ||	             d
j                  |
      }|j                  |dz          t        |	t              s||	j                  z  } | j                  r5|j                  d       |j                  d       | j                  D ][  }|j                  |j                   d|j                    d|j"                   d|j$                   d|j&                  rdnd
z   dz          ] nt        | t(              ri }t+        |       D ]  \  }}t        |t,              sd|z  ||<     t+        |       D ]  \  }}t        |t,              r!||   }d|z  }|d	k7  r|j                  d       n~t        |t               r| || |||            z   }|dz  }nUt        |t              r|d d }| || ||            z   }n-|j                  |j                   |||      }| |||      z   }|j                  |dz           |j                  d       nt        | t.              rci }t+        | d      D ]  \  }}d|z  |t1        |      <    t+        | d      D ]+  \  }}|j                  d|t1        |         z         d}t+        |      D ]  \  }}t        |t               r| || |||            z   }|dz  }nit        |t              r|r|d d }| || ||            z   }n?t        |t2              rd}|j                  |j                   |||      }| |||      z   }|j                  |dz           |j4                  -|j                  |d|t1        |j4                           z  z          |j                  d       . nt7        d      |j9                         d d S ) Nc                 R    r!k7  rddd| dd|}|S d| dd|}|S |}|S )NzL.>3 z: z       )indexline
cur_linenor   prev_linenos     3/usr/lib/python3/dist-packages/bytecode/__init__.pyformat_linez$format_bytecode.<locals>.format_line;   sJ    [(,6tD(
  ) ,1$7  D    c                 (   | j                   }| j                  }|t        urOt        |t              r
	 d||   z  }n.t        |t              r	 d|t        |         z  }nt        |      }|d|}|S # t
        $ r d}Y w xY w# t
        $ r d}Y 'w xY w)N<%s><error: unknown label>z<error: unknown block>r$   )	name_argr   
isinstancer   KeyErrorr   idrepr)instrlabelstextargs       r*   format_instrz%format_bytecode.<locals>.format_instrG   s    zzjje#u%3 6#;.C C,3 6"S'?2C 3i"C(D   32C3
   32C3s#   A2 B 2B ?B BBr6   r7   r    c                 b   t        | j                  t              r	 d|| j                     z  }n	 d|t	        | j                           z  }dt              d|d| j                  d| j                  rdndz   }j                  |        |S # t        $ r d}Y Pw xY w# t        $ r d}Y aw xY w)	Nr.   r/   z	TryBegin  ->  []z last_i )	r2   targetr   r3   r4   lenstack_depth
push_lastiappend)r6   r7   r9   r'   
try_beginss       r*   format_try_beginz)format_bytecode.<locals>.format_try_beginZ   s    ellE*/vell33/vb&677 
O
  **Y	4 	% !  /./
  /./s"   B B  BB B.-B.c                 d    | j                   v rj                  | j                         nd}d|z  S )Nz	<unknwon>zTryEnd (%s))entryr&   )r6   irE   s     r*   format_try_endz'format_bytecode.<locals>.format_try_endp   s/    -2[[J-FJU[[)Kq  r,   z    r   r?   r#   
zException table:
z to r<   r=   r>   z lastizlabel_instr%sz%s:z     zblock%sz%s:
FTz-> %s
zunknown bytecode class)N)r   dictstrr   r   first_linenor2   r   r   rD   joinwriter   sizeexception_tablestart_offsetstop_offsetr@   rB   rC   r   	enumerater   r   r4   r   
next_block	TypeErrorgetvalue)r   r   r+   r:   rF   rJ   bufferindentoffsetc_instrfieldsr'   rH   r7   r&   r6   label
cfg_labelsblock_indexblock
seen_instrr(   r)   rE   s    `                   @@@r*   format_bytecoderf   4   sz   
 "$J
& $ 3 ,!f ! ! ZFF&&JK(,- 	'GF~~)$^^
l734wwv"640fl76KLMwwvLL%'=1',,&	'  ##LLLL-.!11 ))*$u/@/@.A||nBu'8'8&9<#(#3#3x=  
Hh	'#%%h/ 	8LE5%' /% 7u	8 &h/ 	&LE5%'uu}A:LL&E8,E3CE63R SS$E6*E>%3H II<<+!&J#E62E4 88LL%#	&$ 	T	H.	/
"+Ha"8 	<K$-$;Jr%y!	< #,Ha"8 	KLL:bi#889J )% 0 *ueX.!K/zB% D dNFv.!!'!K~e7L$MMD!%/%)
||/%*\\
'z:D!Kt$<<DTD[)#*$ +Vi*R@P@P=Q2R&RRSLL/	2 011??Sb!!r,   Nc                0    t        t        | |             y )Nr   )printrf   )r   r   s     r*   dump_bytecoderi      s    
 
/(6
23r,   )'__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   boolrP   rf   ri   r%   r,   r*   <module>rt      s       6 9 = (    ) ^"H.0@@A^" ^" 		^"H 4H.0@@A4 4 
	4r,   