3
s«Y]|­  ã            j   @   s4  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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 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Z$dZ%dZ&dZ'dZ(dZ)d Z*d!Z+d"Z,d#Z-d$ejd	 ejd ejd ejd% ejd& f Z.d'd(„ Z/d)e/jjd	 f Z0d*d+„ Z1G d,d-„ d-ej2ƒZ3G d.d/„ d/e3ƒZ4d0ej5j6dk rdnd Z7e8dg d3œd4d5„ƒZ9d6Z:e9j;jj<d	 Z=d7Z>d8Z?d9Z@d:ZAd;d<„ ZBd=ZCG d>d?„ d?ej2ƒZDdd@dA„ZEdBdC„ ZFd	ZGeEjjd	 ZHeEjj<d ZIeIjeH ZJeIj<d ZKeKjeH ZLd	ZMejNZNeNdDdEdFddGd ddHdIeNdJdKd dLdLdddHdIeNdJdKd	dMdMd%ddHdIeNdNdOdddPdQddHdIeNdDdEdeIeOeIƒdFddHdIeNdDdEd%dRdSdTddHdIeNdUdVdWdWdPdXddHdIeNdYdZdd[d[d\ddHdIeNd]d^d d_d_d`dadHdIeNdbdcd dLdLddddHdIeNdbdcd	dMdMdeddHdIeNdDdEd&dPdfdgddHdIeNdDdEdQd	dhdiddHdIeNdjdkd d dPdlddHdIeNdmdnd d dPdoddHdIeNdDdEdadpdqdrddHdIeNdsdtdadadPduddHdIeNdvd	dddPdwddHdIeNdxdydd[d[dzdFdHdIeNd{d|dddPd}ddHdIgZPeNdDdEd&dd~d ddHdIeNdJdKddLdLdddHdIeNdJdKddMdMd%ddHdIeNdJdKd dddQddHdIeNdJdKd	d€d€dFddHdIeNdNdOd%d%dPdTddHdIeNdDdEdeKeOeKƒdXddHdIeNdDdEd%dd‚d\ddHdIeNdUdVdWdWdPd`ddHdIeNdYdZddƒdƒddddHdIeNd]d^d d_d_ded&dHdIeNdbdcddLdLdgddHdIeNdbdcddMdMdiddHdIeNdbdcd dddlddHdIeNdbdcd	d€d€doddHdIeNdsdtd%d%dPdrddHdIeNdvd	dddPduddHdIeNdxdyddƒdƒdwdQdHdIeNd{d|dddPdzddHdIgZQeNd]d^d d_d_d d%dHdIeNdbdcd dLdLdddHdIeNdbdcd	dMdMd%ddHdIeNdbdcddddQddHdIeNdbdcdd€d€dFddHdIeNdxdyd d„d„dTddHdIeNdxdyd	d[d[dXddHdIeNdsdtdQdQdPd\ddHdIeNdvd	dddPd`ddHdIeNdDdEd dd…ddddHdIeNd{d|dddPdeddHdIgZReNd†d‡dˆd‰dŠd ddHdIeNd]d^d d‹d‹dddHdIeNdDdEd	dTdŒd%ddHdIeNdsdtd	d	dPdQddHdIeNddŽdddPdFddHdIeNdddud‘d’dTdd2dIeNdYdZd d“d“dXddHdIeNd]d^d	d_d_d\d%dHdIeNdxdyd d“d“d`ddHdIeNdsdtd	d	dPddddHdIeNdvd	dddPdeddHdIeNdxdyd d“d“dgd&dHdIeNdDdEdd%d”diddHdIeNd•d–d d—d—dlddHdIeNd˜d™dududPdoddHdIeNdšd›dTdTdPdrdQdHdIeNdxdyd d“d“dudad2dIeNdDdEddQdœdwddHdIeNd•d–d%dddzddHdIeNd˜d™dTdTdPd}ddHdIeNdždŸdddPd dFdHdIeNdšd›dTdTdPd¡ddHdIeNd¢d£dddPd‘dd2dIeNd]d^d	d_d_d¤dTdHdIeNdDdEd%d¥d¦d§ddHdIeNdsdtd	d	dPd¨ddHdIeNdvd	dddPdˆddHdIeNd†d‡dˆd©dªd‰d«d2dIeNdxdyd d“d“d¬dd2dIeNd˜d™d­d­dPd®ddHdIeNd]d^d	d_d_d¯dXdHdIeNdxdyd d“d“d°ddHdIeNdsdtd	d	dPd±ddHdIeNdvd	dddPd²ddHdIeNdxdyd d“d“dŽd³dHdIeNdDdEd&d	dhd´ddHdIeNdµd¬dddPd¶ddHdIeNdYdZd d“d“d·ddHdIeNdxdyd d“d“d¸d\dHdIeNdDdEddQdœd¹ddHdIeNd•d–d%dddŸddHdIeNd˜d™dºdºdPd»ddHdIeNdšd›d¬d¬dPd¼d½dHdIeNdxdyd d“d“dºd`d2dIeNdDdEdd%d”d¾ddHdIeNd•d–d d—d—d¿ddHdIeNd˜d™d¬d¬dPdÀddHdIeNdždŸdddPdÁdÂdHdIeNdšd›d¬d¬dPdÃddHdIeNd¢d£dddPd­dd2dIeNd]d^d	d_d_dEdÄdHdIeNdDdEdQdÅdÆdOddHdIeNdsdtd	d	dPdÇddHdIeNdvd	dddPdÈddHdIeNdÉdÊd´dËdÌd©ded2dIeNdÍdÎdXdydÏdÐddHdIeNdDdEd&d	dhdÑdÒdHdIeNdDdEdad dÓd™ddHdIeNdÔdÕdddPd^ddHdIeNdvd	dddPdÖddHdIeNd¢d£dddPd‡ddHdIeNd×dÐdodØdÙdÊddHdIeNdÚd%dddPdydgd2dIeNd]d^ddÛdÛdÜddHdIeNd•d–dTdÝdÝdÞddHdIeNd˜d™dßdßdPdàddHdIeNdvd	dddPdVddHdIeNdvd	dddPdáddHdIeNdvd	dddPdcddHdIeNd]d^d	d_d_dâdãdHdIeNdDdEdFdädådæddHdIeNdsdtd	d	dPdçddHdIeNdvd	dddPdèddHdIeNdédêdddPdëddHdIeNd×dÐdldìdídîddHdIeNdïd¾dddPdßdd2dIeNdxdyd d“d“dØdðd2dIeNdñdòd\dódôdõddHdIeNdYdZd	dödöd÷ddHdIeNd]d^d	d_d_dødldHdIeNdDdEdWdùdúdûddHdIeNdsdtd	d	dPdüddHdIeNdvd	dddPdýddHdIeNd¢d£dddPdþddHdIeNdDdEd dd…dÿddHdIeNd ddddPdódd2dIeNdd»dddPdddHdIeNdïd¾dddPdddHdIeNd¢d£dddPdìdd2dIeNdDdEd dd…dddHdIeNd]d^d	d_d_dËdod2dIeNdDdEdTdddddHdIeNdsdtd	d	dPd	ddHdIeNdvd	dddPd
ddHdIeNdïd¾dddPdddHdIeNdDdEd dd…dddHdIeNd{d|dddPdddHdIgaZSdd„ ZTeNdDdEd dd…d eTjjdHdIeNd{d|dddPdddHdIgZUG dd„ deƒZVG dd„ dej2ƒZWedkr0ejXƒ  dS (  é    )Úcaptured_stdout)ÚBytecodeTestCaseNc              C   s$   dd„ } | ƒ }x|j r|j }qW |S )Nc              S   s:   ydd  W n( t k
r4 }  z| j}W Y d d } ~ X nX |S )Né   r   )Ú	ExceptionÚ__traceback__)ÚeÚtb© r	   úlib/python3.6/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   s   |dk| _ d S )Nr   )Úx)Úselfr   r	   r	   r
   Ú__init__   s    z_C.__init__c             C   s   | dk} d S )Nr   r	   )r   r	   r	   r
   Úsm!   s    z_C.smc             C   s   |dk| _ d S )Nr   )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 )Nr   )Ú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   xt ddƒD ]} qW d S )Nr   é
   )Úrange)Úresr	   r	   r
   Ú	bug708901v   s    
r!   a  %3d           0 SETUP_LOOP              18 (to 20)
              2 LOAD_GLOBAL              0 (range)
              4 LOAD_CONST               1 (1)

%3d           6 LOAD_CONST               2 (10)
              8 CALL_FUNCTION            2
             10 GET_ITER
        >>   12 FOR_ITER                 4 (to 18)
             14 STORE_FAST               0 (res)

%3d          16 JUMP_ABSOLUTE           12
        >>   18 POP_BLOCK
        >>   20 LOAD_CONST               0 (None)
             22 RETURN_VALUE
é   c             C   s   dst dd„ | D ƒd ƒ‚d S )Nr   c             S   s   g | ]}|‘qS r	   r	   )Ú.0Úsr	   r	   r
   ú
<listcomp>   s    zbug1333982.<locals>.<listcomp>r   )ÚAssertionError)r   r	   r	   r
   Ú
bug1333982   s    r'   aÖ  %3d           0 LOAD_CONST               1 (0)
              2 POP_JUMP_IF_TRUE        26
              4 LOAD_GLOBAL              0 (AssertionError)
              6 LOAD_CONST               2 (<code object <listcomp> at 0x..., file "%s", line %d>)
              8 LOAD_CONST               3 ('bug1333982.<locals>.<listcomp>')
             10 MAKE_FUNCTION            0
             12 LOAD_FAST                0 (x)
             14 GET_ITER
             16 CALL_FUNCTION            1

%3d          18 LOAD_CONST               4 (1)
             20 BINARY_ADD
             22 CALL_FUNCTION            1
             24 RAISE_VARARGS            1

%3d     >>   26 LOAD_CONST               0 (None)
             28 RETURN_VALUE
z™%3d           0 LOAD_GLOBAL              0 (spam)
              2 POP_TOP
              4 LOAD_CONST               0 (None)
              6 RETURN_VALUE
zÄDisassembly 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
z	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 STORE_ANNOTATION         0 (x)

  3          10 LOAD_NAME                2 (fun)
             12 LOAD_CONST               0 (1)
             14 CALL_FUNCTION            1
             16 STORE_ANNOTATION         3 (y)

  4          18 LOAD_CONST               0 (1)
             20 LOAD_NAME                4 (lst)
             22 LOAD_NAME                2 (fun)
             24 LOAD_CONST               1 (0)
             26 CALL_FUNCTION            1
             28 STORE_SUBSCR
             30 LOAD_NAME                1 (int)
             32 POP_TOP
             34 LOAD_CONST               2 (None)
             36 RETURN_VALUE
zx = 0
while 1:
    x += 1aÐ    1           0 LOAD_CONST               0 (0)
              2 STORE_NAME               0 (x)

  2           4 SETUP_LOOP              12 (to 18)

  3     >>    6 LOAD_NAME                0 (x)
              8 LOAD_CONST               1 (1)
             10 INPLACE_ADD
             12 STORE_NAME               0 (x)
             14 JUMP_ABSOLUTE            6
             16 POP_BLOCK
        >>   18 LOAD_CONST               2 (None)
             20 RETURN_VALUE
a¯  %3d           0 SETUP_EXCEPT            12 (to 14)

%3d           2 LOAD_CONST               1 (1)
              4 LOAD_CONST               2 (0)
    -->       6 BINARY_TRUE_DIVIDE
              8 POP_TOP
             10 POP_BLOCK
             12 JUMP_FORWARD            40 (to 54)

%3d     >>   14 DUP_TOP
             16 LOAD_GLOBAL              0 (Exception)
             18 COMPARE_OP              10 (exception match)
             20 POP_JUMP_IF_FALSE       52
             22 POP_TOP
             24 STORE_FAST               0 (e)
             26 POP_TOP
             28 SETUP_FINALLY           12 (to 42)

%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 LOAD_CONST               0 (None)
             44 STORE_FAST               0 (e)
             46 DELETE_FAST              0 (e)
             48 END_FINALLY
             50 JUMP_FORWARD             2 (to 54)
        >>   52 END_FINALLY

%3d     >>   54 LOAD_FAST                1 (tb)
             56 RETURN_VALUE
é   é   c             C   s   | › d|d›d|›d|d›S )Nú Ú4r	   )r   ÚbÚcÚdr	   r	   r
   Ú_fstring0  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
   | V  d S )Nr	   )r   r	   r	   r
   Ú_gE  s    r0   c               @   sÈ   e Zd Zd3dd„Zd5d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d/d0„ Zd1S )6ÚDisTestsr   Tc          
   C   sB   t jƒ }tj|ƒ" |r$tj|ƒ ntj||ƒ W d Q R X |jƒ S )N)ÚioÚStringIOÚ
contextlibÚredirect_stdoutÚdisÚdisassembleÚgetvalue)r   ÚfuncÚlastiÚwrapperÚoutputr	   r	   r
   Úget_disassemblyJ  s    zDisTests.get_disassemblyc             C   s   | j ||dƒS )NF)r=   )r   r9   r:   r	   r	   r
   Úget_disassemble_as_stringT  s    z"DisTests.get_disassemble_as_stringc             C   s   t jdd|ƒS )Nz\b0x[0-9A-Fa-f]+\bz0x...)ÚreÚsub)r   Útextr	   r	   r
   Ústrip_addressesW  s    zDisTests.strip_addressesc             C   s,   | j |ƒ}||kr| j|ƒ}| j||ƒ d S )N)r=   rB   ÚassertEqual)r   r9   ÚexpectedZgotr	   r	   r
   Údo_disassembly_testZ  s    

zDisTests.do_disassembly_testc             C   s>   | j tjd dƒ | jtjd tjƒ | jtjd tjƒ d S )NZNOPé	   Ú
LOAD_CONSTÚ
STORE_NAME)rC   r6   ÚopmapZassertInZhasconstZhasname)r   r	   r	   r
   Ú
test_opmap`  s    zDisTests.test_opmapc             C   s   | j tjtjd  dƒ d S )NÚ	LOAD_FAST)rC   r6   ÚopnamerI   )r   r	   r	   r
   Útest_opnamee  s    zDisTests.test_opnamec             C   s,   | j tjd tjƒ | j tjd tjƒ d S )NÚEXTENDED_ARGrH   )rC   r6   rI   rN   ZHAVE_ARGUMENT)r   r	   r	   r
   Útest_boundariesh  s    zDisTests.test_boundariesc             C   s   | j ttƒ d S )N)rE   r   Údis_f)r   r	   r	   r
   Útest_disl  s    zDisTests.test_disc             C   s   | j ttƒ d S )N)rE   r!   Údis_bug708901)r   r	   r	   r
   Útest_bug_708901o  s    zDisTests.test_bug_708901c             C   s   ds| j dƒ | jttƒ d S )NTzneed asserts, run without -O)ZskipTestrE   r'   Údis_bug1333982)r   r	   r	   r
   Útest_bug_1333982r  s    
