o
    g                     @   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%dZ&d Z'd!Z(d"Z)d#Z*d$Z+d%Z,d&Z-d'Z.d(Z/d)Z0d*ejd	 ejd ejd+ ejd ejd, ejd+ ejd f Z1d-d. Z2d/e2jjd	 f Z3d0d1 Z4d2d3 Z5d4e4jjd	 e4jjd e4jjd, f Z6d5e5jjd	 e5jjd e5jjd, f Z7d6d7 Z8d8d9 Z9d:d; Z:d<d= Z;d>e;jjd	 e!e;jjd	 e;jjd, f Z<d?e<e!e;jjd	 e;jjd e!e;jjd f Z=d@e=e!e;jjd e;jjd f Z>G dAdB dBej?Z@G dCdD dDe@ZAejBjCrdEZDndFZDdGeD dHZEeFdTg dJdKdLZGdMZHeGjIjjJd	 ZKdNZLdOZMdPZNdQZOdRdS ZPdTZQG dUdV dVej?ZRdUdWdXZSdYdZ ZTd	ZUeSjjd	 ZVeSjjJd ZWeWjeV ZXeWjJd ZYeYjeV ZZd	Z[ej\Z\e\d[d\d]d^d_d dd`dae\dbdcd ddddddd`dae\dbdcd	deded,dd`dae\dfdgdddhdidd`dae\d[d\deWe]eWd]dd`dae\d[d\d,djdkdldd`dae\dmdndododpdqdd`dae\drdsddtdtdudd`dae\dvdwd dxdxdydzd`dae\d{d|d ddddd}dd`dae\d{d|d	deded~dd`dae\d[d\d+dhdddd`dae\d[d\did	dddd`dae\ddd d dhddd`dae\ddd d dhddd`dae\d[d\dzddddd`dae\dddzdzdhddd`dae\dd	dddhddd`dae\ddddtdtdd]d`dae\dddddhddd`dagZ^e\d[d\d+ddd dd`dae\dbdcdddddddd`dae\dbdcddeded,dd`dae\dbdcd dddidd`dae\dbdcd	ddd]dd`dae\dfdgd,d,dhdldd`dae\d[d\deYe]eYdqdd`dae\d[d\d,dddudd`dae\dmdndododpdydd`dae\drdsdddd}dd`dae\dvdwd dxdxd~d+d`dae\d{d|dddddddd`dae\d{d|ddededdd`dae\d{d|d ddddd`dae\d{d|d	ddddd`dae\ddd,d,dhddd`dae\dd	dddhddd`dae\dddddddid`dae\dddddhddd`dagZ_e\dvdwd dxdxd d,d`dae\d{d|d ddddddd`dae\d{d|d	deded,dd`dae\d{d|ddddidd`dae\d{d|dddd]dd`dae\ddd dddldd`dae\ddd	dtdtdqdd`dae\dddididhdudd`dae\dd	dddhdydd`dae\d[d\d ddd}dd`dae\dddddhd~dd`dagZ`g e\dvdwd ddd dd`dae\d[d\d	dldddd`dae\ddd	d	dhd,dd`dae\dddddhdidd`dae\dddddd]ddIdae\drdsd dddldd`dae\dvdwd	dxdxdqd,d`dae\ddd dddudd`dae\ddd	d	dhdydd`dae\dd	dddhd}dd`dae\ddd ddd~d+d`dae\d[d\dd,dddd`dae\ddd ddddd`dae\dddddddd`dae\ddd,d]dddid`dae\ddd ddddzdIdae\d[d\ddidddd`dae\ddd,ddddd`dae\dddddddd`dae\dd	dddhdd]d`dae\dddddddd`dae\ddd,d]dddzdIdae\dvdwd	dxdxddldIdae\d[d\d,ddddd`dae\ddd	d	dhddd`dae\dd	dddhddd`dae\ddd dddddIdae\dddddddd`dae\dvdwd	dxdxddqdIdae\ddd ddddd`dae\ddd	d	dhddd`dae\dd	dddhddd`dae\ddd ddddd`dae\d[d\d+d	dddd`dae\dddddhddd`dae\drdsd ddddd`dae\ddd ddddud`dae\d[d\ddidddd`dae\ddd,ddddd`dae\dddddddd`dae\dddddddd`dae\ddd ddddydIdae\d[d\dd,dddd`dae\ddd ddddd`dae\dddddddd`dae\dddddddd`dae\ddd dddddIdae\dddddddd`dae\dvdwd	dxdxdddIdae\d[d\diddddd`dae\ddd	d	dhd\dd`dae\dd	dddhdgdd`dae\ddddddd~dIdae\dddiddddd`dae\d[d\d+d	dddd`dae\d[d\dzd dddd`dae\dddddhddd`dae\dd	dddhddd`dae\dddddhdwdd`dae\dddddddd`dae\dd,dddhdddIdae\dvdwdddddd`dae\ddddd ddd`dae\dd	dddhddd`dae\dd	dddhddd`dae\dd	dddhddd`dae\dvdwd	dxdxdndd`dae\d[d\d]ddddd`dae\ddd	d	dhd|dd`dae\dd	dddhddd`dae\d	d
dddhddd`dae\dddddddd`dae\ddd d dhdddIdae\ddd dddddIdae\dddqddddd`dae\drdsd	ddddd`dae\dvdwd	dxdxddd`dae\d[d\doddddd`dae\ddd	d	dhddd`dae\dd	dddhddd`dae\dddddhddd`dae\d[d\d ddd dd`dae\dd,dddhd!dd`dae\dd,dddhd"dd`dae\dddddhd#dd`dae\dd	dddhd$dd`dae\dddd%d&d'dd`dae\d(d)dddhdddIdae\dddސd*d+d,dd`dae\ddd	d	dhd-dd`dae\dd	dddhd*ddIdae\dd	dddhd.dd`dae\dd	dddhd/dd`dae\d	d
dddhd0dd`dae\dd	dddhd1dd`dae\dddddhd2dd`dae\dvdwd	dxdxd3dd`dae\d[d\dld4d5d6dd`dae\ddd	d	dhd7dd`dae\dd	dddhd8dd`dae\d[d\d ddd9dd`dae\dddddhd:dd`dae\dddddhdddIdae\dvdwd	dxdxd;dd`dae\d[d\dld4d5d<dd`dae\ddd	d	dhd=dd`dae\dd	dddhd>dd`dae\d[d\d ddd?dd`dae\dddddhd@dd`dae\dddddhd%ddIdae\dvdwd	dxdxdAdd`dae\d[d\dld4d5dBdd`dae\ddd	d	dhdCdd`dae\dd	dddhdDdd`dae\d[d\d dddEdd`dae\dddddhdFdd`dae\dvdwd	dxdxdddIdae\d[d\dld4d5dGdd`dae\ddd	d	dhdHdd`dae\dd	dddhdIdd`dae\ddd d dhdJdd`daZadKdL Zbe\d[d\d ddd ebjjd`dae\dddddhddd`dagZcG dMdN dNeZdG dOdP dPej?ZeG dQdR dReZfedSk
reg  dS dS (V      )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
   C/Users/admin/.pyenv/versions/3.10.0/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      d S Nr
   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   r)   r*   r
   r
   r
   r
   r   bug42562   s   r,   s   )co_linetablezG          0 LOAD_CONST               0 (None)
          2 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   _fstringI  s   r7   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"   r4   r
   r
   r   _tryfinally^  s   r9   c                 C   s   zW |   dS |   w r   r
   )r4   r
   r
   r   _tryfinallyconstd  s   r:   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     
r;   c                 C  s   | V  d S r*   r
   r   r
   r
   r   _ag  r<   r=   c                    s   t | 2 z3 d H W }q6 d S r*   )r=   )r   itemr
   r
   r   _co  s   r?   c                    s    fdd}|S )Nc                    s    fddD S )Zfuncdocc                    s   g | ]} | qS r
   r
   ).0zr   r
   r   
<listcomp>  s    z#_h.<locals>.foo.<locals>.<listcomp>Nr
   r   yr   r   foo  s   z_h.<locals>.foor
   )rD   rE   r
   rC   r   _h  s   rF   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d@ddZdAd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S )B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)rV   )r   rQ   rR   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   Zdepth)rV   r[   assertEqual)r   rQ   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NOP	   
LOAD_CONST
STORE_NAME)r]   rM   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)r]   rM   opnamerc   rd   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_ARGrb   )r]   rM   rc   rj   HAVE_ARGUMENTrd   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    q1 s6w   Y  qd S )N)ZBUILD_MAP_UNPACK_WITH_CALLZBUILD_TUPLE_UNPACK_WITH_CALLJUMP_IF_NOT_EXC_MATCH)rg   r   )		enumeraterM   rg   subTestZ_OPNAME_WIDTHrk   Z_OPARG_WIDTHZassertLessEquallen)r   opcoderg   widthr
   r
   r   test_widths  s   
zDisTests.test_widthsc                 C      |  tt d S r*   )r_   r#   dis_frd   r
   r
   r   test_dis     zDisTests.test_disc                 C   rt   r*   )r_   r'   dis_bug708901rd   r
   r
   r   test_bug_708901  rw   zDisTests.test_bug_708901c                 C   s   	 |  d | tt d S )NTzneed asserts, run without -O)ZskipTestr_   r+   dis_bug1333982rd   r
   r
   r   test_bug_1333982  s   
zDisTests.test_bug_1333982c                 C   rt   r*   )r_   r,   dis_bug42562rd   r
   r
   r   test_bug_42562  rw   zDisTests.test_bug_42562c                 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
rE   joinexeccount	namespacerQ   r
   r
   r   rQ     s   
z'DisTests.test_big_linenos.<locals>.funcr   i,  r     r$   i  r   )
dis_module)r%   _BIG_LINENO_FORMATr_   _BIG_LINENO_FORMAT2testr   dis_module_expected_results)r   rQ   ir^   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):
 ;r.   z

 return xrE   r   r   r
   r
   r   rQ   2  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   r0      r
   )r@   r   wr
   r   rB   9  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   sr
   r   r   r^   8  s   

z+DisTests.test_big_offsets.<locals>.expectedr   r/   r0   i  i  )r%   r_   )r   rQ   r^   r   r
   r
   r   test_big_offsets1  s   zDisTests.test_big_offsetsc                 C   s4   |  tt |  tt |  tt |  tt d S r*   )	r_   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_strrd   r
   r
   r   test_disassemble_strM  s   zDisTests.test_disassemble_strc                 C   s   |  tjjt d S r*   )r_   r#   __code__co_codedis_f_co_coderd   r
   r
   r   test_disassemble_bytesS  s   zDisTests.test_disassemble_bytesc                 C   rt   r*   )r_   r   dis_crd   r
   r
   r   test_disassemble_classV  rw   zDisTests.test_disassemble_classc                 C   s   |  tdjt d S r   )r_   r   r   dis_c_instance_methodrd   r
   r
   r    test_disassemble_instance_methodY     z)DisTests.test_disassemble_instance_methodc                 C   s   t djjj}| |t d S r   )r   r   r   r   r_   dis_c_instance_method_bytes)r   Zmethod_bytecoder
   r
   r   &test_disassemble_instance_method_bytes\     z/DisTests.test_disassemble_instance_method_bytesc                 C      |  tjt d S r*   )r_   r   r   dis_c_static_methodrd   r
   r
   r   test_disassemble_static_method`     z'DisTests.test_disassemble_static_methodc                 C   r   r*   )r_   r   r   dis_c_class_methodrd   r
   r
   r   test_disassemble_class_methodc  r   z&DisTests.test_disassemble_class_methodc                 C   (   |  t}|  td}| || d S r   )rV   r;   r]   )r   Zgen_func_disasZ	gen_disasr
   r
   r   test_disassemble_generatorf     
z#DisTests.test_disassemble_generatorc                 C   r   r   )rV   r=   r]   )r   Zagen_func_disasZ
agen_disasr
   r
   r    test_disassemble_async_generatork  r   z)DisTests.test_disassemble_async_generatorc                 C   s4   |  t}td}|  |  |}| || d S r   )rV   r?   closer]   )r   Zcoro_func_disascoroZ
