o
    HXh                     @   s\  d dl mZ d dlmZ d dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
dd Ze jjZG dd dZdejjjd	 f Zd
Zdejjjd f Zdejjjd f Zdejjeejjeejjef Zdd Zdejjd	 ejjd f ZdZdd Zdejjd	 ejjd ejjd	 ejjd ejjd	 f Zg fddZ de jjd	 e!e jjd	 e jjd e jjd	 f Z"dd Z#e#jj$dde#_dZ%e&g dZ'd Z(d!Z)d"Z*d#Z+d$Z,d%Z-d&Z.d'Z/d(Z0d)Z1d*Z2d+Z3d,ejd	 ejd ejd- ejd ejd. ejd- ejd f Z4d/d0 Z5d1e5jjd	 f Z6d2d3 Z7d4d5 Z8d6e7jjd	 e7jjd e7jjd. f Z9d7e8jjd	 e8jjd e8jjd. f Z:d8d9 Z;d:d; Z<d<d= Z=d>d? Z>d@e>jjd	 e!e>jjd	 e>jjd. f Z?dAe?e!e>jjd	 e>jjd e!e>jjd f Z@dBe@e!e>jjd e>jjd f ZAG dCdD dDejBZCG dEdF dFeCZDejEjFdu rdGZGndHZGdIeG dJZHeIdZg dLdMdNZJdOZKeJjLjjMd	 ZNdPZOdQZPdRZQdSZRdTdU ZSdVZTG dWdX dXejBZUd[dYdZZVd[d\ ZWd	ZXeVjjd	 ZYeVjjMd ZZeZjeY Z[eZjMd Z\e\jeY Z]d	Z^ej_Z_e_d]d^d_d`dad ddbdce_ddded dfdfdddbdce_ddded	dgdgd.ddbdce_dhdidddjdkddbdce_d]d^deZe`eZd_ddbdce_d]d^d.dldmdnddbdce_dodpdqdqdrdsddbdce_dtduddvdvdwddbdce_dxdyd dzdzd{d|dbdce_d}d~d dfdfdddbdce_d}d~d	dgdgdddbdce_d]d^d-djddddbdce_d]d^dkd	ddddbdce_ddd d djdddbdce_ddd d djdddbdce_d]d^d|dddddbdce_ddd|d|djdddbdce_dd	dddjdddbdce_ddddvdvdd_dbdce_dddddjdddbdcgZae_d]d^d-ddd ddbdce_dddeddfdfdddbdce_dddeddgdgd.ddbdce_ddded dddkddbdce_ddded	ddd_ddbdce_dhdid.d.djdnddbdce_d]d^de\e`e\dsddbdce_d]d^d.dddwddbdce_dodpdqdqdrd{ddbdce_dtduddddddbdce_dxdyd dzdzdd-dbdce_d}d~ddfdfdddbdce_d}d~ddgdgdddbdce_d}d~d dddddbdce_d}d~d	dddddbdce_ddd.d.djdddbdce_dd	dddjdddbdce_dddddddkdbdce_dddddjdddbdcgZbe_dxdyd dzdzd d.dbdce_d}d~d dfdfdddbdce_d}d~d	dgdgd.ddbdce_d}d~ddddkddbdce_d}d~dddd_ddbdce_ddd dddnddbdce_ddd	dvdvdsddbdce_dddkdkdjdwddbdce_dd	dddjd{ddbdce_d]d^d dddddbdce_dddddjdddbdcgZcg e_dxdyd ddd ddbdce_d]d^d	dnddddbdce_ddd	d	djd.ddbdce_dddddjdkddbdce_dddddd_ddKdce_dtdud dddnddbdce_dxdyd	dzdzdsd.dbdce_ddd dddwddbdce_ddd	d	djd{ddbdce_dd	dddjdddbdce_ddd dddd-dbdce_d]d^dd.ddddbdce_ddd dddddbdce_ddddddddbdce_ddd.d_dddkdbdce_ddd dddd|dKdce_d]d^ddkddddbdce_ddd.dddddbdce_ddddddddbdce_dd	dddjdd_dbdce_ddd-dddddbdce_ddd.d_ddd|dKdce_dxdyd	dzdzddndKdce_d]d^d.dddddbdce_ddd	d	djdddbdce_dd	dddjdddbdce_ddd dddddKdce_ddddddddbdce_dxdyd	dzdzddsdKdce_ddd dddddbdce_ddd	d	djdddbdce_dd	dddjdddbdce_ddd dddddbdce_d]d^d-d	ddddbdce_dddddjdddbdce_dtdud dddddbdce_ddd ddddwdbdce_d]d^ddkddddbdce_ddd.dddddbdce_ddddddddbdce_ddddddddbdce_ddd dddd{dKdce_d]d^dd.ddddbdce_ddd dddddbdce_ddddddddbdce_dddkdddddbdce_ddd dddddKdce_ddddddddbdce_dxdyd	dzdzdddKdce_d]d^dkdddddbdce_ddd	d	djd^ddbdce_dd	dddjdiddbdce_ddddddddKdce_dddkdddddbdce_d]d^d-d	ddddbdce_d]d^d|d ddddbdce_dddddjdddbdce_dd	dddjdddbdce_dddddjdyddbdce_ddddddddbdce_dd.dddjdddKdce_dxdyddddddbdce_dd dӐdddddbdce_dd	dddjdddbdce_dd	dddjdddbdce_dd	dddjdddbdce_dxdyd	dzdzdpddbdce_d]d^d_ddd	ddbdce_ddd	d	djd~ddbdce_dd	dddjd
ddbdce_dddddjdddbdce_ddddddddbdce_ddd d djdddKdce_ddd dddddKdce_dddsdddddbdce_dtdud	dddddbdce_dxdyd	dzdzdddbdce_d]d^dqdddddbdce_ddd	d	djdddbdce_dd	dddjd ddbdce_dddddjd!ddbdce_d]d^d ddd"ddbdce_dd.dddjd#ddbdce_dd.dddjd$ddbdce_dddddjd%ddbdce_dd	dddjd&ddbdce_dddd'd(d)ddbdce_d*d+dddjdddKdce_dddd,d-d.ddbdce_ddd	d	djd/ddbdce_dd	dddjd,ddKdce_dd	dddjd0ddbdce_dd	dddjd1ddbdce_dddddjd2ddbdce_dd	dddjd3ddbdce_dddddjd4ddbdce_dxdyd	dzdzd5ddbdce_d]d^dnd6d7d8ddbdce_ddd	d	djd9ddbdce_dd	dddjd:ddbdce_d]d^d ddd;ddbdce_dddddjd<ddbdce_dddddjdddKdce_dxdyd	dzdzd=ddbdce_d]d^dnd6d7d>ddbdce_ddd	d	djd?ddbdce_dd	dddjd@ddbdce_d]d^d dddAddbdce_dddddjdBddbdce_dddddjd'ddKdce_dxdyd	dzdzdCddbdce_d]d^dnd6d7dDddbdce_ddd	d	djdEddbdce_dd	dddjdFddbdce_d]d^d dddGddbdce_dddddjdHddbdce_dxdyd	dzdzdddKdce_d]d^dnd6d7dIddbdce_ddd	d	djdJddbdce_dd	dddjdKddbdce_ddd d djdLddbdcZddMdN Zee_d]d^d ddd eejjdbdce_dddddjdddbdcgZfG dOdP dPeZgG dQdR dRejBZhG dSdT dTeZiG dUdV dVejBZjG dWdX dXejZkedYk
rel  dS dS (\      )captured_stdout)BytecodeTestCaseNc                  C   s$   dd } |  }|j r|j }|j s
|S )Nc               
   S   s<   zdd  W |S  t y }  z