zDisTests.test_bug_1333982c             C   s†   dd„ }x.t ddƒD ] }t|d  }| j||ƒ|ƒ qW x0t dddƒD ] }t|d  }| j||ƒ|ƒ qFW dd	lm} | j|tƒ d S )
Nc             S   s0   i }ddj dg|  dg ƒ }t||ƒ |d S )Nzdef foo():
 Ú z
 zspam
Zfoo)ÚjoinÚexec)ÚcountÚ	namespacer9   r	   r	   r
   r9   {  s    
z'DisTests.test_big_linenos.<locals>.funcr   i,  r   iˆ  r   r   )Ú
dis_module)r   Ú_BIG_LINENO_FORMATrE   Ztestr[   Údis_module_expected_results)r   r9   ÚirD   r[   r	   r	   r
   Útest_big_linenosz  s    zDisTests.test_big_linenosc             C   s4   | j ttƒ | j ttƒ | j ttƒ | j ttƒ d S )N)	rE   Ú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_str)r   r	   r	   r
   Útest_disassemble_strŽ  s    zDisTests.test_disassemble_strc             C   s   | j tjjtƒ d S )N)rE   r   Ú__code__Úco_codeÚdis_f_co_code)r   r	   r	   r
   Útest_disassemble_bytes”  s    zDisTests.test_disassemble_bytesc             C   s   | j ttƒ d S )N)rE   r   Údis_c)r   r	   r	   r
   Útest_disassemble_class—  s    zDisTests.test_disassemble_classc             C   s   | j tdƒjtƒ d S )Nr   )rE   r   r   Údis_c_instance_method)r   r	   r	   r
   Ú test_disassemble_instance_methodš  s    z)DisTests.test_disassemble_instance_methodc             C   s   t dƒjjj}| j|tƒ d S )Nr   )r   r   ri   rj   rE   Údis_c_instance_method_bytes)r   Zmethod_bytecoder	   r	   r
   Ú&test_disassemble_instance_method_bytes  s    z/DisTests.test_disassemble_instance_method_bytesc             C   s   | j tjtƒ d S )N)rE   r   r   Údis_c_static_method)r   r	   r	   r
   Útest_disassemble_static_method¡  s    z'DisTests.test_disassemble_static_methodc             C   s   | j tjtƒ d S )N)rE   r   r   Údis_c_class_method)r   r	   r	   r
   Útest_disassemble_class_method¤  s    z&DisTests.test_disassemble_class_methodc             C   s(   | j tƒ}| j tdƒƒ}| j||ƒ d S )Nr   )r=   r0   rC   )r   Zgen_func_disasZ	gen_disasr	   r	   r
   Útest_disassemble_generator§  s    