coro_disasr
   r
   r   test_disassemble_coroutinep  s
   

z#DisTests.test_disassemble_coroutinec                 C   rt   r*   )r_   r7   dis_fstringrd   r
   r
   r   test_disassemble_fstringw  rw   z!DisTests.test_disassemble_fstringc                 C   s   |  tt |  tt d S r*   )r_   r9   dis_tryfinallyr:   dis_tryfinallyconstrd   r
   r
   r   test_disassemble_try_finallyz  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RuntimeErrorrM   rd   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   rW   tb_framef_codetb_lastir_   )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   	TypeErrorrM   objectrd   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*   )rV   rF   r[   r]   )r^   rT   rM   rd   r
   r   check  s   
z2DisTests.test_disassemble_recursive.<locals>.checkr   r\   r   r   r(   )dis_nested_0dis_nested_1dis_nested_2)r   r   r
   rd   r   test_disassemble_recursive  s   z#DisTests.test_disassemble_recursiverH   T)rH   )"r   r   r   maxDiffrV   rW   r[   r_   re   rh   rl   rs   rv   ry   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r
   r
   r   rG     s@    


rG   c                   @   s   e Zd ZdddZdS )DisWithFileTestsrH   Tc                 K   sJ   t  }|rtj|fd|i| | S tj||fd|i| | S )Nfile)rI   rJ   rM   rN   rO   rP   r
   r
   r   rV     s   z DisWithFileTests.get_disassemblyNr   )r   r   r   rV   r
   r
   r
   r   r     s    r   z0: NonezA0: 'Formatted details of methods, functions, or code.'
   1: NonezName:              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    )r5   r"   r4   r6   r   fr   rD   rA   r
   r   r     ri   ztricky.<locals>.fr
   )