| j}W Y d } ~ |S d } ~ ww N   r   )	Exception__traceback__)etb r
   7/opt/python-3.10.19/usr/lib/python3.10/test/test_dis.py_error   s   
zget_tb.<locals>._error)tb_next)r   r	   r
   r
   r   get_tb   s   r   c                   @   s,   e Zd Zdd Zedd Zedd ZdS )_Cc                 C      |dk| _ d S Nr   x)selfr   r
   r
   r   __init__      z_C.__init__c                 C   s   | dk} d S r   r
   r   r
   r
   r   sm    s   z_C.smc                 C   r   r   r   )clsr   r
   r
   r   cm$   s   z_C.cmN)__name__
__module____qualname__r   staticmethodr   classmethodr   r
   r
   r
   r   r      s    
r   a>  %3d           0 LOAD_FAST                1 (x)
              2 LOAD_CONST               1 (1)
              4 COMPARE_OP               2 (==)
              6 LOAD_FAST                0 (self)
              8 STORE_ATTR               0 (x)
             10 LOAD_CONST               0 (None)
             12 RETURN_VALUE
r   a            0 LOAD_FAST                1 (1)
          2 LOAD_CONST               1 (1)
          4 COMPARE_OP               2 (==)
          6 LOAD_FAST                0 (0)
          8 STORE_ATTR               0 (0)
         10 LOAD_CONST               0 (0)
         12 RETURN_VALUE
a=  %3d           0 LOAD_FAST                1 (x)
              2 LOAD_CONST               1 (1)
              4 COMPARE_OP               2 (==)
              6 LOAD_FAST                0 (cls)
              8 STORE_ATTR               0 (x)
             10 LOAD_CONST               0 (None)
             12 RETURN_VALUE
   a  %3d           0 LOAD_FAST                0 (x)
              2 LOAD_CONST               1 (1)
              4 COMPARE_OP               2 (==)
              6 STORE_FAST               0 (x)
              8 LOAD_CONST               0 (None)
             10 RETURN_VALUE
zBDisassembly of %s:
%s
Disassembly of %s:
%s
Disassembly of %s:
%s
c                 C   s   t |  dS r   print)ar
   r
   r   _f[   s   r#   z%3d           0 LOAD_GLOBAL              0 (print)
              2 LOAD_FAST                0 (a)
              4 CALL_FUNCTION            1
              6 POP_TOP

%3d           8 LOAD_CONST               1 (1)
             10 RETURN_VALUE
z          0 LOAD_GLOBAL              0 (0)
          2 LOAD_FAST                0 (0)
          4 CALL_FUNCTION            1
          6 POP_TOP
          8 LOAD_CONST               1 (1)
         10 RETURN_VALUE
c                  C   s   t ddD ]} qd S )Nr   
   )range)resr
   r
   r   	bug708901u   s
   r'   a  %3d           0 LOAD_GLOBAL              0 (range)
              2 LOAD_CONST               1 (1)

%3d           4 LOAD_CONST               2 (10)

%3d           6 CALL_FUNCTION            2
              8 GET_ITER
        >>   10 FOR_ITER                 2 (to 16)
             12 STORE_FAST               0 (res)

%3d          14 JUMP_ABSOLUTE            5 (to 10)

%3d     >>   16 LOAD_CONST               0 (None)
             18 RETURN_VALUE
   c                 C   s   J dd | D d )Nr   c                 S   s   g | ]}|qS r
   r
   ).0sr
   r
   r   
<listcomp>   s    zbug1333982.<locals>.<listcomp>r   r
   r   r
   r
   r   