z#DisTests.test_disassemble_generatorc             C   s   | j ttƒ d S )N)rE   r/   Údis_fstring)r   r	   r	   r
   Útest_disassemble_fstring¬  s    z!DisTests.test_disassemble_fstringc             C   s2   yt `W n tk
r   Y nX | jttjd ƒ d S )N)ÚsysÚlast_tracebackÚAttributeErrorÚassertRaisesÚRuntimeErrorr6   )r   r	   r	   r
   Útest_dis_none¯  s
    zDisTests.test_dis_nonec             C   s|   yt `W n tk
r   Y nX ydd  W n. tk
rX } z|j}|t _W Y d d }~X nX | j|jj|jƒ}| j	d |ƒ d S )Nr   r   )
rz   r{   r|   r   r   r>   Útb_frameÚf_codeÚtb_lastirE   )r   r   r   Ztb_disr	   r	   r
   Útest_dis_traceback¶  s    zDisTests.test_dis_tracebackc             C   s   | j ttjtƒ ƒ d S )N)r}   Ú	TypeErrorr6   Úobject)r   r	   r	   r
   Útest_dis_objectÅ  s    zDisTests.test_dis_objectNéÿÿÿÿ)r‡   Tr‡   )r‡   )r   r   r   r=   r>   rB   rE   rJ   rM   rO   rQ   rS   rU   r_   rh   rl   rn   rp   rr   rt   rv   rw   ry   r   rƒ   r†   r	   r	   r	   r
   r1   H  s.   