r"   r4   r   rD   rA   r5   r6   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
   2: None
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   )r4   r5   )r"   r6   r
   r
   r   	async_def8  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assertRegexrM   	code_info)r   r   r^   r
   r
   r   test_code_info[  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   rM   Z	show_coder   rO   rI   rJ   )r   r   r^   rU   r
   r
   r   test_show_code`  s   zCodeInfoTests.test_show_codec                 C   s   |  ttjt  d S r*   )r   r   rM   r   r   rd   r
   r
   r   test_code_info_objectj  r   z#CodeInfoTests.test_code_info_objectc                 C   s   |  tdd d S )Nr   Z0x0)r]   rM   Zpretty_flagsrd   r
   r
   r   test_pretty_flags_no_flagsm  r   z(CodeInfoTests.test_pretty_flags_no_flagsN)r   r   r   rM   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   P  s    

r   c                    s(   d fdd	}t  ddg i d |S )	Nr(   r0   c                    s&   d fdd	}t   |S )Nr/   r   c                    s   t  | | d S r*   r    )r   r   r3   r
   r   inneru  r   outer.<locals>.f.<locals>.innerr/   r   r    )r5   r6   r   r8   )r5   r6   r   r   t  s   outer.<locals>.fr~   r   Hello world!r(   r0   r    )r"   r4   r   r
   r8   r   outers  s   r   c                  C   s   t dD ]} t|  | dk rq| dkr qqtd | r0t|  | d8 } | dkr)q| dk r.q4| 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$   r0   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   ra   d   r   r   z(3, 4)F)rg   rq   argZargvalZargreproffsetZstarts_lineZis_jump_targetZLOAD_CLOSURE   r"   r4   ZBUILD_TUPLEf   r~   r   r   z'outer.<locals>.f'r$   ZMAKE_FUNCTION   r`   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"   rf   |   $   ZRETURN_VALUES   &   r   z(5, 6)r5   r6   r   z!'outer.<locals>.f.<locals>.inner'r   r   Noner%   Z10ZGET_ITERD   ZFOR_ITER]      ,   zto 44r   r2   Z