bug1333982   s   r,   a  %3d           0 LOAD_ASSERTION_ERROR
              2 LOAD_CONST               2 (<code object <listcomp> at 0x..., file "%s", line %d>)
              4 LOAD_CONST               3 ('bug1333982.<locals>.<listcomp>')
              6 MAKE_FUNCTION            0
              8 LOAD_FAST                0 (x)
             10 GET_ITER
             12 CALL_FUNCTION            1

%3d          14 LOAD_CONST               4 (1)

%3d          16 BINARY_ADD
             18 CALL_FUNCTION            1
             20 RAISE_VARARGS            1
c                   C      d S Nr
   r
   r
   r
   r   bug42562   s   r/   s   )co_linetablezG          0 LOAD_CONST               0 (None)
          2 RETURN_VALUE
)
   r   	      r1   r   d   )   S   r   z          0 EXTENDED_ARG             1
          2 NOP
          4 EXTENDED_ARG             1
          6 LOAD_CONST             297 (297)
          8 RETURN_VALUE
z%3d           0 LOAD_GLOBAL              0 (spam)
              2 POP_TOP
              4 LOAD_CONST               0 (None)
              6 RETURN_VALUE
z%4d           0 LOAD_GLOBAL              0 (spam)
               2 POP_TOP
               4 LOAD_CONST               0 (None)
               6 RETURN_VALUE
zDisassembly of f:
  4           0 LOAD_CONST               0 (None)
              2 RETURN_VALUE

Disassembly of g:
  5           0 LOAD_CONST               0 (None)
              2 RETURN_VALUE

zx + 1z  1           0 LOAD_NAME                0 (x)
              2 LOAD_CONST               0 (1)
              4 BINARY_ADD
              6 RETURN_VALUE
	x = x + 1z  1           0 LOAD_NAME                0 (x)
              2 LOAD_CONST               0 (1)
              4 BINARY_ADD
              6 STORE_NAME               0 (x)
              8 LOAD_CONST               1 (None)
             10 RETURN_VALUE
z+
x: int = 1
y: fun(1)
lst[fun(0)]: int = 1
a    2           0 SETUP_ANNOTATIONS
              2 LOAD_CONST               0 (1)
              4 STORE_NAME               0 (x)
              6 LOAD_NAME                1 (int)
              8 LOAD_NAME                2 (__annotations__)
             10 LOAD_CONST               1 ('x')
             12 STORE_SUBSCR

  3          14 LOAD_NAME                3 (fun)
             16 LOAD_CONST               0 (1)
             18 CALL_FUNCTION            1
             20 LOAD_NAME                2 (__annotations__)
             22 LOAD_CONST               2 ('y')
             24 STORE_SUBSCR

  4          26 LOAD_CONST               0 (1)
             28 LOAD_NAME                4 (lst)
             30 LOAD_NAME                3 (fun)
             32 LOAD_CONST               3 (0)
             34 CALL_FUNCTION            1
             36 STORE_SUBSCR
             38 LOAD_NAME                1 (int)
             40 POP_TOP
             42 LOAD_CONST               4 (None)
             44 RETURN_VALUE
zx = 0
while 1:
    x += 1aP    1           0 LOAD_CONST               0 (0)
              2 STORE_NAME               0 (x)

  2           4 NOP

  3     >>    6 LOAD_NAME                0 (x)
              8 LOAD_CONST               1 (1)
             10 INPLACE_ADD
             12 STORE_NAME               0 (x)

  2          14 JUMP_ABSOLUTE            3 (to 6)
a  %3d           0 SETUP_FINALLY            7 (to 16)

%3d           2 LOAD_CONST               1 (1)
              4 LOAD_CONST               2 (0)
    -->       6 BINARY_TRUE_DIVIDE
              8 POP_TOP
             10 POP_BLOCK

%3d          12 LOAD_FAST                1 (tb)
             14 RETURN_VALUE

%3d     >>   16 DUP_TOP
             18 LOAD_GLOBAL              0 (Exception)
             20 JUMP_IF_NOT_EXC_MATCH    29 (to 58)
             22 POP_TOP
             24 STORE_FAST               0 (e)
             26 POP_TOP
             28 SETUP_FINALLY           10 (to 50)

%3d          30 LOAD_FAST                0 (e)
             32 LOAD_ATTR                1 (__traceback__)
             34 STORE_FAST               1 (tb)
             36 POP_BLOCK
             38 POP_EXCEPT
             40 LOAD_CONST               0 (None)
             42 STORE_FAST               0 (e)
             44 DELETE_FAST              0 (e)

%3d          46 LOAD_FAST                1 (tb)
             48 RETURN_VALUE
        >>   50 LOAD_CONST               0 (None)
             52 STORE_FAST               0 (e)
             54 DELETE_FAST              0 (e)
             56 RERAISE                  1

%3d     >>   58 RERAISE                  0
      c                 C   s   |  d|dd|d|dS )N 4r
   r"   bcdr
   r
   r   _fstringZ  s   r@   a  %3d           0 LOAD_FAST                0 (a)
              2 FORMAT_VALUE             0
              4 LOAD_CONST               1 (' ')
              6 LOAD_FAST                1 (b)
              8 LOAD_CONST               2 ('4')
             10 FORMAT_VALUE             4 (with format)
             12 LOAD_CONST               1 (' ')
             14 LOAD_FAST                2 (c)
             16 FORMAT_VALUE             2 (repr)
             18 LOAD_CONST               1 (' ')
             20 LOAD_FAST                3 (d)
             22 LOAD_CONST               2 ('4')
             24 FORMAT_VALUE             6 (repr, with format)
             26 BUILD_STRING             7
             28 RETURN_VALUE