r1   c               @   s   e Zd Zddd„ZdS )ÚDisWithFileTestsr   Tc             C   s4   t jƒ }|rtj||d ntj|||d |jƒ S )N)Úfile)r2   r3   r6   r7   r8   )r   r9   r:   r;   r<   r	   r	   r
   r=   Ë  s
    z DisWithFileTests.get_disassemblyNr‡   )r‡   T)r   r   r   r=   r	   r	   r	   r
   rˆ   È  s   rˆ   a  Name:              code_info
Filename:          (.*)
Argument count:    1
Kw-only arguments: 0
Number of locals:  1
Stack size:        3
Flags:             OPTIMIZED, NEWLOCALS, NOFREE
Constants:
   0: %r
Names:
   0: _format_code_info
   1: _get_code_object
Variable names:
   0: xú1Formatted details of methods, functions, or code.T)r   c            /   s2   |f‡ ‡‡‡‡‡fdd„	‰ˆˆˆ|ˆ ˆˆfV  d S )Nc                s   t ˆˆˆ| ˆ ˆˆƒ d S )N)r   )r-   )r.   r   Úfr   ÚyÚzr	   r
   r‹   è  s    ztricky.<locals>.fr	   )r   rŒ   r   r-   r.   r   ÚargsÚkwdsr	   )r.   r   r‹   r   rŒ   r   r
   Útrickyæ  s    r   aô  Name:              tricky