COMPARE_OPk   <ZPOP_JUMP_IF_FALSEr      zto 30ZJUMP_ABSOLUTEq   zto 86>   *   zto 424   zto 52(   r   z'I can haz else clause?'.   0   2      `   zto 966   8   :   <   >   @      B   ZINPLACE_SUBTRACTF   H   J   L   )   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   0n   ZBINARY_TRUE_DIVIDE   p   Z	POP_BLOCKW   ZJUMP_FORWARD   zto 146v   ZDUP_TOPr   rm   y      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   simplen  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   w  s   
zInstructionTests.__init__c                 C   s   t t}| t|t d S r*   rM   get_instructionsr  r]   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  )rM   r  r   expected_outer_liner]   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   rM   r  expected_f_liner]   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   rM   r  expected_inner_liner]   r  expected_opinfo_inner)r   r   r  r
   r
   r   test_doubly_nested  s
   
z#InstructionTests.test_doubly_nestedc                 C   r  r  )rM   r  r   expected_jumpy_liner]   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  u  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    q
1 s*w   Y  q
| ttjt  d S Nr   za=1)obj)r#   r   r   r   ro   rM   BytecodeZassertIsInstanceZcodeobjtypesCodeTyper   r   r   )r   r  r4   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    q
1 s1w   Y  q
d S r  )
r#   r   r   r   ro   r  rM   r  r  r]   )r   r  Z
via_objectZvia_generatorr
   r
   r   test_iteration  s   zBytecodeTests.test_iterationc                 C   r  r  )rM   r  r   r  r]   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 )Nr1   r   i^  r  Z350)	rM   r  r  strip	partitionstrr   co_firstlinenor]   )r   r  r^   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   rM   r  r   info)r   r   r^   r4   r
   r
   r   	test_info  s
   
zBytecodeTests.test_infoc                 C   s   t t  }| |t d S r*   )rM   r  r#   r]   ru   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   rM   r  from_tracebackr   r]   Zcurrent_offsetr   r   r	   r4   r
   r
   r   test_from_traceback  s   z!BytecodeTests.test_from_tracebackc                 C   s&   t  }tj|}| | t d S r*   )r   rM   r  r  r]   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   ra   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   ra   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   ra   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  __main__)T)r   r   )hZtest.supportr   Ztest.support.bytecode_helperr   Zunittestr   rM   rI   rX   r  rK   r   r   r   ZTRACEBACK_CODEr   r   r   r  r   r   r   r   r   r   r   r   r#   ru   r   r'   rx   r+   __file__rz   r,   replacer|   r   r   r   r   r   r   r   r   r   r   r   r  r7   r   r9   r:   r   r   r;   r=   r?   rF   r   r   r   ZTestCaserG   r   flagsoptimizeZ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  mainr
   r
   r
   r   <module>   s  
















	%-














 P

!#	


	
 !"#$%&'()*+,-./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