c                 C   s   z| W |  S |  w r.   r
   r"   r=   r
   r
   r   _tryfinallyo  s   rB   c                 C   s   zW |   dS |   w r   r
   )r=   r
   r
   r   _tryfinallyconstu  s   rC   a  %3d           0 SETUP_FINALLY            6 (to 14)

%3d           2 LOAD_FAST                0 (a)
              4 POP_BLOCK

%3d           6 LOAD_FAST                1 (b)
              8 CALL_FUNCTION            0
             10 POP_TOP
             12 RETURN_VALUE
        >>   14 LOAD_FAST                1 (b)
             16 CALL_FUNCTION            0
             18 POP_TOP
             20 RERAISE                  0
a  %3d           0 SETUP_FINALLY            6 (to 14)

%3d           2 POP_BLOCK

%3d           4 LOAD_FAST                0 (b)
              6 CALL_FUNCTION            0
              8 POP_TOP
             10 LOAD_CONST               1 (1)
             12 RETURN_VALUE
        >>   14 LOAD_FAST                0 (b)
             16 CALL_FUNCTION            0
             18 POP_TOP
             20 RERAISE                  0
c                 c   s    | V  d S r.   r
   r   r
   r
   r   _g     
rD   c                 C  s   | V  d S r.   r
   r   r
   r
   r   _ag  rE   rF   c                    s   t | 2 z3 d H W }q6 d S r.   )rF   )r   itemr
   r
   r   _co  s   rH   c                    s    fdd}|S )Nc                    s    fddD S )Zfuncdocc                    s   g | ]} | qS r
   r
   )r)   zr   r
   r   r+     s    z#_h.<locals>.foo.<locals>.<listcomp>r
   r   yr   r   foo  s   z_h.<locals>.foor
   )rK   rL   r
   rJ   r   _h  s   rM   a  %3d           0 LOAD_CLOSURE             0 (y)
              2 BUILD_TUPLE              1
              4 LOAD_CONST               1 (<code object foo at 0x..., file "%s", line %d>)
              6 LOAD_CONST               2 ('_h.<locals>.foo')
              8 MAKE_FUNCTION            8 (closure)
             10 STORE_FAST               1 (foo)

%3d          12 LOAD_FAST                1 (foo)
             14 RETURN_VALUE
a  %s
Disassembly of <code object foo at 0x..., file "%s", line %d>:
%3d           0 LOAD_CLOSURE             0 (x)
              2 BUILD_TUPLE              1
              4 LOAD_CONST               1 (<code object <listcomp> at 0x..., file "%s", line %d>)
              6 LOAD_CONST               2 ('_h.<locals>.foo.<locals>.<listcomp>')
              8 MAKE_FUNCTION            8 (closure)
             10 LOAD_DEREF               1 (y)
             12 GET_ITER
             14 CALL_FUNCTION            1
             16 RETURN_VALUE
a  %s
Disassembly of <code object <listcomp> at 0x..., file "%s", line %d>:
%3d           0 BUILD_LIST               0
              2 LOAD_FAST                0 (.0)
        >>    4 FOR_ITER                 6 (to 18)
              6 STORE_FAST               1 (z)
              8 LOAD_DEREF               0 (x)
             10 LOAD_FAST                1 (z)
             12 BINARY_ADD
             14 LIST_APPEND              2
             16 JUMP_ABSOLUTE            2 (to 4)
        >>   18 RETURN_VALUE
c                   @   s  e Zd ZdZdBddZdCddZdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Z d>d? Z!d@dA Z"dS )DDisTestsNTc                 K   s   t  }t|+ |rtj|fi | ntj||fi | W d    | S W d    | S 1 s7w   Y  | S r.   )ioStringIO
contextlibredirect_stdoutdisdisassemblegetvaluer   funclastiwrapperkwargsoutputr
   r
   r   get_disassembly  s   

zDisTests.get_disassemblyc                 C   s   |  ||dS )NF)r]   )r   rX   rY   r
   r
   r   get_disassemble_as_string  r   z"DisTests.get_disassemble_as_stringc                 C   s   t dd|S )Nz\b0x[0-9A-Fa-f]+\bz0x...)resub)r   textr
   r
   r   strip_addresses  r   zDisTests.strip_addressesc                 C   s0   | j |dd}||kr| |}| || d S )Nr   depth)r]   rb   assertEqual)r   rX   expectedZgotr
   r
   r   do_disassembly_test  s   
zDisTests.do_disassembly_testc                 C   s>   |  tjd d | tjd tj | tjd tj d S )NZNOPr2   
LOAD_CONST
STORE_NAME)re   rT   opmapZassertInZhasconstZhasnamer   r
   r
   r   
test_opmap  s   zDisTests.test_opmapc                 C   s   |  tjtjd  d d S )N	LOAD_FAST)re   rT   opnamerj   rk   r
   r
   r   test_opname     zDisTests.test_opnamec                 C   s,   |  tjd tj |  tjd tj d S )NEXTENDED_ARGri   )re   rT   rj   rq   HAVE_ARGUMENTrk   r
   r
   r   test_boundaries	  s   zDisTests.test_boundariesc              	   C   s|   t tjD ]6\}}|dv rq| j|d tj}|tjk r$|dtj 7 }| t|| W d    n1 s6w   Y  qd S )N)ZBUILD_MAP_UNPACK_WITH_CALLZBUILD_TUPLE_UNPACK_WITH_CALLJUMP_IF_NOT_EXC_MATCH)rn   r   )		enumeraterT   rn   subTestZ_OPNAME_WIDTHrr   Z_OPARG_WIDTHZassertLessEquallen)r   opcodern   widthr
   r
   r   test_widths  s   