Filename:          (.*)
Argument count:    3
Kw-only arguments: 3
Number of locals:  8
Stack size:        7
Flags:             OPTIMIZED, NEWLOCALS, VARARGS, VARKEYWORDS, GENERATOR
Constants:
   0: None
   1: <code object f at (.*), file "(.*)", line (.*)>
   2: 'tricky.<locals>.f'
Variable names:
   0: x
   1: y
   2: z
   3: c
   4: d
   5: e
   6: args
   7: kwds
Cell variables:
   0: [edfxyz]
   1: [edfxyz]
   2: [edfxyz]
   3: [edfxyz]
   4: [edfxyz]
   5: [edfxyz]a[  Name:              f
Filename:          (.*)
Argument count:    1
Kw-only arguments: 0
Number of locals:  1
Stack size:        8
Flags:             OPTIMIZED, NEWLOCALS, NESTED
Constants:
   0: None
Names:
   0: print
Variable names:
   0: c
Free variables:
   0: [edfxyz]
   1: [edfxyz]
   2: [edfxyz]
   3: [edfxyz]
   4: [edfxyz]
   5: [edfxyz]zÌName:              <module>
Filename:          <disassembly>
Argument count:    0
Kw-only arguments: 0
Number of locals:  0
Stack size:        2
Flags:             NOFREE
Constants:
   0: 1
Names:
   0: xz×Name:              <module>
Filename:          <disassembly>
Argument count:    0
Kw-only arguments: 0
Number of locals:  0
Stack size:        2
Flags:             NOFREE
Constants:
   0: 1
   1: None
Names:
   0: xzßName:              <module>
Filename:          <disassembly>
Argument count:    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  x.t 2 d H y3 d H } W q tk
s.X q   Y  W t4 I d H š}W d Q I d H R X d S )Nr   )r,   ÚStopAsyncIterationr-   )r   r.   r	   r	   r
   Ú	async_defM  s
    
"  r’   zâName:              async_def
Filename:          (.*)
Argument count:    0
Kw-only arguments: 0
Number of locals:  2
Stack size:        16
Flags:             OPTIMIZED, NEWLOCALS, NOFREE, COROUTINE
Constants:
   0: None
   1: 1c               @   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   s0   d| _ x$| jD ]\}}| jtj|ƒ|ƒ qW d S )Niè  )ÚmaxDiffÚ
test_pairsÚassertRegexr6   Ú	code_info)r   r   rD   r	   r	   r
   Útest_code_infoi  s    zCodeInfoTests.test_code_infoc             C   st   d| _ xh| jD ]^\}}tƒ }tj|ƒ W d Q R X | j|jƒ |d ƒ tjƒ }tj||d | j|jƒ |ƒ qW d S )Niè  Ú
)r‰   )	r”   r•   r   r6   Z	show_coder–   r8   r2   r3   )r   r   rD   r<   r	   r	   r
   Útest_show_coden  s    zCodeInfoTests.test_show_codec             C   s   | j ttjtƒ ƒ d S )N)r}   r„   r6   r—   r…   )r   r	   r	   r
   Útest_code_info_objectx  s    z#CodeInfoTests.test_code_info_objectc             C   s   | j tjdƒdƒ d S )Nr   Z0x0)rC   r6   Zpretty_flags)r   r	   r	   r
   Útest_pretty_flags_no_flags{  s    z(CodeInfoTests.test_pretty_flags_no_flagsN)r   r   r   r6   r—   Úcode_info_code_infor   Úcode_info_trickyÚco_tricky_nested_fÚcode_info_tricky_nested_fr`   Úcode_info_expr_strrb   Úcode_info_simple_stmt_strrf   Úcode_info_compound_stmt_strr’   Úcode_info_async_defr•   r˜   rš   r›   rœ   r	   r	   r	   r
   r“   ^  s   

r“   c                s(   d‡ ‡fdd„	}t ˆ ˆddg i dƒ |S )	Nr"   r(   c                s&   d‡‡‡ ‡fdd„	}t ˆˆˆ ˆƒ |S )Nr)   é   c                s   t ˆ ˆˆˆ| |ƒ d S )N)r   )r   r‹   )r   r,   r-   r.   r	   r
   Úinnerƒ  s    zouter.<locals>.f.<locals>.inner)r)   r¥   )r   )r-   r.   r¦   )r   r,   )r-   r.   r
   r‹   ‚  s    zouter.<locals>.frV   r   zHello world!)r"   r(   )r   )r   r,   r‹   r	   )r   r,   r
   Úouter  s    r§   c              C   sÂ   x4t dƒD ] } t| ƒ | dk r q
| dkr
P q
W tdƒ x4| rbt| ƒ | d8 } | dkrVq8| dk r8P q8W tdƒ zFydd  W n tk
r–   tdƒ Y nX | }td	ƒ W d Q R X W d td
ƒ X d S )Nr   r(   r¥   zI can haz else clause?r   z%Who let lolcatz into this test suite?r   z%Here we go, here we go, here we go...zNever reach thiszOK, now we're done)r   r   ÚZeroDivisionError)r^   Údodgyr	   r	   r
   ÚjumpyŠ  s,    rª   rG   éd   é   z(3, 4)F)rL   ZopcodeÚargZargvalZargreprÚoffsetZstarts_lineZis_jump_targetZLOAD_CLOSUREé‡   r   r,   ZBUILD_TUPLEéf   rV   r¥   zouter.<locals>.fz'outer.<locals>.f'r   ZMAKE_FUNCTIONé„   rF   é   Z
STORE_FASTé}   r‹   é   ZLOAD_GLOBALét   r   é   é   Z
LOAD_DEREFéˆ   é   é   z''é   Ú1é   Z
BUILD_LISTég   é   Z	BUILD_MAPéi   é   zHello world!z'Hello world!'é   ZCALL_FUNCTIONéƒ   é    ZPOP_TOPé"   rK   é|   é$   ZRETURN_VALUEéS   é&   z(5, 6)r-   r.   zouter.<locals>.f.<locals>.innerz!'outer.<locals>.f.<locals>.inner'r¦   r   ÚNoneZ
SETUP_LOOPéx   é4   é6   zto 54r   Z10ZGET_ITERéD   ZFOR_ITERé]   é,   zto 44r^   r+   Z
COMPARE_OPék   ú<ZPOP_JUMP_IF_FALSEér   ZJUMP_ABSOLUTEéq   Ú6ú>Z
BREAK_LOOPéP   é(   é*   Z	POP_BLOCKéW   é.   zI can haz else clause?z'I can haz else clause?'é0   é2   él   zto 108é   é8   éb   é:   é<   é>   é@   éB   é   éF   ZINPLACE_SUBTRACTéH   éJ   éL   éN   éV   éR   éT   é   éX   éZ   é\   é^   é   é`   é   z%Who let lolcatz into this test suite?z''Who let lolcatz into this test suite?'éh   éj   ZSETUP_FINALLYéz   é´   zto 180ZSETUP_EXCEPTéy   zto 124én   ép   é   Ú0ZBINARY_TRUE_DIVIDEé   év   ZJUMP_FORWARDé˜   zto 152ZDUP_TOPr¨   é~   zexception matché€   é–   é‚   é†   éŠ   é   z%Here we go, here we go, here we go...z''Here we go, here we go, here we go...'éŒ   éŽ   é   Z
POP_EXCEPTéY   é’   é°   zto 176é”   ZEND_FINALLYé   Z
SETUP_WITHé   éª   zto 170éš   r©   éœ   éž   zNever reach thisz'Never reach this'é    é¢   é¤   é¦   é¨   ZWITH_CLEANUP_STARTéQ   ZWITH_CLEANUP_FINISHé¬   é®   é²   zOK, now we're donez"OK, now we're done"é¶   é¸   éº   é¼   é¾   éÀ   c               C   s   d S )Nr	   r	   r	   r	   r
   Úsimpled  s    r'  c               @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚInstructionTestsc             C   s   t jtƒ}| jt|ƒtƒ d S )N)r6   Úget_instructionsr'  rC   ÚlistÚexpected_opinfo_simple)r   Úactualr	   r	   r
   Útest_default_first_linem  s    