zDisTests.test_widthsc                 C      |  tt d S r.   )rg   r#   dis_frk   r
   r
   r   test_dis     zDisTests.test_disc                 C   r{   r.   )rg   r'   dis_bug708901rk   r
   r
   r   test_bug_708901  r~   zDisTests.test_bug_708901c                 C   s   	 | tt d S r.   )ZskipTestrg   r,   dis_bug1333982rk   r
   r
   r   test_bug_1333982  s   zDisTests.test_bug_1333982c                 C   r{   r.   )rg   r/   dis_bug42562rk   r
   r
   r   test_bug_42562'  r~   zDisTests.test_bug_42562c                 C   r{   r.   )rg   code_bug_45757dis_bug_45757rk   r
   r
   r   test_bug_45757*  s   zDisTests.test_bug_45757c                 C   s   dd }t ddD ]}t|d  }| ||| q	t dddD ]}t|d  }| ||| q t dddD ]}t|d  }| ||| q7d	d
lm} | |t d S )Nc                 S   s0   i }dd dg|  dg  }t|| |d S )Nzdef foo():
  z
 zspam
rL   joinexeccount	namespacerX   r
   r
   r   rX   /  s   
z'DisTests.test_big_linenos.<locals>.funcr   i,  r     r$   i  r   )
dis_module)r%   _BIG_LINENO_FORMATrg   _BIG_LINENO_FORMAT2testr   dis_module_expected_results)r   rX   irf   r   r
   r
   r   test_big_linenos.  s   zDisTests.test_big_linenosc                 C   sf   dd }dd }t ddD ]}| ||||d q| |d|dd | |d	|d	d d S )
Nc                 S   s.   i }dd dg|   d }t|| |d S )Nzdef foo(x):
 ;r7   z

 return xrL   r   r   r
   r
   r   rX   G  s   
z'DisTests.test_big_offsets.<locals>.funcc                    sZ    fddt | D }|d d|   d|  d f g7 }d|d dd   |d< d	|S )
Nc                    s@   g | ]}d  d|  d| d  d| d  d| d f qS )z           %*d LOAD_FAST                0 (x)
           %*d LOAD_CONST               1 (1)
           %*d BINARY_ADD
           %*d STORE_FAST               0 (x)
   r   r9      r
   )r)   r   wr
   r   r+   N  s
    .z?DisTests.test_big_offsets.<locals>.expected.<locals>.<listcomp>zK
  3        %*d LOAD_FAST                0 (x)
           %*d RETURN_VALUE
r   r   z  2r   r(   r   )r%   r   )r   r   r*   r
   r   r   rf   M  s   

z+DisTests.test_big_offsets.<locals>.expectedr   r8   r9   i  i  )r%   rg   )r   rX   rf   r   r
   r
   r   test_big_offsetsF  s   zDisTests.test_big_offsetsc                 C   s4   |  tt |  tt |  tt |  tt d S r.   )	rg   expr_strdis_expr_strsimple_stmt_strdis_simple_stmt_strannot_stmt_strdis_annot_stmt_strcompound_stmt_strdis_compound_stmt_strrk   r
   r
   r   test_disassemble_strb  s   zDisTests.test_disassemble_strc                 C   s   |  tjjt d S r.   )rg   r#   __code__co_codedis_f_co_coderk   r
   r
   r   test_disassemble_bytesh  s   zDisTests.test_disassemble_bytesc                 C   r{   r.   )rg   r   dis_crk   r
   r
   r   test_disassemble_classk  r~   zDisTests.test_disassemble_classc                 C   s   |  tdjt d S r   )rg   r   r   dis_c_instance_methodrk   r
   r
   r    test_disassemble_instance_methodn     z)DisTests.test_disassemble_instance_methodc                 C   s   t djjj}| |t d S r   )r   r   r   r   rg   dis_c_instance_method_bytes)r   Zmethod_bytecoder
   r
   r   &test_disassemble_instance_method_bytesq     z/DisTests.test_disassemble_instance_method_bytesc                 C      |  tjt d S r.   )rg   r   r   dis_c_static_methodrk   r
   r
   r   test_disassemble_static_methodu     z'DisTests.test_disassemble_static_methodc                 C   r   r.   )rg   r   r   dis_c_class_methodrk   r
   r
   r   test_disassemble_class_methodx  r   z&DisTests.test_disassemble_class_methodc                 C   (   |  t}|  td}| || d S r   )r]   rD   re   )r   Zgen_func_disasZ	gen_disasr
   r
   r   test_disassemble_generator{     
z#DisTests.test_disassemble_generatorc                 C   r   r   )r]   rF   re   )r   Zagen_func_disasZ
agen_disasr
   r
   r    test_disassemble_async_generator  r   z)DisTests.test_disassemble_async_generatorc                 C   s4   |  t}td}|  |  |}| || d S r   )r]   rH   closere   )r   Zcoro_func_disascoroZ
coro_disasr
   r
   r   test_disassemble_coroutine  s
   

z#DisTests.test_disassemble_coroutinec                 C   r{   r.   )rg   r@   dis_fstringrk   r
   r
   r   test_disassemble_fstring  r~   z!DisTests.test_disassemble_fstringc                 C   s   |  tt |  tt d S r.   )rg   rB   dis_tryfinallyrC   dis_tryfinallyconstrk   r
   r
   r   test_disassemble_try_finally  s   z%DisTests.test_disassemble_try_finallyc                 C   s0   zt `W n	 ty   Y nw | ttjd  d S r.   )syslast_tracebackAttributeErrorassertRaisesRuntimeErrorrT   rk   r
   r
   r   test_dis_none  s   zDisTests.test_dis_nonec              
   C   s|   zt `W n	 ty   Y nw zdd  W n ty, } z|j}|t _W Y d }~nd }~ww | |jj|j}| 	d | d S r   )