z(InstructionTests.test_default_first_linec             C   s"   t jtd d}| jt|ƒtƒ d S )N)Ú
first_line)r6   r)  r'  rC   r*  r+  )r   r,  r	   r	   r
   Útest_first_line_set_to_Noneq  s    z,InstructionTests.test_first_line_set_to_Nonec             C   s"   t jttd}| jt|ƒtƒ d S )N)r.  )r6   r)  r§   Úexpected_outer_linerC   r*  Úexpected_opinfo_outer)r   r,  r	   r	   r
   Ú
test_outeru  s    zInstructionTests.test_outerc             C   s:   t ƒ  tƒ }W d Q R X tj|td}| jt|ƒtƒ d S )N)r.  )r   r§   r6   r)  Úexpected_f_linerC   r*  Úexpected_opinfo_f)r   r‹   r,  r	   r	   r
   Útest_nestedy  s    zInstructionTests.test_nestedc             C   s<   t ƒ  tƒ ƒ }W d Q R X tj|td}| jt|ƒtƒ d S )N)r.  )r   r§   r6   r)  Úexpected_inner_linerC   r*  Úexpected_opinfo_inner)r   r¦   r,  r	   r	   r
   Útest_doubly_nested  s    z#InstructionTests.test_doubly_nestedc             C   s"   t jttd}| jt|ƒtƒ d S )N)r.  )r6   r)  rª   Úexpected_jumpy_linerC   r*  Úexpected_opinfo_jumpy)r   r,  r	   r	   r
   Ú