r   r   r   r   r   r^   tb_framef_codetb_lastirg   )r   r   r	   Ztb_disr
   r
   r   test_dis_traceback  s   zDisTests.test_dis_tracebackc                 C   s   |  ttjt  d S r.   )r   	TypeErrorrT   objectrk   r
   r
   r   test_dis_object  r   zDisTests.test_dis_objectc                    sT    fdd}|t dd |tdd |tdd |tdd |td d |t d S )Nc                    s,    j tfi |} |} ||  d S r.   )r]   rM   rb   re   )rf   r[   rT   rk   r
   r   check  s   
z2DisTests.test_disassemble_recursive.<locals>.checkr   rc   r   r   r(   )dis_nested_0dis_nested_1dis_nested_2)r   r   r
   rk   r   test_disassemble_recursive  s   z#DisTests.test_disassemble_recursiverO   T)rO   )#r   r   r   maxDiffr]   r^   rb   rg   rl   ro   rs   rz   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   rN     sB    


rN   c                   @   s   e Zd ZdddZdS )DisWithFileTestsrO   Tc                 K   sJ   t  }|rtj|fd|i| | S tj||fd|i| | S )Nfile)rP   rQ   rT   rU   rV   rW   r
   r
   r   r]     s   z DisWithFileTests.get_disassemblyNr   r   r   r   r]   r
   r
   r
   r   r     s    r   z0: Nonez60: 'Formatted details of methods, functions, or code.'zName:              code_info
Filename:          (.*)
Argument count:    1
Positional-only arguments: 0
Kw-only arguments: 0
Number of locals:  1
Stack size:        3
Flags:             OPTIMIZED, NEWLOCALS, NOFREE
Constants:
   zN
Names:
   0: _format_code_info
   1: _get_code_object
Variable names:
   0: xT)r   c         
   	   /   s<    |f fdd	 |f	V  d S )Nc              
      s   t  | 	 d S r.   r    )r>   r"   r=   r?   r   fr   rK   rI   r
   r   r     rp   ztricky.<locals>.fr
   )
r"   r=   r   rK   rI   r>   r?   r   argskwdsr
   r   r   tricky  s   r   a.  Name:              tricky
Filename:          (.*)
Argument count:    5
Positional-only arguments: 2
Kw-only arguments: 3
Number of locals:  10
Stack size:        9
Flags:             OPTIMIZED, NEWLOCALS, VARARGS, VARKEYWORDS, GENERATOR
Constants:
   0: None
   1: <code object f at (.*), file "(.*)", line (.*)>
   2: 'tricky.<locals>.f'
Variable names:
   0: a
   1: b
   2: x
   3: y
   4: z
   5: c
   6: d
   7: e
   8: args
   9: kwds
Cell variables:
   0: [abedfxyz]
   1: [abedfxyz]
   2: [abedfxyz]
   3: [abedfxyz]
   4: [abedfxyz]
   5: [abedfxyz]ap  Filename:          (.*)
Argument count:    1
Positional-only arguments: 0
Kw-only arguments: 0
Number of locals:  1
Stack size:        10
Flags:             OPTIMIZED, NEWLOCALS, NESTED
Constants:
   0: None
Names:
   0: print
Variable names:
   0: c
Free variables:
   0: [abedfxyz]
   1: [abedfxyz]
   2: [abedfxyz]
   3: [abedfxyz]
   4: [abedfxyz]
   5: [abedfxyz]zName:              <module>
Filename:          <disassembly>
Argument count:    0
Positional-only arguments: 0
Kw-only arguments: 0
Number of locals:  0
Stack size:        2
Flags:             NOFREE
Constants:
   0: 1
Names:
   0: xzName:              <module>
Filename:          <disassembly>
Argument count:    0
Positional-only arguments: 0
Kw-only arguments: 0
Number of locals:  0
Stack size:        2
Flags:             NOFREE
Constants:
   0: 1
   1: None
Names:
   0: xzName:              <module>
Filename:          <disassembly>
Argument count:    0
Positional-only arguments: 0
Kw-only arguments: 0
Number of locals:  0
Stack size:        2
Flags:             NOFREE
Constants:
   0: 0
   1: 1
Names:
   0: xc               	      s^   dI d H  t 2 z3 d H W } q6 t4 I d H }W d   I d H  d S 1 I d H s(w   Y  d S r   )r=   r>   )r"   r?   r
   r
   r   	async_defI  s   
>r   a5  Name:              async_def
Filename:          (.*)
Argument count:    0
Positional-only arguments: 0
Kw-only arguments: 0
Number of locals:  2
Stack size:        9
Flags:             OPTIMIZED, NEWLOCALS, NOFREE, COROUTINE
Constants:
   0: None
   1: 1
Names:
   0: b
   1: c
Variable names:
   0: a
   1: dc                   @   s\   e Zd Zejefeefee	fe
efeefeefeefgZdd Zdd Zdd Zdd Zd	S )
CodeInfoTestsc                 C   s,   d| _ | jD ]\}}| t|| qd S Nr   )r   
test_pairsassertRegexrT   	code_info)r   r   rf   r
   r
   r   test_code_infol  s   zCodeInfoTests.test_code_infoc              	   C   s   d| _ | jD ]9\}}t }t| W d    n1 sw   Y  | | |d  t }tj||d | | | qd S )Nr   
r   )	r   r   r   rT   Z	show_coder   rV   rP   rQ   )r   r   rf   r\   r
   r
   r   test_show_codeq  s   zCodeInfoTests.test_show_codec                 C   s   |  ttjt  d S r.   )r   r   rT   r   r   rk   r
   r
   r   test_code_info_object{  r   z#CodeInfoTests.test_code_info_objectc                 C   s   |  tdd d S )Nr   Z0x0)re   rT   Zpretty_flagsrk   r
   r
   r   test_pretty_flags_no_flags~  r   z(CodeInfoTests.test_pretty_flags_no_flagsN)r   r   r   rT   r   code_info_code_infor   code_info_trickyco_tricky_nested_fcode_info_tricky_nested_fr   code_info_expr_strr   code_info_simple_stmt_strr   code_info_compound_stmt_strr   code_info_async_defr   r   r   r   r   r
   r
   r
   r   r   a  s    

r   c                    s(   d fdd	}t  ddg i d |S )	Nr(   r9   c                    s&   d fdd	}t   |S )Nr8   r   c                    s   t  | | d S r.   r    )r   r   r<   r
   r   inner  r   outer.<locals>.f.<locals>.innerr8   r   r    )r>   r?   r   rA   )r>   r?   r   r     s   outer.<locals>.fr   r   Hello world!r(   r9   r    )r"   r=   r   r
   rA   r   outer  s   r   c                  C   s   t dD ]} t|  | dk rq| dkr nqtd | r0t|  | d8 } | dkr)q| dk r.n| std z?zdd  W n tyH   td Y nw | }td	 W d    n1 sZw   Y  W td
 d S W td
 d S W td
 d S td
 w )Nr$   r9   r   I can haz else clause?r   %Who let lolcatz into this test suite?r   %Here we go, here we go, here we go...Never reach thisOK, now we're done)r%   r!   ZeroDivisionError)r   dodgyr
   r
   r   jumpy  s<   
r  rh   r4   r   r   z(3, 4)F)rn   rx   argZargvalZargreproffsetZstarts_lineZis_jump_targetZLOAD_CLOSURE   r"   r=   ZBUILD_TUPLEf   r   r   r   z'outer.<locals>.f'r$   ZMAKE_FUNCTION   r2   zdefaults, closure   Z
STORE_FAST}   r      ZLOAD_GLOBALt   r!         Z
LOAD_DEREF         z''   1   Z
BUILD_LISTg      Z	BUILD_MAPi      r   z'Hello world!'   ZCALL_FUNCTION       ZPOP_TOP"   rm   |   $   ZRETURN_VALUEr6   &   r   z(5, 6)r>   r?   r   z!'outer.<locals>.f.<locals>.inner'r   r   Noner%   Z10ZGET_ITERD   ZFOR_ITER]      ,   zto 44r   r;   Z
COMPARE_OPk   <ZPOP_JUMP_IF_FALSEr      zto 30ZJUMP_ABSOLUTEq   zto 86>   *   zto 42ZJUMP_FORWARDn   4   zto 52(   r   z'I can haz else clause?'.   0   2      `   zto 966   8   :   <   >   @      B   ZINPLACE_SUBTRACTF   H   J   L   r5   R   zto 82N   P   T   V   \   zto 92X   h   zto 104Z   ZPOP_JUMP_IF_TRUEs   zto 56^      r   z''Who let lolcatz into this test suite?'b   ZSETUP_FINALLYz   ?      zto 232x   zto 120j   l   0ZBINARY_TRUE_DIVIDE   p   Z	POP_BLOCKW      zto 146v   ZDUP_TOPr   rt   y   r1   zto 144~            r   z''Here we go, here we go, here we go...'      Z
POP_EXCEPTY         zto 204   ZRERAISEw      Z
SETUP_WITH      zto 174   r        r   z'Never reach this'                              zto 218   ZWITH_EXCEPT_START1      zto 180                        r   z"OK, now we're done"                                                               c                   C   r-   r.   r
   r
   r
   r
   r   simple  s    r  c                       sL   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	  Z
S )InstructionTestsc                    s   t  j|  d | _d S r.   )superr   r   )r   r   	__class__r
   r   r     s   
zInstructionTests.__init__c                 C   s   t t}| t|t d S r.   rT   get_instructionsr  re   listexpected_opinfo_simpler   actualr
   r
   r   test_default_first_line  s   
z(InstructionTests.test_default_first_linec                 C   s"   t jtd d}| t|t d S NZ
first_liner  r  r
   r
   r   test_first_line_set_to_None     z,InstructionTests.test_first_line_set_to_Nonec                 C   "   t jttd}| t|t d S r  )rT   r  r   expected_outer_linere   r  expected_opinfo_outerr  r
   r
   r   
test_outer  r  zInstructionTests.test_outerc                 C   sN   t   t }W d    n1 sw   Y  tj|td}| t|t d S r  )r   r   rT   r  expected_f_linere   r  expected_opinfo_f)r   r   r  r
   r
   r   test_nested  s
   zInstructionTests.test_nestedc                 C   sP   t   t  }W d    n1 sw   Y  tj|td}| t|t d S r  )r   r   rT   r  expected_inner_linere   r  expected_opinfo_inner)r   r   r  r
   r
   r   test_doubly_nested  s
   
z#InstructionTests.test_doubly_nestedc                 C   r  r  )rT   r  r  expected_jumpy_linere   r  expected_opinfo_jumpyr  r
   r
   r   
test_jumpy  r  zInstructionTests.test_jumpy)r   r   r   r   r  r  r  r  r  r  __classcell__r
   r
   r  r   r    s    r  c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )BytecodeTestsc              	   C   sv   t tdjdt jfD ]%}| j|d t|}| |jt	j
 W d    n1 s*w   Y  q
| ttjt  d S Nr   za=1)obj)r#   r   r   r   rv   rT   BytecodeZassertIsInstanceZcodeobjtypesCodeTyper   r   r   )r   r  r=   r
   r
   r   test_instantiation  s   
z BytecodeTests.test_instantiationc              	   C   sr   t tdjdt jfD ],}| j|d tt|}tt|}| 	|| W d    n1 s1w   Y  q
d S r  )
r#   r   r   r   rv   r  rT   r  r  re   )r   r  Z
via_objectZvia_generatorr
   r
   r   test_iteration  s   zBytecodeTests.test_iterationc                 C   r  r  )rT   r  r   r  re   r  r  r  r
   r
   r   test_explicit_first_line  r  z&BytecodeTests.test_explicit_first_linec                 C   sl   t t  }| dd }ttjj}| || t jtdd  }| dd }| |d d S )Nr:   r   i^  r  Z350)	rT   r  r  strip	partitionstrr   co_firstlinenore   )r   r  rf   r
   r
   r   test_source_line_in_disassembly  s   z-BytecodeTests.test_source_line_in_disassemblyc                 C   s4   d| _ tjD ]\}}t|}| | | qd S r   )r   r   r   rT   r  r   info)r   r   rf   r=   r
   r
   r   	test_info  s
   
zBytecodeTests.test_infoc                 C   s   t t  }| |t d S r.   )rT   r  r#   re   r|   r  r
   r
   r   test_disassembled  r   zBytecodeTests.test_disassembledc                 C   s8   t  }tj|}|jr|j}|js| |j|j d S r.   )r   rT   r  from_tracebackr   re   Zcurrent_offsetr   r   r	   r=   r
   r
   r   test_from_traceback  s   z!BytecodeTests.test_from_tracebackc                 C   s&   t  }tj|}| | t d S r.   )r   rT   r  r  re   dis_tracebackr  r
   r
   r   test_from_traceback_dis  s   z%BytecodeTests.test_from_traceback_disN)r   r   r   r  r  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 )TestBytecodeTestCasec                 C   s8   t ddd}| |dd | |d | |dd d S )Na = 1<string>r   rh   r   Z	LOAD_NAMEr"   compileZassertInBytecodeassertNotInBytecoder   coder
   r
   r   *test_assert_not_in_with_op_not_in_bytecode  s   z?TestBytecodeTestCase.test_assert_not_in_with_op_not_in_bytecodec                 C   s8   t ddd}| |d | |dd | |dd d S )Nr  r  r   rh   r   r   r  r  r
   r
   r   +test_assert_not_in_with_arg_not_in_bytecode  s   z@TestBytecodeTestCase.test_assert_not_in_with_arg_not_in_bytecodec                 C   sJ   t ddd}| t | |dd W d    d S 1 sw   Y  d S )Nr  r  r   rh   r   )r  r   AssertionErrorr  r  r
   r
   r   'test_assert_not_in_with_arg_in_bytecode  s   "z<TestBytecodeTestCase.test_assert_not_in_with_arg_in_bytecodeN)r   r   r   r  r  r  r
   r
   r
   r   r    s    r  c                       s>   e Zd Zd fddZdd Zdd Zd	d
 Zdd Z  ZS )TestDisTracebackreturnNc                    s&   zt `W n	 ty   Y nw t  S r.   )r   r   r   r  setUprk   r  r
   r   r    s   