test_jumpy…  s    zInstructionTests.test_jumpyN)	r   r   r   r-  r/  r2  r5  r8  r;  r	   r	   r	   r
   r(  k  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   sf   xNt tdƒjdt jgD ]6}| j|d  tj|ƒ}| j|jt	j
ƒ W d Q R X qW | jttjtƒ ƒ d S )Nr   za=1)Úobj)r   r   r   ri   ÚsubTestr6   ÚBytecodeZassertIsInstanceZcodeobjÚtypesÚCodeTyper}   r„   r…   )r   r=  r,   r	   r	   r
   Útest_instantiationŒ  s
    
z BytecodeTests.test_instantiationc             C   sb   x\t tdƒjdt jgD ]D}| j|d. ttj|ƒƒ}ttj|ƒƒ}| j	||ƒ W d Q R X qW d S )Nr   za=1)r=  )
r   r   r   ri   r>  r*  r6   r?  r)  rC   )r   r=  Z
via_objectZvia_generatorr	   r	   r
   Útest_iteration•  s
    zBytecodeTests.test_iterationc             C   s"   t jttd}| jt|ƒtƒ d S )N)r.  )r6   r?  r§   r0  rC   r*  r1  )r   r,  r	   r	   r
   Útest_explicit_first_lineœ  s    z&BytecodeTests.test_explicit_first_linec             C   sZ   t jtƒj ƒ d d… }djtjjƒ}| j||ƒ t jtddj ƒ d d… }| j|dƒ d S )Nr"   z{:>3}i^  )r.  Z350)r6   r?  r'  Úformatri   Úco_firstlinenorC   )r   r,  rD   r	   r	   r
   Útest_source_line_in_disassembly   s
    z-BytecodeTests.test_source_line_in_disassemblyc             C   s8   d| _ x,tjD ]"\}}tj|ƒ}| j|jƒ |ƒ qW d S )Niè  )r”   r“   r•   r6   r?  r–   Úinfo)r   r   rD   r,   r	   r	   r
   Ú	test_info©  s    
zBytecodeTests.test_infoc             C   s   t jtƒj ƒ }| j|tƒ d S )N)r6   r?  r   rC   rP   )r   r,  r	   r	   r
   Útest_disassembled¯  s    zBytecodeTests.test_disassembledc             C   s8   t ƒ }tjj|ƒ}x|jr"|j}qW | j|j|jƒ d S )N)r   r6   r?  Úfrom_tracebackr   rC   Zcurrent_offsetr‚   )r   r   r,   r	   r	   r
   Útest_from_traceback³  s
     
z!BytecodeTests.test_from_tracebackc             C   s&   t ƒ }tjj|ƒ}| j|jƒ tƒ d S )N)r   r6   r?  rK  rC   Údis_traceback)r   r   r,   r	   r	   r
   Útest_from_traceback_disº  s    z%BytecodeTests.test_from_traceback_disN)r   r   r   rB  rC  rD  rG  rI  rJ  rL  rN  r	   r	   r	   r
   r<  ‹  s   		r<  Ú__main__)rŠ   )N)T)r   r   )r"   r(   )r)   r¥   )YZtest.supportr   Ztest.bytecode_helperr   ZdifflibZunittestrz   r6   r2   r?   r@  r4   r   r€   r   ZTRACEBACK_CODEr   r   ri   rF  ro   rq   r   ru   r   rs   r   rm   r   rP   rk   r!   rR   r'   Ú__file__rT   r\   r]   r`   ra   rb   rc   rd   re   rf   rg   rM  r/   rx   r0   ZTestCaser1   rˆ   ÚflagsÚoptimizer   r   r   rž   Ú__func__Ú	co_constsrŸ   r    r¡   r¢   r£   r’   r¤   r“   r§   rª   r0  Z_line_offsetZcode_object_fr3  Zcode_object_innerr6  r9  ZInstructionÚreprr1  r4  r7  r:  r'  r+  r(  r<  Úmainr	   r	   r	   r
   Ú<module>   sÎ  


	





	$
  #	


 4