zTestDisTraceback.setUpc                 C   sJ   t  }t| t| W d    | S 1 sw   Y  | S r.   rP   rQ   rR   rS   rT   distbrV   r   r	   r\   r
   r
   r   r]     s   
z TestDisTraceback.get_disassemblyc                 C   s8   |  t t  W d    d S 1 sw   Y  d S r.   )r   r   rT   r  rk   r
   r
   r   test_distb_empty  s   
"z!TestDisTraceback.test_distb_emptyc                 C   s"   t  }|t_| | d t d S r.   )r   r   r   re   r]   r  r   r	   r
   r
   r   test_distb_last_traceback  s   z*TestDisTraceback.test_distb_last_tracebackc                 C   s   t  }| | |t d S r.   )r   re   r]   r  r  r
   r
   r   test_distb_explicit_arg  s   z(TestDisTraceback.test_distb_explicit_arg)r  N)	r   r   r   r  r]   r  r  r  r  r
   r
   r  r   r    s    r  c                   @   s   e Zd Zdd ZdS )TestDisTracebackWithFilec                 C   sN   t  }t| tj||d W d    | S 1 sw   Y  | S )Nr   r  r  r
   r
   r   r]     s   
z(TestDisTracebackWithFile.get_disassemblyNr   r
   r
   r
   r   r    s    r  __main__)T)r   r   )mZtest.supportr   Ztest.support.bytecode_helperr   Zunittestr   rT   rP   r_   r  rR   r   r   r   ZTRACEBACK_CODEr   r   r   r  r   r   r   r   r   r   r   r   r#   r|   r   r'   r   r,   __file__r   r/   replacer   bytesr   r   r   r   r   r   r   r   r   r   r   r   r   r  r@   r   rB   rC   r   r   rD   rF   rH   rM   r   r   r   ZTestCaserN   r   r   __doc__Zcode_info_constsr   r   r   r   __func__	co_constsr   r   r   r   r   r   r   r   r   r  r  Z_line_offsetZcode_object_fr  Zcode_object_innerr  r  ZInstructionreprr  r  r  r  r  r  r  r  r  r  r  mainr
   r
   r
   r   <module>   s  
















	%-














 T
!#	


	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy}$8	